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, 云资产清单, 数据可视化, 目录枚举, 移动安全, 逆向工具, 逆向工程