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分析, 动态二进制分析, 目录枚举, 移动安全, 编译器技术, 脚本自动化, 跨平台开发, 逆向工具