程序员怎么做“竞品分析”:Frida的使用

Frida能干什么?对于不能反编译、重打包的apk,就是Frida的用武之地!

Frida通过代码插桩可以解决很多问题。比如:

  1. 我不买会员,想看一下会员页长什么样。
  2. 这个app有调试开关,我能不能打开啊?Frida可以!
  3. 我想快速知道,app从启动到某个页面,中间都走了哪些Activity。Frida可以!

官网

环境配置

  1. 电脑安装pip install frida-tools
  2. 电脑安装,绑定:二选一就行
    1
    2
    pip install frida       # Python bindings
    npm install frida # Node.js bindings
  3. 下载server文件(x86模拟器对应frida-server-12.8.20-android-x86)
  4. 安装server文件
    1
    2
    3
    4
    5
    6
    7
    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"
  5. 测试frida-ps -U#列出USB设备运行中的进程,模拟器也是usb设备
  6. 测试frida-trace -U -i open com.android.settings,然后打开”设置”,随便点一下,命令行会有显示

hook

进行Hook com.hookme.MainActivity#checkXp0函数

  • 脚本imei.js
1
2
3
4
5
6
7
8
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 补全

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'/>

其它

  1. 手机需要root
  2. oppo r9m arm-64会失败,自动重启。但是frida-server-12.8.20-android-arm却可用(因为有可能对应的应用刚好是32位的)
    1
    2
    shell@R9:/ $busybox uname -a
    Linux localhost 3.10.72+ #1 SMP PREEMPT Mon Mar 14 03:03:58 CST 2016 aarch64 unknown
  3. 然后x86 32位 api24成功,使用frida-server-12.8.20-android-x86
    1
    2
    generic_x86:/ # uname -a
    Linux localhost 3.10.0+ #261 SMP PREEMPT Fri May 19 12:50:09 PDT 2017 i686
  4. 逍遥7.1系统 ok (x86 32位),在5.1上hookonResume()会失败
    1
    2
    130|OPPO R11 Plus:/ # uname -m
    i686
  5. 注意内部类的表示方式var abtest = Java.use("com.adhoc.config.AdhocConfig$Builder");是美元符号
  6. 逍遥、雷电为什么可以跑armeabi架构的so
    1
    2
    3
    adb shell getprop ro.product.cpu.abilist#查看手机支持的所有cpu架构(比如逍遥、雷电这类模拟器支持多个架构)
    [ro.product.cpu.abilist]: [x86,armeabi-v7a,armeabi] #逍遥、雷电
    [ro.product.cpu.abilist]: [x86] #android sdk 支持cpu加速的模拟器

TODO

1
2
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日志开关。打印自定义日志。