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

使用Objection注入Frida脚本绕过Android应用OkHttp3 SSL固定时遇TypeError问题的解决方法

修复OkHttp3 SSL固定绕过的Frida脚本错误

看起来你的Frida脚本犯了几个常见的API使用错误,我来帮你修正并解释问题所在:

你的脚本错误原因

报错TypeError: cannot read property 'overload' of undefined的核心问题有两个:

  1. 你已经通过Java.use("okhttp3.CertificatePinner$Builder")获取到了Builder类本身,却错误地尝试访问Pinner.Builder属性,导致这个属性返回undefined
  2. 没有指定要hook的目标方法名add——你找到的smali代码里明确显示是add方法,而不是直接操作Builder类本身

正确的Frida脚本写法

修改你的hook2.js为以下内容:

Java.perform(function(){
    // 获取OkHttp3 CertificatePinner的Builder类
    var CertPinnerBuilder = Java.use("okhttp3.CertificatePinner$Builder");
    
    // Hook你找到的多参数add方法,签名完全匹配smali中的定义
    CertPinnerBuilder.add.overload('java.lang.String', '[Ljava/lang/String;').implementation = function(pattern, pins) {
        console.log(`[+] 绕过SSL固定:目标域名规则 ${pattern}`);
        // 直接返回Builder实例,跳过原方法的固定逻辑
        return this;
    };

    // 额外兼容:如果应用使用了单证书的add方法,也可以一起hook(可选)
    try {
        CertPinnerBuilder.add.overload('java.lang.String', 'java.security.cert.Certificate').implementation = function(pattern, cert) {
            console.log(`[+] 绕过SSL固定:目标域名规则(证书模式)${pattern}`);
            return this;
        };
    } catch(e) {
        console.log("[!] 未找到单证书add方法,跳过该hook");
    }
});

正确的脚本注入方式

确保你的设备已连接、应用处于运行状态,执行以下命令:

objection explore --startup-script hook2.js

如果应用尚未启动,可以指定包名直接启动并注入:

objection -d -n com.your.app.package explore --startup-script hook2.js

额外优化建议

如果上述脚本仍未生效,可能是应用使用了代码混淆或自定义SSL校验逻辑,可以尝试更通用的OkHttp绕过方案:

Java.perform(function(){
    var CertificatePinner = Java.use("okhttp3.CertificatePinner");
    CertificatePinner.check.implementation = function(host, chain) {
        console.log(`[+] 跳过SSL固定校验:域名 ${host}`);
        // 直接返回,不触发原方法的校验异常
        return;
    };
});

同时建议确认Objection和Frida的版本兼容,版本不匹配也可能导致奇怪的执行错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 09:14:07