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

2,146 阅读2分钟

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

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

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

官网

环境配置

  1. 电脑安装pip install frida-tools
  2. 电脑安装,绑定:二选一就行
    pip install frida       # Python bindings
    npm install frida       # Node.js bindings
    
  3. 下载server文件(x86模拟器对应frida-server-12.8.20-android-x86)
  4. 安装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"
    
  5. 测试frida-ps -U#列出USB设备运行中的进程,模拟器也是usb设备
  6. 测试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'/>

其它

  1. 手机需要root
  2. 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
    
  3. 然后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
    
  4. 逍遥7.1系统 ok (x86 32位),在5.1上hookonResume()会失败
    130|OPPO R11 Plus:/ # uname -m
    i686
    
  5. 注意内部类的表示方式var abtest = Java.use("com.adhoc.config.AdhocConfig$Builder");是美元符号

TODO

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