PCAPdroid 中文文档 下载 App

绕过证书锁定 — Frida、reFlutter、Objection 几种工具链

什么是证书锁定

证书锁定(certificate pinning)是应用的主动安全措施:应用内置一份"可接受证书指纹"白名单,每次 TLS 握手时都主动比对服务器证书指纹是否在白名单内——不依赖系统证书存储。即使 PCAPdroid CA 成功注入到系统证书里,应用自己的 pinning 逻辑还是会拒绝。

现代 App(尤其是金融、社交、主流大厂 App)普遍做了 pinning,这是 TLS 解密路上最头疼的障碍。

工具链一览

工具适用场景需要 root
LSPosed + sslunpinning通用 App✅
Frida + objection动态 Hook,最灵活✅ 或非 root + Frida Gadget
reFlutterFlutter App 专用(替换 flutter 引擎)❌(APK 重签名)
apk-mitm通用 App(反编译降低 targetSdk)❌
android-unpinnerapk-mitm 备选❌

Frida + Objection

Frida 是一个动态插桩框架,可以在运行时 Hook 任意函数。Objection 是 Frida 在上层封装的命令行工具,专门有 Android SSL pinning bypass 的预置脚本。

基本流程:

  1. 设备上跑 Frida Server(需要 root,或用 Frida Gadget 注入到 APK)
  2. 电脑上装 objection
  3. objection 连接设备后执行 android sslpinning disable
  4. objection 会自动注入一系列 Frida 脚本,覆盖 OkHttp、WebView、Apache HttpClient 等主流库的 SSL 验证逻辑
  5. 然后用 PCAPdroid 解密同一应用——pinning 已被跳过

优点是实时生效、不改 APK、App 签名保持不变(SSO 不受影响)。缺点是需要 root 或 Gadget 注入,且脚本需要随 Frida 和 Android 版本更新。

reFlutter(Flutter 应用专用)

Flutter App(用 Dart 写的 Android/iOS 跨平台 App,Flutter 3.10+ 内置证书 pinning)的 pinning 逻辑在 Flutter 引擎内部,普通 Frida Hook 很难命中。reFlutter 的做法是:

  1. 解包 APK
  2. 找到 libapp.so(Dart VM 产物)
  3. 替换为打了 patch 的 Flutter 引擎(禁用 pinning)
  4. 重编译、重新签名、安装

这是目前绕过 Flutter pinning 最有效的方案,前提是 App 不是用 AOT 编译为 arm64 以外的架构。

apk-mitm

apk-mitm 完全自动化以下步骤:

  1. apktool 反编译 APK
  2. 降低 targetSdkVersion 到 23(Android 6.0),此时应用无条件信任用户 CA
  3. 自动处理网络安全配置、证书锁定代码
  4. 重新编译并签名

优点是一键命令行工具、不依赖 root。缺点是 App 签名变了——SSO 登录失效,解决方法见系统证书信任修复页的"apk-mitm / apktool 重签名"章节末尾的 SSO 数据恢复流程。

android-unpinner

mitmproxy 官方推荐的替代工具,相比 apk-mitm 在某些场景下效果更好,特别是在处理 App 自带 pinning 逻辑(非 OkHttp/WebView 标准库)时。

逆向工程(最后手段)

如果以上工具都不管用(App 用了完全自定义的 pinning 逻辑),就需要真·逆向:

  1. jadx:反编译 APK 到 Java 源码,定位 pinning 代码
  2. apktool:反编译后手动删改 pinning 相关逻辑
  3. VS Code APKLab 扩展:把 APK 解包、编辑、重打包整合到 IDE 里
  4. 参考 OWASP MASTG 的 Tampering and Reverse Engineering 章节

这是最耗时但最强大的方案,适合需要深度逆向的场景。