当前位置:首页>安卓APP>安卓逆向 -- 记一次SSL Pinning绕过

安卓逆向 -- 记一次SSL Pinning绕过

  • 2026-11-12 04:01:15
安卓逆向 -- 记一次SSL Pinning绕过
目标APP:某海外金融APP。工具链:Google pixel4真机、Fiddler、JADX、Fr1.Frida抓包如下
得到2个信息:1.能正常转发目标APP的流量,说明APP没用禁用系统代理。2.目标APP流量没用被解密,说明证书不被信任。用JADX反编译目标APK,搜索implements X509TrustManager:
一共实现了6种自定义X509TrustManager,暂时不知道启用的哪个,进入ec0.SSLClinentFactory类,该类会配置准备启用的X509TrustManager。
可以看到并没有启用任何一个X509TrustManger,而是使用Certificate Pinning来做证书校验,对关键域名启用了证书锁定。编写Frida脚本如下:
function main() {    Java.perform(function () {        const SSLCLientFactory = Java.use("ec0.a");        const CertificatePinnerBuilder = Java.use("okhttp3.CertificatePinner$Builder");        const JavaCollection = Java.use("java.util.Collection");        SSLCLientFactory.b.implementation = function () {            console.log("[SSLCLientFactory] Hook b() 方法,修改证书固定规则");            // 获取原始 Builder            let originalBuilder = this.b();            // 获取原 CertificatePinner.Builder            const field = originalBuilder.getClass().getDeclaredField("v");            field.setAccessible(true);            let certPinnerBuilder = field.get(originalBuilder);            // 3. 获取 Builder 内部存储规则的列表 a            const pinListField = certPinnerBuilder.getClass().getDeclaredField("a");            pinListField.setAccessible(true);            let pinList = pinListField.get(certPinnerBuilder);            // 4. 清空列表            const javaList = Java.cast(pinList, JavaCollection);            javaList.clear();            console.log("[+] 证书固定规则已清空(a 列表为空)");            return originalBuilder;    };});}setImmediate(main);

运行脚本:

成功捕获到解密之后的登录数据包。

· 今 日 推 荐 ·

本文内容来自网络,如有侵权请联系删除

最新文章

随机文章