程序员怎么做“竞品分析”:Frida的使用
Frida能干什么?对于不能反编译、重打包的apk,就是Frida的用武之地!
Frida通过代码插桩可以解决很多问题。比如:
- 我不买会员,想看一下会员页长什么样。
- 这个app有调试开关,我能不能打开啊?Frida可以!
- 我想快速知道,app从启动到某个页面,中间都走了哪些
Activity
。Frida可以!
官网
环境配置
- 电脑安装
pip install frida-tools
- 电脑安装,绑定:二选一就行
1
2pip install frida # Python bindings
npm install frida # Node.js bindings - 下载server文件(x86模拟器对应
frida-server-12.8.20-android-x86
) - 安装server文件
1
2
3
4
5
6
7adb 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
1 | Java.perform(function(){ |
- 命令行载入脚本运行
frida -U com.hookme -l imei.js --no-pause --runtime=v8
firda api 补全
https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/frida-gum/index.d.ts 下载 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位的)1
2shell@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
。1
2generic_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()
会失败1
2130|OPPO R11 Plus:/
i686 - 注意内部类的表示方式
var abtest = Java.use("com.adhoc.config.AdhocConfig$Builder");
是美元符号 - 逍遥、雷电为什么可以跑armeabi架构的so
1
2
3adb shell getprop ro.product.cpu.abilist#查看手机支持的所有cpu架构(比如逍遥、雷电这类模拟器支持多个架构)
[ro.product.cpu.abilist]: [x86,armeabi-v7a,armeabi] #逍遥、雷电
[ro.product.cpu.abilist]: [x86] #android sdk 支持cpu加速的模拟器
TODO
- Gadget(免root使用frida)
https://www.jianshu.com/p/bab4f4714d98
使用objection自动完成frida gadget注入到apk中
1 | pip3 install -U objection |
示例“叽里呱啦儿童英语V9.6.0”
先执行node spawn_gating.js
打开应用后执行frida -U com.jiliguala.niuwa -l jiligula.js
开启StethoInterceptor,所有网络请求可见。开启logcat日志开关。打印自定义日志。