绕过 Android 应用证书固定(Certificate Pinning):MASTG 黑盒测试实用指南
文档教程网络安全【免费下载链接】mastgThe OWASP Mobile Application Security Testing Guide (MASTG) is a comprehensive manual for mobile app security testing and reverse engineering. It describes technical processes for verifying the OWASP Mobile Security Weakness Enumeration (MASWE) weaknesses, which are in alignment with the OWASP MASVS.项目地址https://gitcode.com/gh_mirrors/ow/mastg点击查看免费下载本指南聚焦 OWASP Mobile Application Security Testing GuideMASTG中关于绕过 Android 应用 SSL/Certificate Pinning 的完整方法论覆盖 Frida、Objection、Xposed 等动态绕过手段以及针对自定义 Pinning 实现的静态与动态手工绕过技术。读完本文你将掌握在模拟器或真机上快速解除证书固定、拦截应用流量的完整实战流程并能处理工具无法覆盖的自定义 Pinning 场景。理解证书固定Certificate Pinning及其绕过前提部分应用会实现 SSL Pinning证书固定应用只接受其内置的特定证书或公钥而拒绝任何其他证书包括安全测试工具如 Burp Suite、Charles的中间人MITM代理证书。这意味着即便你在设备上安装了代理的 CA 证书应用也不会接受它你便无法监控应用与服务器之间的 HTTPS 流量。从绕过角度看绝大多数应用可以在数秒内完成绕过前提是该应用使用了这些工具所覆盖的 API 函数。如果应用通过自定义框架或第三方库实现 SSL Pinning则需要手工定位并 patch 相关逻辑、使其失效这一过程可能相当耗时。本指南依次介绍基于现成框架的快速绕过Frida / Objection / Xposed静态绕过自定义 Pinning修改 APK 内嵌的证书、哈希与 Truststore动态绕过自定义 PinningFrida Hook 关键方法并改写参数。快速绕过Frida、Objection 与 Xposed对于黑盒测试可依据设备上可用的框架选择不同的绕过方式Frida使用 frida-multiple-unpinningMASTG-TOOL-0140脚本它是 Frida CodeShare 上覆盖范围最广的 TLS Pinning 绕过脚本之一。Objection使用android sslpinning disable命令。Xposed安装 TrustMeAlready 或 SSLUnpinningMASTG-TOOL-0025模块后者是一个基于 Xposed 的模块用于绕过 SSL 证书固定。使用 frida-multiple-unpinningMASTG-TOOL-0140 的一个核心优势是其动态绕过机制它检测SSLPeerUnverifiedException类的实例化并自动 patch 抛出该异常的方法从而覆盖多种 TLS Pinning 实现。直接通过 Frida 运行$ frida -U --codeshare akabe1/frida-multiple-unpinning -f YOUR_BINARY使用 Objection 一键绕过如果你有已 root 的设备且安装了 frida-server可通过运行以下命令绕过 SSL Pinning非 root 设备的使用方式参见 MASTG-TECH-0004android sslpinning disable输出示例关于该命令的更多信息可参考 Objection 的 Disabling SSL Pinning for Android 帮助文档并可通过阅读其 agent 源码中的pinning.ts文件理解其底层实现原理。关于 Objection 的底层机制Objection 是一个 runtime mobile exploration toolkit, powered by Frida。其 Android 专属能力见 MASTG-TOOL-0029包括将 Frida gadget 重打包进 APK、禁用常见 SSL Pinning 方法、访问应用存储、执行自定义 Frida 脚本、枚举 Activity/Service/BroadcastReceiver 等。Objection 可通过 pip 安装pip3 install objection在已 root 设备上Objection 可直接连接运行的 frida-server 而无需重打包若设备无法 root 或应用带有 RASP 反调试/反 root 检测则可先按重打包流程MASTG-TECH-0039注入 frida-gadget 再侧载部署。连接方式取决于使用场景# 连接已 patch 的 APK objection -f explore # 使用 frida-server 时先用 frida-ps 确认应用名 $ frida-ps -Ua | grep -i telegram 30268 Telegram org.telegram.messenger # 通过应用名或 PID 连接 $ objection -n Telegram start $ objection -n 30268 start # 通过包名 spawn 应用 $ objection -s -n org.telegram.messenger进入 REPL 后android sslpinning disable即会 hook 并禁用常见 SSL Pinning 方法OkHTTP、TrustManager、X509 校验等。补充说明需要留意的是frida-multiple-unpinning 脚本相比 Objection 的android sslpinning disable覆盖了更多绕过场景。当工具无法覆盖目标应用的自定义实现时需要转向下面的手工绕过方案。静态绕过自定义证书固定无论采用哪种实现应用中必然在某处定义端点与证书或证书哈希。反编译 APK 后可以针对三种典型形态分别检索与替换。检索证书哈希grep -ri sha256\|sha1 ./smali将识别出的哈希替换为你的代理 CA 的哈希。若哈希伴随域名出现还可以尝试把域名改成不存在的域名使原域名不再被固定——这一招对混淆过的 OkHTTP 实现往往很有效。检索证书文件find ./assets -type f \( -iname \*.cer -o -iname \*.crt \)将找到的证书文件替换为你的代理证书并确保格式正确。检索 Truststore 文件find ./ -type f \( -iname \*.jks -o -iname \*.bks \)将你的代理证书加入 Truststore同样注意格式匹配。注意应用中可能包含无扩展名的文件最常见的存放位置是assets和res目录这两个目录也应一并排查。实战示例向 BKS Truststore 注入代理证书假设应用使用 BKSBouncyCastleTruststore存放于res/raw/truststore.bks。要绕过 SSL Pinning需要用keytool随 Java SDK 提供把代理证书加入 Truststore执行命令前需要准备以下值参数说明passwordTruststore 的密码需在反编译代码中查找硬编码的密码providerpathBouncyCastle Provider jar 文件所在路径可从 Bouncy Castle 官网下载proxy.cer你的代理证书aliascert用于标识代理证书的唯一别名导入代理证书keytool -importcert -v -trustcacerts -file proxy.cer -alias aliascert -keystore res/raw/truststore.bks -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath providerpath/bcprov-jdk15on-164.jar -storetype BKS -storepass password列出 BKS Truststore 中的证书keytool -list -keystore res/raw/truststore.bks -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath providerpath/bcprov-jdk15on-164.jar -storetype BKS -storepass password修改完成后使用 apktool 重新打包 APK 并安装到设备上即可。原生库场景如果应用使用 native 库实现网络通信则需要进一步的逆向工程。例如可以尝试在 smali 代码中定位 SSL Pinning 逻辑、对其进行 patch 后重新组装 APK。这种场景通常需要结合 IDA/Ghidra 等工具进行更深层的分析已超出本指南的快速绕过范畴。动态绕过自定义证书固定相比静态修改动态绕过 Pinning 逻辑更加便捷无需处理应用的完整性校验RASP且试错迭代速度快得多。定位正确的 Hook 方法找到适合 hook 的方法是整个过程最困难的部分耗时取决于混淆程度。由于开发者通常复用既有库一个有效思路是搜索能标识所用库的字符串与 license 文件一旦确认库类型即可阅读其未混淆的源码寻找适合动态插桩Frida的方法。以混淆过的 OkHTTP3 库为例官方文档表明CertificatePinner.Builder类负责为特定域名添加 pin。若你能修改传给Builder.add方法的参数就可以把哈希换成属于你自己证书的哈希。定位正确方法有两种途径按上一节的思路搜索哈希与域名真正的 pinning 方法通常会与这些字符串邻近出现或被其调用在 SMALI 代码中搜索方法签名。对于Builder.add方法可以运行以下 grep 命令查找候选方法grep -ri java/lang/String;\[Ljava/lang/String;)L ./该命令会搜索所有「接收一个 String 与一个字符串数组、返回复杂对象」的方法。根据应用体积代码中可能有一处或多处匹配。用 Frida Hook 并改写参数逐个用 Frida hook 这些方法并打印参数。其中会有一个方法打印出域名与证书哈希确认后即可修改参数以绕过已实现的 Pinning 逻辑。典型流程如下// 示例思路hook CertificatePinner.Builder.add 并改写哈希参数 Java.perform(function () { var Builder Java.use(okhttp3.CertificatePinner$Builder); Builder.add.overload(java.lang.String, [Ljava.lang.String;) .implementation function (hostname, pins) { console.log(hostname: hostname); console.log(pins: JSON.stringify(pins)); // 在此替换为你的代理证书哈希或直接 return this 跳过 pin return this.add(hostname, [sha256/YOUR_PROXY_CERT_HASH]); }; });由于Builder.add的 SMALI 签名特征String 可变长 String 数组 返回复杂对象在混淆后仍然保留上述 grep 定位法在混淆场景下依然可行。总结与决策路径场景推荐手段应用使用标准 API / 常见库Objectionandroid sslpinning disable或 frida-multiple-unpinning设备已 root、有 frida-serverObjection 直连 frida-server秒级绕过非 root 设备重打包注入 frida-gadgetMASTG-TECH-0039后再用 Objection基于 Xposed 的测试环境TrustMeAlready / SSLUnpinning 模块自定义 Pinning证书/哈希/Truststore静态替换grep哈希 →find证书/Truststore →keytool注入 → apktool 重打包混淆库如 OkHTTP3动态 Hookgrep 方法签名 → Frida hook 打印/改写参数native 库实现网络通信需要更深入的逆向与手工 patch从源码结构看MASTG-TECH-0012本指南对应的完整绕过方法体系还与 MASTG-TECH-0004非 root 设备 Frida 使用、MASTG-TECH-0039APK 重打包等相邻技术章节相互衔接可作为 Android 流量拦截测试的完整知识链路。建议在实战中先从工具化方案入手仅在工具失效时再转入手工静态/动态绕过以最大化测试效率。赞分享文档教程网络安全【免费下载链接】mastgThe OWASP Mobile Application Security Testing Guide (MASTG) is a comprehensive manual for mobile app security testing and reverse engineering. It describes technical processes for verifying the OWASP Mobile Security Weakness Enumeration (MASWE) weaknesses, which are in alignment with the OWASP MASVS.项目地址https://gitcode.com/gh_mirrors/ow/mastg点击查看免费下载相关推荐Android 证书固定Certificate Pinning完全指南基于 OWASP MASTG 的实现、测试与绕过Android 证书固定Certificate Pinning完全指南基于 OWASP MASTG 的实现、测试与绕过 本文基于 OWASP Mobile文档教程网络安全终极免费彩色表情字体EmojiOne Color 完整使用指南终极免费彩色表情字体EmojiOne Color 完整使用指南 EmojiOne Color 是一款基于 OpenType SVG 格式的开源彩色表情字体完设计系统Spacedrive 云存储证书固定Certificate Pinning方案SEC-006 任务解读与实现指引Spacedrive 云存储证书固定Certificate Pinning方案SEC 006 任务解读与实现指引 本指南围绕 Spacedrive 仓库中桌面应用移动开发后端存储数据同步上一篇cs-408计算机考研408一站式复习资源新手10分钟上手指南下一篇Umi-OCR双层PDF功能终极方案3分钟让扫描件变身可编辑文档创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考