
Модифицирует библиотеки движка Flutter, чтобы обеспечить обратную разработку во время выполнения, перехват трафика и обход привязки SSL для приложений Android и iOS без root-доступа или установки сертификатов.

Читайте подробнее в блоге: https://swarm.ptsecurity.com/fork-bomb-for-flutter/
Этот фреймворк помогает в реверс-инжиниринге Flutter-приложений с использованием пропатченной версии библиотеки Flutter, которая уже скомпилирована и готова для перепаковки приложений. В этой библиотеке модифицирован процесс десериализации снимков (snapshot), что позволяет удобно проводить динамический анализ.
Ключевые особенности:
socket.cc пропатчен для мониторинга и перехвата трафика;dart.cc модифицирован для вывода классов, функций и некоторых полей;Dockerfile.# 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
Вам необходимо указать IP-адрес вашего прокси-сервера Burp Suite, находящегося в той же сети, что и устройство с Flutter-приложением. Затем настройте прокси в BurpSuite -> Listener Proxy -> вкладка Options:
8083All interfacesTrue
Для 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 записывает дамп-файл в корневую папку приложения и устанавливает права 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 выполните приложение на устройстве. Путь к дамп-файлу выводится в журналы консоли Xcode:
Current working dir: /private/var/mobile/Containers/Data/Application/<UUID>/dump.dart
Получите файл с устройства.

frida-tools==13.7.1
frida==16.7.19
Используйте смещения дампа в скрипте Frida script:
frida -U -f <package> -l frida.js
Чтобы найти _kDartIsolateSnapshotInstructions:
readelf -Ws libapp.so
Ищите поле Value.
App.framework и libapp.so внутри zip-архиваДвижки собираются с помощью GitHub Actions на основе данных из enginehash.csv. Хэш снимка получается из:
https://storage.googleapis.com/flutter_infra_release/flutter/<hash>/android-arm64-release/linux-x64.zip
Ручное патчирование кода Flutter поддерживается с помощью Docker:
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: хэш коммита движка