Frida能干什么?对于不能反编译、重打包的apk,就是Frida的用武之地!
Frida通过代码插桩可以解决很多问题。比如:
- 我不买会员,想看一下会员页长什么样。
- 这个app有调试开关,我能不能打开啊?Frida可以!
- 我想快速知道,app从启动到某个页面,中间都走了哪些
Activity
。Frida可以!
官网
环境配置
- 电脑安装
pip install frida-tools
- 电脑安装,绑定:二选一就行
pip install frida # Python bindings npm install frida # Node.js bindings
- 下载server文件(x86模拟器对应
frida-server-12.8.20-android-x86
) - 安装server文件
adb shell getprop ro.product.cpu.abi#查看cpu架构 adb root adb push frida-server-12.8.20-android-x86 /data/local/tmp cd /data/local/tmp mv frida-server-12.8.20-android-x86 fs chmod 755 fs adb shell -x "/data/local/tmp/fs"
- 测试
frida-ps -U
#列出USB设备运行中的进程,模拟器也是usb设备 - 测试
frida-trace -U -i open com.android.settings
,然后打开"设置",随便点一下,命令行会有显示
hook
进行Hook com.hookme.MainActivity#checkXp0
函数
- 脚本
imei.js
Java.perform(function(){
console.log("######")
var logActivity = Java.use("com.hookme.MainActivity");
logActivity.checkXp0.implementation = function(){
console.log("Hook")
}
})
- 命令行载入脚本运行
frida -U com.hookme -l imei.js --no-pause --runtime=v8
firda api 补全
github.com/DefinitelyT… 下载 index.d.ts文件,保存在一个目录下,我是在 ~/workspace/frida/frida-gum.d.ts 下 我用 vscode 开发,新建一个 js 文件 在文件开头加入代码
///<reference path='~/workspace/frida/frida-gum.d.ts'/>
其它
- 手机需要root
- oppo r9m arm-64会失败,自动重启。但是
frida-server-12.8.20-android-arm
却可用(因为有可能对应的应用刚好是32位的)shell@R9:/ $busybox uname -a Linux localhost 3.10.72+ #1 SMP PREEMPT Mon Mar 14 03:03:58 CST 2016 aarch64 unknown
- 然后x86 32位 api24成功,使用
frida-server-12.8.20-android-x86
。generic_x86:/ # uname -a Linux localhost 3.10.0+ #261 SMP PREEMPT Fri May 19 12:50:09 PDT 2017 i686
- 逍遥7.1系统 ok (x86 32位),在5.1上hook
onResume()
会失败130|OPPO R11 Plus:/ # uname -m i686
- 注意内部类的表示方式
var abtest = Java.use("com.adhoc.config.AdhocConfig$Builder");
是美元符号
TODO
- Gadget(免root使用frida) www.jianshu.com/p/bab4f4714… 使用objection自动完成frida gadget注入到apk中
pip3 install -U objection
objection patchapk -s target_app.apk
示例“叽里呱啦儿童英语V9.6.0”
先执行node spawn_gating.js
打开应用后执行frida -U com.jiliguala.niuwa -l jiligula.js
-
开启StethoInterceptor,所有网络请求可见。开启logcat日志开关。打印自定义日志。