文章总结: 本文介绍了一款名为universal-flutter-ssl-pinning的自动化工具,该工具集成PyGhidra与Frida,能自动逆向分析Flutter应用中的libflutter.so文件。通过定位SSL证书验证函数并生成Frida脚本,实现对SSLPinning的一键绕过,支持标准Flutter及Shorebird构建。文中详述了环境配置、文件提取、脚本生成及注入运行的全流程,为移动安全测试提供了高效且可操作的解决方案,并强调了合法合规使用的注意事项。 综合评分: 87 文章分类: 逆向分析,移动安全,安全工具,渗透测试
自动化逆向libflutter.so并生成Frida绕过脚本
柠檬赏金猎人
2026年3月9日 18:46 广东
概述
universal-flutter-ssl-pinning 是一个集成了PyGhidra和Frida的自动化工具包。它旨在简化对Flutter应用程序(包括标准Google Flutter构建和Shorebird修补的构建)中SSL证书锁定机制的逆向工程与绕过过程。该工具能够自动分析libflutter.so库文件,定位关键的SSL证书验证函数,并生成一个可直接使用的Frida绕过脚本,整个过程无需手动操作Ghidra图形界面,极大地提升了安全研究和渗透测试的效率。
技术/功能
该工具的核心功能和工作流程如下:
- 自动化逆向分析:利用PyGhidra对目标
libflutter.so文件进行无头(headless)分析。 - 智能函数定位:通过扫描特定字符串(如“ssl_client”)及其交叉引用,定位到包含SSL验证逻辑的函数,并通过反编译筛选出参数数量符合预期的候选函数(通常是3个参数,符合
ssl_crypto_x509_session_verify_cert_chain的函数签名)。 - 一键生成脚本:基于分析结果,自动生成一个Frida脚本,其中已嵌入了目标函数在内存中的相对虚拟地址(RVA)。
- 运行时绕过:生成的Frida脚本会挂钩(hook)目标SSL验证函数,并将其返回值强制修改为
ptr(1)(即SSL_VERIFY_OK),从而在运行时绕过证书验证。 - 广泛兼容性:经过测试,可同时用于标准的Google Flutter应用和Shorebird修补的Flutter构建,因为它们共享相同的
libflutter.so和BoringSSL引擎。
使用示例
以下是如何使用该工具的详细步骤:
步骤1:环境准备与依赖安装 确保已安装必要的依赖项:
# 安装 Ghidra (macOS示例)
brew install ghidra
# 安装 PyGhidra
pip install pyghidra
# 安装 Frida 工具
pip install frida-tools
注意:需要设置
GHIDRA_INSTALL_DIR环境变量指向你的Ghidra安装目录,或者在运行脚本时通过--ghidra-install-dir参数指定。
步骤2:提取并分析libflutter.so
从目标Flutter应用的APK文件中提取libflutter.so(通常位于lib/arm64-v8a/或类似架构目录下)。
步骤3:生成Frida绕过脚本
运行主脚本对libflutter.so进行分析并生成Frida脚本。
# 基本用法,默认输出文件为 flutter_ssl_pinning.js
python3 flutter_ssl_pinning.py /path/to/libflutter.so
# 指定自定义输出文件路径
python3 flutter_ssl_pinning.py /path/to/libflutter.so my_bypass.js
运行成功后,控制台会输出类似以下信息,并生成对应的.js文件:
[*] Analyzing libflutter.so with PyGhidra ...
[*] Running Ghidra analysis, please wait...
[+] Recon done: 1 string hit(s), 1 3-param candidate(s)
[+] Cleaned up Ghidra project dir: .ghidra_projects
[*] Using 1 candidate(s) (3-param candidates):
FUN_00c106d0 RVA=0xb106d0 params=3 void FUN_00c106d0(long param_1,long *param_2,undefined1 *param_3);
[+] Generated : flutter_ssl_pinning.js
[+] Candidates: 1 embedded
步骤4:使用Frida注入并绕过 将生成的脚本推送到设备,并使用Frida附加到目标应用进程。
# 附加到正在运行的应用
frida -U -f com.example.app -l flutter_ssl_pinning.js --no-pause
# 或者启动应用并附加
frida -U -f com.example.app -l flutter_ssl_pinning.js
注入成功后,应用的SSL证书验证将被绕过。
注意事项
- 合法用途:此工具仅限用于授权的安全研究、渗透测试以及对您拥有所有权或已获得明确书面测试许可的应用程序。严禁用于非法目的。
- 环境配置:确保
pyghidra和frida的Python环境配置正确,并且Ghidra安装路径可被脚本访问,这是工具运行的前提。 - 版本兼容性:工具已在Ghidra 12.x + pyghidra环境下测试通过。不同版本的Flutter引擎,其
libflutter.so的内部函数地址(RVA)可能不同,需要针对每个特定版本的应用进行分析。 - 脚本选项:工具支持一些高级选项,例如
--all-funcs挂钩所有交叉引用函数(不仅是3参数候选),--save-json保存分析报告等,可根据需要使用。 - 错误处理:如果分析失败,请检查
libflutter.so文件是否完整,以及Ghidra项目临时目录(默认为.ghidra_projects)是否有读写权限。
参考链接
- https://github.com/vichhka-git/universal-flutter-ssl-pinning
- https://ghidra-sre.org/
- https://github.com/NationalSecurityAgency/ghidra/tree/master/GhidraBridge
- https://frida.re/
仅限交流学习使用,如您在使用本工具或代码的过程中存在任何非法行为,您需自行承担相应后果,我们将不承担任何法律及连带责任。“如侵权请私聊公众号删文”。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:柠檬赏金猎人 《自动化逆向libflutter.so并生成Frida绕过脚本》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论