You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Frida获取以Context为参数的函数返回值?

Frida Hook 正确实现指南:针对getActiveMCCMNC(Context)函数

看起来你在Frida hook这个目标函数时踩了几个新手常见的坑,我来帮你一步步修正脚本,让它能正常运行并获取函数返回值。

先分析你现有脚本的问题

  • 目标函数getActiveMCCMNC需要接收一个Context参数,但你的implementation里完全没处理这个参数,调用原函数时会因为参数缺失报错
  • 你尝试访问this.val,但原函数里根本没有这个成员变量,这会直接抛出属性找不到的错误
  • 没有调用原函数也没返回合理值,会破坏原APP的逻辑,甚至导致崩溃

正确的Frida Hook脚本

下面是能正常获取返回值的脚本,我会在注释里解释每个关键点:

Java.perform(function () {
    console.log("已进入Java执行环境");
    
    // 替换成目标函数所在的正确类名,这里是util.PlayerDeviceIdentifier
    var TargetClass = Java.use("util.PlayerDeviceIdentifier");
    
    // Hook目标方法,注意要声明参数context(和原函数的参数一致)
    TargetClass.getActiveMCCMNC.implementation = function (context) {
        // 可选:打印传入的Context实例,方便调试
        console.log("getActiveMCCMNC被调用,传入的Context:", context);
        
        // 调用原函数并传入必要的context参数,获取原返回值
        var originalReturnValue = this.getActiveMCCMNC(context);
        
        // 打印原函数的返回结果
        console.log("原函数返回的MCCMNC值:", originalReturnValue);
        
        // 如果你需要修改返回值,可以在这里替换,比如返回自定义的MCCMNC
        // var modifiedValue = "46001";
        // console.log("修改后的返回值:", modifiedValue);
        // return modifiedValue;
        
        // 必须返回原结果(或者你修改后的值),否则原调用处会得到异常值
        return originalReturnValue;
    };
});

关键注意事项

  1. 参数必须匹配:原函数要求传入Context,所以hook的implementation里必须声明这个参数,调用原函数时也要传进去
  2. 类名要准确:确保util.PlayerDeviceIdentifier是目标函数所在的真实类名,如果APP有混淆,需要用jadx等反编译工具确认正确的类名
  3. 保持原逻辑完整性:如果不需要修改返回值,一定要返回原函数的结果,否则APP调用这个函数时会得到undefined,可能引发崩溃
  4. 正确附加进程:运行脚本时要确保Frida正确附加到目标APP,比如用命令:frida -U -f com.your.target.package.name -l your_script.js(替换成目标APP的包名)

如果运行时遇到类找不到的问题,大概率是类名写错了,仔细核对反编译后的代码即可解决。

内容的提问来源于stack exchange,提问作者randomguy123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 12:57:34