
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.

Lesen Sie mehr auf dem Blog: https://swarm.ptsecurity.com/fork-bomb-for-flutter/
Dieses Framework unterstützt das Reverse Engineering von Flutter-Apps mithilfe der gepatchten Version der Flutter-Bibliothek, die bereits kompiliert und für das Repackaging von Apps bereit ist. Diese Bibliothek hat einen modifizierten Snapshot-Deserialisierungsprozess, der es Ihnen ermöglicht, dynamische Analysen auf bequeme Weise durchzuführen.
Hauptmerkmale:
socket.cc wurde für die Verkehrsüberwachung und -abfangung gepatcht;dart.cc wurde 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
Sie müssen die IP Ihres Burp Suite Proxy-Servers angeben, der sich im selben Netzwerk wie das Gerät mit der Flutter-Anwendung befindet. Konfigurieren Sie dann den Proxy in BurpSuite -> Listener Proxy -> Options tab:
8083Alle SchnittstellenTrue
Für Android ist keine Installation von Zertifikaten oder Root-Zugriff erforderlich. reFlutter ermöglicht es auch, einige der Zertifikat-Pinning-Implementierungen von Flutter zu umgehen.
⚠️ Hinweis: Ab Flutter-Version 3.24.0 (Snapshot-Hash:
80a49c7111088100a233b2ae788e1f48) wurden die fest codierte Proxy-IP und der Port entfernt. Sie müssen jetzt Ihren Proxy direkt auf dem Gerät konfigurieren.
Verwenden Sie ADB, um den Proxy des Geräts zu konfigurieren:
adb -s <device> shell "settings put global http_proxy <proxy_ip:port>"
Signieren, ausrichten und installieren Sie die APK. Optional konfigurieren Sie TunProxy, um den Verkehr 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 ausgerichtet 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. Ermitteln Sie _kDartIsolateSnapshotInstructions durch binäre Suche. reFlutter schreibt die Dump-Datei in das Stammverzeichnis der App und setzt die Berechtigungen auf 777. 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 zur 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 die 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 GitHub Actions basierend auf Daten in enginehash.csv gebaut. Der Snapshot-Hash wird abgerufen von:
https://storage.googleapis.com/flutter_infra_release/flutter/<hash>/android-arm64-release/linux-x64.zip
Manuelles Patchen von Flutter-Code wird mit 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 x64-Build-e arm64=0: deaktiviert arm64-Build-e arm=0: deaktiviert arm32-Build-e WAIT=300: Zeit in Sekunden zum Ändern des Quellcodes vor dem Bau-e HASH_PATCH: Snapshot-Hash aus enginehash.csv-e COMMIT: Engine-Commit-Hash