Frida笔记 - Android 篇 (一)

前言

相信不少小伙伴对Xposed、Cydia Substrate、Frida等hook工具都有所了解, 并且用在了自己的工作中, 本文主要分享Frida的环境配置以及基本使用, 以及相关功能在日常开发调试带来的帮助

配置Frida的环境

Frida的环境安装可以参考官方文档, 或者参考网上分享的实践, 使用较为稳定的特定版本

# 通过pip3安装Frida的CLI工具
pip3 install frida-tools
# 安装的frida版本
frida --version
# 本机目前使用的15.0.8的frida版本
# 在https://github.com/frida/frida/releases下载对应的server版本frida-server-15.0.8-android-arm64.xz
# unxz 解压缩
unxz frida-server-15.0.8-android-arm64.xz
adb root
adb push frida-server-15.0.8-android-arm64 /data/locl/tmp/
adb shell
chmod 755 /data/local/tmp/frida-server-15.0.8-android-arm64
/data/local/tmp/frida-server-15.0.8-android-arm64 &
# 打印已安装程序及包名
frida-ps -Uai

基本使用

  • Frida的开发环境, 可以参考作者在github上的exmaple

# 下载完成后通过vscode打开
git clone git://github.com/oleavr/frida-agent-example.git
npm install
  • 配置完成后, 使用对应函数就会有相应代码提示及函数说明

Frida笔记 - Android 篇 (一)_第1张图片

  • JavaScript API可以参考官方文档说明, 了解基本使用

Hook类的构造函数

// frida -U --no-pause -f com.gio.test.three -l agent/constructor.js

function main() {
  Java.perform(function () {
    Java.use(
      "com.growingio.android.sdk.autotrack.AutotrackConfiguration"
    ).$init.overload("java.lang.String", "java.lang.String").implementation =
      function (projectId, urlScheme) {
        // 调用原函数
        var result = this.$init(projectId, urlScheme);
        // 打印参数
        console.log("projectId, urlScheme: ", projectId, urlScheme);
        return result;
      };
  });
}

setImmediate(main);

Hook类的普通函数

// frida -U --no-pause -f com.gio.test.three -l agent/function.js

function main() {
  Java.perform(function () {
    Java.use(
      "com.growingio.android.sdk.CoreConfiguration"
    ).setDebugEnabled.implementation = function (enabled) {
      console.log("enabled: ", enabled);
      // 直接返回原函数执行结果
      return this.setDebugEnabled(enabled);
    };
  });
}

setImmediate(main);

修改类/实例参数

// 以attach的方式附加到进程, 或者使用

你可能感兴趣的:(GrowingIO技术专栏,android,Frida)