通过编译 Dart AOT 运行时实现的 Flutter 移动应用逆向工程工具
当前该应用仅支持 Android 的 libapp.so(仅 arm64)。 此外,该应用目前仅适用于较新版本的 Dart。
对于高优先级缺失功能,请参见 TODO
本应用使用 C++20 格式化库。需要非常新的 C++ 编译器,例如 g++>=13、Clang>=16。
我建议使用 Linux 操作系统(仅在 Debian sid/trixie 上测试过),因为配置简单。
注意: 仅使用从自身主仓库提供 gcc>=13 的 Debian/Ubuntu 版本。 将移植的 gcc 用于旧版 Debian/Ubuntu 是行不通的。
apt install python3-pyelftools python3-requests git cmake ninja-build \
build-essential pkg-config libicu-dev libcapstone-dev
python scripts\init_env_win.py
brew install cmake ninja pkg-config icu4c capstone
pip3 install pyelftools requests
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
我在 Windows 上使用 Visual Studio 开发 Blutter。可以使用 --vs-sln 选项生成 Visual Studio 解决方案。
python blutter.py path\to\lib\arm64-v8a build\vs --vs-sln