吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 698|回复: 5
收起左侧

[其他求助] frida Hook so的问题

[复制链接]
yinsel 发表于 2024-3-8 09:00
25吾爱币
本帖最后由 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返回值成功:

最佳答案

查看完整内容

setImmediate(func[, ...parameters]): schedules func to be called on Frida’s JavaScript thread as soon as possible, optionally passing it one or more parameters. Returns an id that can be passed to clearImmediate to cancel it.

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

魔力宝贝小黑屋 发表于 2024-3-8 09:00
yinsel 发表于 2024-3-8 12:23
那除了settimeout还有别的方法吗

setImmediate(func[, ...parameters]): schedules func to be called on Frida’s JavaScript thread as soon as possible, optionally passing it one or more parameters. Returns an id that can be passed to clearImmediate to cancel it.
kkwnb 发表于 2024-3-8 09:41
ai回答,参考下
在Frida中,使用Process.enumerateModules可以获取已加载的模块信息,但有时候目标so可能尚未加载,这时候直接调用hook函数可能会失败。通过使用setTimeout函数,可以延迟一段时间再执行start函数,给目标so加载的时间,确保hook函数能够成功执行。可以根据实际情况调整延迟的时间,确保目标so已加载完成。在使用光速虚拟机时,由于其高速度的特性,可能不需要设置延迟时间,直接调用hook函数即可,但在一些情况下,仍然可能需要等待一段时间,以确保模块的加载完成。
魔力宝贝小黑屋 发表于 2024-3-8 09:47
enumerate 是遍历,得等应用启动完,加载好 so 和 class
 楼主| yinsel 发表于 2024-3-8 12:23
魔力宝贝小黑屋 发表于 2024-3-8 09:47
enumerate 是遍历,得等应用启动完,加载好 so 和 class

那除了settimeout还有别的方法吗
 楼主| yinsel 发表于 2024-3-9 01:24
魔力宝贝小黑屋 发表于 2024-3-8 13:38
setImmediate(func[, ...parameters]): schedules func to be called on Frida’s JavaScript thread as  ...

感谢大佬回复
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-13 18:43

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表