0%

用Frida hook Android app

安装

  • 安装 pip

    sudo easy_install pip
  • 安装 frida

    pip install frida-tools

    安装的时候出现了 “ERROR: Cannot uninstall ‘six’. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.”

    自己手动安装一下 six ,再重新执行命令即可:

    sudo pip install six --upgrade --ignore-installed six

    安装完成之后执行 frida --version 出现版本号即为安装成功:

    ➜ frida --version
    12.7.12
  • 下载 frida-server

    https://github.com/frida/frida/releases 页面下载最新的 frida-server-xxx-android-xx.xz

    解压之后重命名为 “frida-server”,重命名是为了后面使用方便

  • frida-server push 到手机

    adb root #手机需要 root
    adb push frida-server /data/local/tmp/
    adb shell "chmod 755 /data/local/tmp/frida-server"
    adb shell "/data/local/tmp/frida-server &"

    此时不要关闭命令行窗口,新开一个执行:

    frida-ps -U

    列出手机上所有进程即为安装成功:

    ➜  frida-ps -U
    PID Name
    ----- ---------------------------------------------------
    2746 .dataservices
    1136 ATFWD-daemon
    750 android.hardware.audio@2.0-service
    1226 android.hardware.biometrics.fingerprint@2.1-service
    751 android.hardware.bluetooth@1.0-service-qti
    752 android.hardware.camera.provider@2.4-service
    ...

使用

新建一个 “hook.js” 文件,内容如下:

Java.perform(function () {
var Activity = Java.use("android.app.Activity");
Activity.onResume.implementation = function () {
console.log("onResume() got called!");
this.onResume();
};
});

下面分两种情况 (以斗鱼App为例,air.tv.douyu.android 为包名):

  • 如果需要在应用启动期间就 hook ,关闭应用,输入命令:

    frida -U -l hook.js -f air.tv.douyu.android

    此时应用会处于等待状态,需要按照提示输入 %resume , 应用会继续启动。

    这种情况下主进程其实是被 fork 出来的,但是不影响运行

  • 如果不需要,直接打开App之后 attach 进程即可:

    frida -U -l hook.js air.tv.douyu.android –no-pause

到这里,每个Activity 执行 onResume 的时候终端都会打印 “onResume() got called!”

下面就可以编辑 hook.js 编写自己的hook逻辑了。