自动SSL证书绑定绕过,适用于任何Flutter和Shorebird版本 — PyGhidra静态分析自动发现BoringSSL,并生成可直接运行的Frida和Renef脚本
使用 PyGhidra 对 libflutter.so 进行逆向工程,定位 SSL 证书验证函数,然后生成即开即用的绕过脚本,适用于 Frida 和 Renef。
libflutter.so,并扫描所有已定义的字符串,寻找 ssl_clientssl_crypto_x509_session_verify_cert_chainflutter_ssl_pinning.js),在运行时将返回值篡改为 ptr(1)(SSL_VERIFY_OK)flutter_ssl_pinning.lua),使用 Memory.patch 将函数入口覆盖为 MOV X0, #1 ; RET(ARM64)brew install ghidrapip install pyghidrapip install frida-tools 或 Renef — renef.io在环境变量中设置
GHIDRA_INSTALL_DIR,或者通过--ghidra-install-dir参数指定。
# 分析 libflutter.so 并生成两个脚本
python3 flutter_ssl_pinning.py libflutter.so
# 使用 Frida 运行
frida -U -f com.example.app -l flutter_ssl_pinning.js
# 使用 Renef 运行
renef -s com.example.app -l flutter_ssl_pinning.lua
| 参数 | 默认值 | 描述 |
|---|---|---|
binary | (必填) | libflutter.so 的路径 |
output | flutter_ssl_pinning | 输出文件的基础名称(生成 <名称>.js 和 <名称>.lua) |
--module | libflutter.so | 目标进程中的模块名称 |
--ghidra-install-dir | 自动 | Ghidra 安装目录 |
| 文件 | 工具 | 机制 |
|---|---|---|
flutter_ssl_pinning.js | Frida | Interceptor.attach + retval.replace(ptr(1)) |
flutter_ssl_pinning.lua | Renef | Memory.patch(MOV X0, #1 ; RET) |
请参阅 example/ 目录,查看生成的示例输出。
| 目标 | 状态 |
|---|---|
Google Flutter 的 libflutter.so (arm64-v8a) | ✅ 可用 |
| Shorebird 修补的 Flutter 构建 | ✅ 可用 |
| Ghidra 12.x + pyghidra | ✅ 可用 |
| Frida 17.x 和 16.x | ✅ 可用 |
| Renef(最新版) | ✅ 可用 |
Google Flutter 和 Shorebird 使用相同的
libflutter.soSSL 引擎。 对于相同的 Flutter 引擎版本,自动发现的 RVA 在不同构建类型中是一致的。
除了绕过证书绑定以进行基于代理的中间人攻击外,您还可以使用自包含的 flutter_http_monitor.py 直接在 Frida 中捕获解密的 HTTP 流量。它会自动定位 libflutter.so 中的 BoringSSL SSL_write/SSL_read(适用于任何 Flutter 版本,arm64),并生成一个 Frida 脚本,用于打印明文的请求和响应——包括重组、去除分块、gunzip 解压以及 JSON 美化打印。
pip install capstone pyelftools
# 扫描二进制文件并生成监控脚本(也可以传递 .apk)
python3 flutter_http_monitor.py path/to/libflutter.so -o monitor.js
# 针对应用运行
frida -U -f com.target.app -l monitor.js
可选:在 Frida REPL 中实时调用 addScope('api.example.com') 以仅监控特定主机(类似 Burp 的 scope)。单文件,无需额外分发。
本工具仅用于授权的安全研究和渗透测试。 请勿将其用于您不拥有或未获得明确书面许可的应用。