本帖最后由 yinsel 于 2024-3-8 09:08 编辑
frida Hook so文件初探
为什么脚本中需要加setTimeout ,但我已经使用Process.enumerateModules 来防止目标so未加载的情况。刚刚入门想知道为啥嘞。我用的是光速虚拟机。
使用 Android Studio 创建C++项目
按照模板创建。我尝试修改了方法名为test ,lib命名为libapp.so
安装App至虚拟机
签名并推送到虚拟机并安装:
提取So文件分析
记录方法名。
Hook方法返回值
Hook脚本:
function hook(funcAddr) {
Interceptor.attach(funcAddr, {
onEnter: function (args) {
console.log("Hooked!");
},
onLeave: function (retval) {
// 转为jstring
var jstring = Java.vm.getEnv().getStringUtfChars(retval, null);
// 转为C字符串
var result = Memory.readCString(jstring);
// 修改返回值
var newRetval = Java.vm.getEnv().newStringUtf("frida Hooked!");
retval.replace(newRetval);
}
});
}
function start() {
Process.enumerateModules({
onMatch: function (module) {
console.log("Module found: " + module.name);
var moduleName = module.name;
if (moduleName.indexOf("libapp.so") != -1){
var module = Module.findBaseAddress("libapp.so");
console.log("Module found: " + module);
var funcAddr = Module.findExportByName("libapp.so", "Java_com_example_myapplication_MainActivity_test");
console.log("Function found: " + funcAddr);
hook(funcAddr);
}
},
onComplete: function () {
}
});
}
setTimeout(start, 400);
Hook返回值成功:
|