Running frida without root

关于ROOT

ARMV8的引入以及Google对安全的重视,使得Android获取ROOT权限很难。那个仅仅依靠一个apk就能实现手机ROOT的时代基本上一去不返了。apk提权基于的是Android系统的漏洞,目前Android已经很完善了,寻找漏洞非常困难。

目前获取ROOT基本都是通过刷安装包来实现。当然了Android模拟器可以很轻松获取ROOT权限。但是很多APP都对模拟器有检测,并且模拟器的架构基本上基于的是x86,与arm有很大的区别。

市面上大多数的手机都是非ROOT的,不能为了使用一次Frida就去刷机吧
————————————————
摘自: helloworlddm

确定手机cpu架构

1
adb shell getprop ro.product.cpu.abi

APK设置

解包

1
java -jar apktool_2.7.0.jar d java -jar apktool_2.7.0.jar d "G:\Android\SecDemo\app\release\app-release.apk" -o E:\AndroidSec\Secdemo-decomplie -f

image

编辑AndroidManifest

image

添加android:debuggable="true"

如果apk没有联网权限添加

1
<uses-permission android:name=<uses-permission android:name="android.permission.INTERNET" />

添加frida-gadget依赖库文件

下载Frida-gadget依赖库文件https://github.com/frida/frida/releases

在解包lib目录对应架构目录下添加frida-gadget依赖库文件,并重命名为libfrida-gadget.so

image

如果apk未引用native层函数,则手动创建相应目录

编辑Smali

修改smali代码,加载libfrida-gadget.so,通常是在ApplicationonCreate方法或者启动ActivityonCreate方法

image

代码含义

1
2
3
4
.locals 1 //声明局部寄存器数量
const/4 v0, 0x0 //声明一个寄存器v0,大小4字节,并赋值0x0
const-string v0, "frida-gadget" //将v0寄存器赋值字符串常量"frida-gadget"
invoke-static {v0}, Ljava/lang/System;->loadLibrary(Ljava/lang/String;)V .locals 1 //声明局部寄存器数量
const/4 v0, 0x0 //声明一个寄存器v0,大小4字节,并赋值0x0
const-string v0, "frida-gadget" //将v0寄存器赋值字符串常量"frida-gadget"
invoke-static {v0}, Ljava/lang/System;->loadLibrary(Ljava/lang/String;)V //调用system对象的loadLibrary返回void

重新打包APK

1
java -jar apktool_2.7.0.jar b E:\AndroidSec\Secdemo-decomplie -o secdemo-unsigned.apk

image

重签名APK

1
apksigner.bat sign -verbose --ks  secdemo.jks --v1-signing-enabled true --v2-signing-enabled apksigner.bat sign -verbose --ks  secdemo.jks --v1-signing-enabled true --v2-signing-enabled true --ks-pass pass:123456 --ks-key-alias key0 --out s ecdemo-signed.apk secdemo-unsigned.apk

image

覆盖安装APK

1
adb install -r secdemo-signed.apk

image

启动Frida-server

启动apk,此时apk会卡住,说明frida-server正在等待连接

使用logcat查看frida-server是否启动成功

image

1
2
adb shell
logcat | grep 27042

看到Listening on 127.0.0.1 TCP port 27042说明firda-server监听成功

Hook测试

接下来就是正常使用frida客户端进行hook

随便写一个hook脚本

image

加载脚本

1
frida.exe -U Gadget -l hook.js

image