前言
相信不少小伙伴对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
-
配置完成后, 使用对应函数就会有相应代码提示及函数说明
-
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的方式附加到进程, 或者使用setTim