使用Objection注入Frida脚本绕过Android应用OkHttp3 SSL固定时遇TypeError问题的解决方法
修复OkHttp3 SSL固定绕过的Frida脚本错误
看起来你的Frida脚本犯了几个常见的API使用错误,我来帮你修正并解释问题所在:
你的脚本错误原因
报错TypeError: cannot read property 'overload' of undefined的核心问题有两个:
- 你已经通过
Java.use("okhttp3.CertificatePinner$Builder")获取到了Builder类本身,却错误地尝试访问Pinner.Builder属性,导致这个属性返回undefined - 没有指定要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
相关产品推荐
相关产品推荐

