worawit/blutter

GitHub: worawit/blutter

专注于 Flutter 移动应用的逆向工程工具,通过编译 Dart AOT Runtime 解析 libapp.so 并提取符号、对象池及生成 Frida 脚本。

Stars: 2131 | Forks: 283

# B(l)utter 通过编译 Dart AOT Runtime 进行的 Flutter 移动应用程序逆向工程工具 目前该应用程序仅支持 Android libapp.so(仅限 arm64)。 此外,该应用程序目前仅适用于较新的 Dart 版本。 关于高优先级的缺失功能,请参阅 [TODO](#todo) ## 环境设置 此应用程序使用 C++20 Formatting 库。它需要非常新的 C++ 编译器,例如 g++>=13, Clang>=16。 我推荐使用 Linux 操作系统(仅在 Debian sid/trixie 上测试过),因为它易于设置。 ### Debian Unstable (gcc 13) **_注意:_** 请仅使用其自身主存储库提供 gcc>=13 的 Debian/Ubuntu 版本。 使用移植到旧版 Debian/Ubuntu 的 gcc 无法工作。 - 安装构建工具和依赖项 ``` apt install python3-pyelftools python3-requests git cmake ninja-build \ build-essential pkg-config libicu-dev libcapstone-dev ``` ### Windows - 安装 git 和 python 3 - 安装最新的 Visual Studio,包含“使用 C++ 的桌面开发”和“C++ CMake 工具” - 安装所需的库(libcapstone 和 libicu4c) ``` python scripts\init_env_win.py ``` - 启动“x64 Native Tools Command Prompt” ### macOS Sequoia - 安装 XCode - 安装所需的工具 ``` brew install cmake ninja pkg-config icu4c capstone pip3 install pyelftools requests ``` ### macOS Ventura 和 Sonoma (clang 16) - 安装 XCode - 安装 clang 16 和所需的工具 ``` brew install llvm@16 cmake ninja pkg-config icu4c capstone pip3 install pyelftools requests ``` ## 用法 从 apk 文件中解压“lib”目录 ``` python3 blutter.py path/to/app/lib/arm64-v8a out_dir ``` blutter.py 将自动从 flutter 引擎检测 Dart 版本,并调用 blutter 的可执行文件从 libapp.so 获取信息。 如果所需 Dart 版本的 blutter 可执行文件不存在,脚本将自动检出 Dart 源代码并进行编译。 ## 更新 你可以使用 ```git pull``` 进行更新,并使用 ```--rebuild``` 选项运行 blutter.py 以强制重新生成可执行文件 ``` python3 blutter.py path/to/app/lib/arm64-v8a out_dir --rebuild ``` ## 输出文件 - **asm/\*** 带符号的 libapp 汇编 - **blutter_frida.js** 目标应用程序的 frida 脚本模板 - **objs.txt** 来自对象池 (Object Pool) 的对象完整(嵌套)转储 - **pp.txt** 对象池中的所有 Dart 对象 ## 目录 - **bin** 包含各 Dart 版本的 blutter 可执行文件,格式为“blutter_dartvm\\_\\_\” - **blutter** 包含源代码。需要针对 Dart VM 库进行构建 - **build** 包含构建项目,构建过程完成后可删除 - **dartsdk** 包含 Dart Runtime 的检出,构建过程完成后可删除 - **external** 仅限 Windows 的第三方库 - **packages** 包含 Dart Runtime 的静态库 - **scripts** 包含用于获取/构建 Dart 的 python 脚本 ## 生成用于开发的 Visual Studio 解决方案 我在 Windows 上使用 Visual Studio 开发 Blutter。```--vs-sln``` 选项可用于生成 Visual Studio 解决方案。 ``` python blutter.py path\to\lib\arm64-v8a build\vs --vs-sln ``` ## 待办事项 - 更多代码分析 - 函数参数和返回类型 - 代码模式的一些伪代码 - 生成更好的 Frida 脚本 - 更多内部类 - 对象修改 - 混淆应用(仍缺少许多功能) - 读取 iOS 二进制文件 - 输入为 apk 或 ipa
标签:Android安全, APK分析, ARM64, Bash脚本, Blutter, C++20, CMake, Dart AOT, Flutter逆向工程, libapp.so分析, 动态二进制分析, 目录枚举, 移动安全, 编译器技术, 脚本自动化, 跨平台开发, 逆向工具