
Patches Flutter-Engine-Bibliotheken, um Laufzeit-Reverse-Engineering, Verkehrsabfang und Umgehung von SSL-Pinning für Android- und iOS-Apps ohne Root oder Zertifikatsinstallation zu ermöglichen.

Mehr dazu im Blog: https://swarm.ptsecurity.com/fork-bomb-for-flutter/
Dieses Framework unterstützt beim Reverse Engineering von Flutter-Apps mithilfe der gepatchten Version der Flutter-Bibliothek, die bereits kompiliert und für das Repackaging von Apps vorbereitet ist. Diese Bibliothek hat einen modifizierten Snapshot-Deserialisierungsprozess, der es ermöglicht, dynamische Analysen auf bequeme Weise durchzuführen.
Hauptmerkmale:
socket.cc ist für Traffic-Monitoring und -Interception gepatcht;dart.cc ist modifiziert, um Klassen, Funktionen und einige Felder auszugeben;Dockerfile unterstützt.# 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
Optionen:
-p, --patch-dump — Dump-Modus: patcht die Engine, um beim Start dump.dart (Klassen/Methoden/Offsets) auszugeben, und zeigt einen frida.js-Hinweis anstelle der Proxy-Anweisungen an.-n, --no-interact — fragt nie nach einer Burp-IP (impliziert 127.0.0.1); nützlich für alte Engines in CI.-b <Snapshot_Hash>, --build-engine — Engine-Build-Modus: gibt den Engine-Commit für einen Snapshot-Hash aus und (bei Ausführung innerhalb eines flutter/flutter-Checkouts) wendet die reFlutter-Quellpatches an. Siehe scripts/local-release.Sie müssen die IP Ihres Burp Suite Proxy Servers angeben, der sich im selben Netzwerk befindet wie das Gerät mit der Flutter-Anwendung. Konfigurieren Sie dann den Proxy in BurpSuite -> Listener Proxy -> Options tab:
8083All interfacesTrue
Für Android ist weder eine Zertifikatsinstallation noch Root-Zugriff erforderlich. reFlutter ermöglicht auch die Umgehung einiger Flutter-Zertifikats-Pinning-Implementierungen.
⚠️ Hinweis: Engines bis einschließlich Flutter 3.24.x (Snapshot-Hash
80a49c7111088100a233b2ae788e1f48) enthalten weiterhin die hartcodierte Proxy-IP und werden direkt gepatcht. Ab 3.27.x ist die hartcodierte IP entfernt — konfigurieren Sie den Proxy stattdessen direkt auf dem Gerät.
Verwenden Sie ADB, um den Proxy des Geräts zu konfigurieren:
adb -s <device> shell "settings put global http_proxy <proxy_ip:port>"
Signieren, alignen und installieren Sie die APK. Konfigurieren Sie optional TunProxy, um den Traffic durch Burp Suite zu leiten.
Signieren und installieren Sie die IPA. Konfigurieren Sie Potatso, um Ihren Burp Suite Proxy Server zu verwenden.
Die resultierende APK muss aligned und signiert werden. Ein empfohlenes Tool ist uber-apk-signer:
java -jar uber-apk-signer.jar --allowResign -a release.RE.apk
Führen Sie die App auf einem Gerät aus. Bestimmen Sie _kDartIsolateSnapshotInstructions per Binärsuche. reFlutter schreibt die Dump-Datei in den Root-Ordner der App und setzt 777-Berechtigungen. Rufen Sie sie ab mit:
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/ ;
...
Nach dem Ausführen von reflutter main.ipa führen Sie die App auf dem Gerät aus. Der Pfad der Dump-Datei wird in den Xcode-Konsolenprotokollen ausgegeben:
Current working dir: /private/var/mobile/Containers/Data/Application/<UUID>/dump.dart
Rufen Sie die Datei vom Gerät ab.

frida-tools==13.7.1
frida==16.7.19
Verwenden Sie Dump-Offsets im Frida-Skript:
frida -U -f <package> -l frida.js
Um _kDartIsolateSnapshotInstructions zu finden:
readelf -Ws libapp.so
Suchen Sie nach dem Value-Feld.
App.framework und libapp.so im Zip-Archiv verbessernEngines werden mit scripts/local-release (macOS; baut v2 + v3 für iOS und Android arm64/arm/x64, verifiziert, dass jeder Patch angewendet wurde, und lädt die Release-Assets hoch) basierend auf Daten in enginehash.csv gebaut. Der Engine-Commit für einen Snapshot-Hash wird über reflutter -b <Snapshot_Hash> aufgelöst. Der Snapshot-Hash wird abgerufen von:
https://storage.googleapis.com/flutter_infra_release/flutter/<hash>/android-arm64-release/linux-x64.zip
Manuelles Patchen des Flutter-Codes wird mithilfe von Docker unterstützt:
git clone https://github.com/Impact-I/reFlutter && cd reFlutter
docker build -t reflutter -f Dockerfile .
Ausführen mit:
docker run -it -v "$(pwd):/t" -e HASH_PATCH=<Snapshot_Hash> -e COMMIT=<Engine_commit> reflutter
Beispiel:
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
Flags:
-e x64=0: deaktiviert den x64-Build-e arm64=0: deaktiviert den arm64-Build-e arm=0: deaktiviert den arm32-Build-e WAIT=300: Zeit in Sekunden zum Ändern des Quellcodes vor dem Build-e HASH_PATCH: Snapshot-Hash aus enginehash.csv-e COMMIT: Engine-Commit-Hash