ahmedMhesham12/flutter-tls-frida-generator
GitHub: ahmedMhesham12/flutter-tls-frida-generator
该工具通过解析 Flutter 引擎二进制文件,自动生成用于已授权安全测试的 Frida TLS 证书验证拦截脚本,解决 Flutter 应用流量难以被常规手段分析的问题。
Stars: 1 | Forks: 1
# Flutter TLS Frida 生成器
为已授权的 Flutter 应用安全测试生成 Frida agent。
该 Python 工具接受 Android `libflutter.so`、包含 Flutter 引擎的 APK/ZIP、iOS `Flutter` 二进制文件,或包含引擎二进制文件的目录。在符号可用时,它会生成一个带有针对特定文件的 hook 的 JavaScript agent,并提供运行时 native 和 Android Java 的后备方案。
## 适用范围
包含内容:
- 无需依赖的 Python ELF 解析,适用于 Android 引擎。
- 精确发现 `ssl_verify_peer_cert`、`ssl_crypto_x509_session_verify_cert` 和 `X509_verify_cert` 符号。
- 受 32 字节指纹保护的文件特定 offset。
- 带有归档和二进制文件大小限制的 APK/ZIP 多 ABI 发现。
- 在已加载的 Flutter 模块中进行运行时符号发现。
- OpenSSL/BoringSSL、mbedTLS 和 GnuTLS 导出后备方案。
- Android Conscrypt、OkHttp、WebView、Cronet 和 TrustKit 后备方案。
- 针对 IPv4 和 IPv6 目标 socket 的可选 IPv4 代理重定向。
- 可选的网络诊断和 QUIC 阻断。
- 针对被剥离引擎的可选用户自有签名数据库。
不包含内容:
- 目标二进制文件、生成的 agent、分析报告、offset、hash 或客户端数据。
- 捆绑的第三方字节签名语料库。
- Anti-Frida 绕过。
- 对未来所有或私下修改的 Flutter 引擎提供支持的承诺。
## 环境要求
- Python 3.9 或更高版本。
- 已授权的测试设备和工作站上安装了 Frida。
- 仅在使用 `node --check` 验证生成的 JavaScript 时需要 Node.js。
无需任何第三方 Python 包。
## 快速开始
```
python3 flutter_tls_universal_generator.py libflutter.so \
-o flutter_tls_bypass.generated.js
frida -U -f com.example.app -l flutter_tls_bypass.generated.js
```
APK 输入:
```
python3 flutter_tls_universal_generator.py application.apk \
-o flutter_tls_bypass.generated.js
```
通过仅用于文档说明的示例地址进行代理路由:
```
python3 flutter_tls_universal_generator.py application.apk \
-o flutter_tls_bypass.generated.js \
--proxy 203.0.113.10:8080 \
--ports 80,443,8443 \
--block-quic
```
对于通过 USB 连接的 Android:
```
adb reverse tcp:8080 tcp:8080
python3 flutter_tls_universal_generator.py libflutter.so \
-o flutter_tls_bypass.generated.js \
--proxy 127.0.0.1:8080 \
--ports 443,8443
```
当目标端口未知时,请使用 `--redirect-all-tcp`。这可能会中断不相关的连接,因此请仅在隔离的测试环境中使用。
## 选项
```
--proxy IP:PORT Redirect selected TCP connections to an IPv4 listener.
--ports LIST Destination ports to redirect. Default: 80,443,8443.
--redirect-all-tcp Redirect every TCP destination except the proxy itself.
--block-quic Fail common UDP/QUIC attempts to encourage TCP fallback.
--aggressive-java Replace Java SSLContext trust managers globally.
--no-java Disable Android Java fallbacks.
--no-native-fallbacks Disable generic native TLS hooks.
--quiet-network Disable DNS and connection logging.
--signature-db FILE Load a user-owned signature database.
--report FILE Write sensitive target analysis metadata to JSON.
--verbose-profile Print sensitive target metadata and hook details.
--self-test Run lightweight built-in parser checks before generation.
```
运行 `python3 flutter_tls_universal_generator.py --help` 获取完整的 CLI 信息。
## 签名数据库
本项目不捆绑任何字节签名。这避免了重新分发未经授权的语料库,并明确了所有权。
请提供您创建或有权使用的签名:
```
{
"android": {
"arm64": [
{
"id": "my-owned-arm64-pattern",
"role": "ssl_verify_peer_cert",
"retval": 0,
"pattern": "AA BB ?? C? DD"
}
]
}
}
```
支持的平台:`android`、`ios`、`windows`、`linux`。
支持的架构:`arm64`、`arm`、`x64`、`x86`。
支持的角色及所需返回值:
| 角色 | 返回值 |
| --- | ---: |
| `ssl_verify_peer_cert` | `0` |
| `ssl_crypto_x509_session_verify_cert_chain` | `1` |
| `X509_verify_cert` | `1` |
使用该数据库:
```
python3 flutter_tls_universal_generator.py libflutter.so \
--signature-db signatures.json \
-o flutter_tls_bypass.generated.js
```
加载器会拒绝未知的平台、架构、角色、返回语义、格式错误的 pattern、重复的 ID 以及无效的 Thumb 元数据。
## 报告与隐私
报告采用 opt-in(主动选择启用)机制,因为它们包含目标元数据:
```
python3 flutter_tls_universal_generator.py libflutter.so \
-o flutter_tls_bypass.generated.js \
--report private-analysis.json
```
报告字段可能包括源路径、SHA-256 hash、build ID、offset 和函数指纹。请将报告和生成的 agent 视为评估工作产物。请勿将其提交至公开仓库。
默认的控制台输出是经过脱敏处理的摘要。`--verbose-profile` 会打印源路径、hash、build ID、offset、符号以及详细的警告信息;请仅在终端日志保密时使用。
生成的 JavaScript 同样属于敏感信息。特定于文件的 agent 包含目标派生的 offset 和指纹。当使用 `--signature-db` 时,所提供的完整签名数据库将被嵌入到生成的 agent 中。共享该 JavaScript 可能会泄露客户端二进制文件特征,或者在签名许可范围之外对其进行重新分发。
仓库的 `.gitignore` 默认会阻止常见的二进制文件、生成的 agent 和报告被提交。
## 解析原理
1. 解析 ELF 符号和可执行段。
2. 为精确匹配构建特定于目标的 offset 和指纹。
3. 当配置了签名数据库时,扫描提供的签名数据库。
4. 在运行时,枚举 Flutter 符号。
5. 应用通用的 native TLS 后备方案。
6. 启用时,应用 Android Java 后备方案。
7. 安装可选的网络路由和诊断。
生成的脚本在替换函数之前会验证目标特定的指纹。如果不匹配,则会记录日志并跳过。
## 局限性
如果引擎已被剥离且未提供匹配的签名,则可能无法解析。额外的 pinning 可能存在于 `libapp.so`、native SDK、Cronet、自定义 Dart callback、其他进程或保护产品中。
代理重定向需要 IPv4 监听器。IPv6 目标 socket 使用 IPv4 映射地址进行重定向。平台 socket 行为和应用网络栈仍然可能阻止路由。
`--block-quic` 无法保证一定回退到 TCP。某些应用程序在 QUIC 不可用时会直接失败中断。
## 开发
```
./setup.sh
python3 -m unittest discover -s tests -v
python3 -m compileall -q flutter_tls_universal_generator.py tests
```
生成的 JavaScript 检查:
```
node --check flutter_tls_bypass.generated.js
```
请参阅 [CONTRIBUTING.md](CONTRIBUTING.md) 和 [SECURITY.md](SECURITY.md)。
## 授权
仅在您拥有或获得明确授权进行测试的应用程序、设备和环境中使用此项目。您有责任遵守适用的法律、合同和评估范围。
## 许可证
MIT。详见 [LICENSE](LICENSE)。
标签:Android, Docker支持, DSL, Flutter, Frida, iOS, 云资产清单, 数据可视化, 目录枚举, 移动安全, 逆向工具, 逆向工程