/* * 通用 Android SSL Pinning 绕过脚本(Frida) * 覆盖常见实现:系统 TrustManagerImpl、OkHttp3 CertificatePinner、 * SSLContext 自定义 TrustManager、Conscrypt。 * 用途:抓包萤石云 app (com.videogo) 的 HTTPS 私有接口。 */ setTimeout(function () { Java.perform(function () { console.log('[unpin] 开始注入'); // 1. 系统 TrustManagerImpl.verifyChain —— 直接放行 try { var TMI = Java.use('com.android.org.conscrypt.TrustManagerImpl'); TMI.verifyChain.implementation = function (untrustedChain, trustAnchorChain, host, clientAuth, ocspData, tlsSctData) { console.log('[unpin] TrustManagerImpl.verifyChain 放行 host=' + host); return untrustedChain; }; } catch (e) { console.log('[unpin] TrustManagerImpl 跳过: ' + e); } // 2. OkHttp3 CertificatePinner.check —— 直接返回 try { var CP = Java.use('okhttp3.CertificatePinner'); CP.check.overload('java.lang.String', 'java.util.List').implementation = function (a, b) { console.log('[unpin] okhttp3 CertificatePinner.check 放行 ' + a); return; }; } catch (e) { console.log('[unpin] okhttp3 CertificatePinner 跳过: ' + e); } // 3. 自定义 X509TrustManager —— 替换成全信任 try { var X509TM = Java.use('javax.net.ssl.X509TrustManager'); var SSLContext = Java.use('javax.net.ssl.SSLContext'); var TrustManager = Java.registerClass({ name: 'com.ez.FakeTM', implements: [X509TM], methods: { checkClientTrusted: function () {}, checkServerTrusted: function () {}, getAcceptedIssuers: function () { return []; } } }); var TMs = [TrustManager.$new()]; var initOverload = SSLContext.init.overload( '[Ljavax.net.ssl.KeyManager;', '[Ljavax.net.ssl.TrustManager;', 'java.security.SecureRandom'); initOverload.implementation = function (km, tm, sr) { console.log('[unpin] SSLContext.init 替换 TrustManager'); initOverload.call(this, km, TMs, sr); }; } catch (e) { console.log('[unpin] SSLContext 跳过: ' + e); } console.log('[unpin] 注入完成'); }); }, 0);