
阅读博客了解更多: 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
Please enter your Burp Suite IP: <input_ip>
SnapshotHash: 8ee4ef7a67df9845fba331734198a953
The resulting apk file: ./release.RE.apk
Please sign the apk file
impact@f:~$ reflutter main.ipa
选项:
-p, --patch-dump — dump 模式:对引擎打补丁,使其在启动时输出 dump.dart(类/方法/偏移量),并打印 frida.js 提示,而不是代理配置说明。-n, --no-interact — 从不提示输入 Burp IP(隐含使用 127.0.0.1);适用于 CI 中的旧引擎。-b <Snapshot_Hash>, --build-engine — 引擎构建模式:打印快照哈希对应的引擎提交,并(在 flutter/flutter 检出目录中运行时)应用 reFlutter 源码补丁。参见 scripts/local-release。你需要指定 Burp Suite 代理服务器的 IP,该服务器应与运行 Flutter 应用的设备位于同一网络。然后在 BurpSuite -> Listener Proxy -> Options tab 中配置代理:
8083All interfacesTrue
Android 上无需安装证书或 root 权限。reFlutter 还可以绕过部分 Flutter 证书固定实现。
⚠️ 注意: 截至并包括 Flutter 3.24.x(快照哈希
80a49c7111088100a233b2ae788e1f48)的引擎仍带有硬编码的代理 IP,并会被就地打补丁。从 3.27.x 开始,硬编码 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 脚本中使用 dump 偏移量:
frida -U -f <package> -l frida.js
要查找 _kDartIsolateSnapshotInstructions:
readelf -Ws libapp.so
查找 Value 字段。
App.framework 和 libapp.so 的检测引擎通过 scripts/local-release(macOS;为 iOS 和 Android arm64/arm/x64 构建 v2 + v3,验证每个补丁均已应用,并上传发布资源)基于 enginehash.csv 中的数据构建。快照哈希对应的引擎提交通过 reflutter -b <Snapshot_Hash> 解析。快照哈希从以下地址获取:
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:引擎提交哈希