
在博客上阅读更多内容: https://swarm.ptsecurity.com/fork-bomb-for-flutter/
该框架通过使用已编译好并可用于应用重新打包的 Flutter 库补丁版本,帮助进行 Flutter 应用逆向工程。该库修改了快照反序列化过程,使您能够以方便的方式执行动态分析。
主要特性:
socket.cc 已被修补,用于流量监控和拦截;dart.cc 已被修改,用于打印类、函数和一些字段;Dockerfile 进行手动 Flutter 代码更改。# Linux, Windows, MacOS
pip3 install reflutter==0.8.6
impact@f:~$ reflutter main.apk
请输入您的 Burp Suite IP: <input_ip>
SnapshotHash: 8ee4ef7a67df9845fba331734198a953
生成的 apk 文件: ./release.RE.apk
请对 apk 文件进行签名
impact@f:~$ reflutter main.ipa
您需要指定您的 Burp Suite 代理服务器的 IP,该服务器应与运行 Flutter 应用的设备处于同一网络中。然后在 BurpSuite -> Listener Proxy -> Options tab 中配置代理:
8083所有接口True
Android 无需安装证书或 root 权限。reFlutter 还可以绕过某些 Flutter 证书固定实现。
⚠️ 注意: 从 Flutter 版本 3.24.0(快照哈希:
80a49c7111088100a233b2ae788e1f48)开始,硬编码的代理 IP 和端口已被移除。您现在需要在设备上直接配置代理。
使用 ADB 配置设备的代理:
adb -s <device> shell "settings put global http_proxy <proxy_ip:port>"
对 APK 进行签名、对齐并安装。可选地配置 TunProxy 以通过 Burp Suite 路由流量。
对 IPA 进行签名并安装。配置 Potatso 以使用您的 Burp Suite 代理服务器。
生成的 apk 必须对齐并签名。推荐使用 uber-apk-signer:
java -jar uber-apk-signer.jar --allowResign -a release.RE.apk
在设备上运行应用。通过二分搜索确定 _kDartIsolateSnapshotInstructions。reFlutter 将 dump 文件写入应用的根文件夹并设置 777 权限。使用以下命令获取:
adb -d shell "cat /data/data/<PACKAGE_NAME>/dump.dart" > dump.dart
Library:'package:anyapp/navigation/DeepLinkImpl.dart' Class: Navigation extends Object {
String* DeepUrl = anyapp://evil.com/ ;
...
运行 reflutter main.ipa 后,在设备上执行应用。dump 文件的路径会打印到 Xcode 控制台日志中:
Current working dir: /private/var/mobile/Containers/Data/Application/<UUID>/dump.dart
从设备上获取该文件。

frida-tools==13.7.1
frida==16.7.19
在 Frida 脚本 中使用偏移量:
frida -U -f <package> -l frida.js
查找 _kDartIsolateSnapshotInstructions:
readelf -Ws libapp.so
查找 Value 字段。
App.framework 和 libapp.so 的检测引擎基于 enginehash.csv 中的数据,使用 GitHub Actions 构建。快照哈希从以下位置获取:
https://storage.googleapis.com/flutter_infra_release/flutter/<hash>/android-arm64-release/linux-x64.zip
支持使用 Docker 进行手动 Flutter 代码修补:
git clone https://github.com/Impact-I/reFlutter && cd reFlutter
docker build -t reflutter -f Dockerfile .
运行:
docker run -it -v "$(pwd):/t" -e HASH_PATCH=<Snapshot_Hash> -e COMMIT=<Engine_commit> reflutter
示例:
docker run -it -v "$(pwd):/t" -e HASH_PATCH=aa64af18e7d086041ac127cc4bc50c5e -e COMMIT=d44b5a94c976fbb65815374f61ab5392a220b084 reflutter
docker run -e WAIT=300 -e x64=0 -e arm=0 -e HASH_PATCH=<Snapshot_Hash> -e COMMIT=<Engine_commit> --rm -iv${PWD}:/t reflutter
标志:
-e x64=0:禁用 x64 构建-e arm64=0:禁用 arm64 构建-e arm=0:禁用 arm32 构建-e WAIT=300:在构建前修改源代码的等待时间(秒)-e HASH_PATCH:来自 enginehash.csv 的快照哈希-e COMMIT:引擎提交哈希