
Parchea las bibliotecas del motor Flutter para habilitar la ingeniería inversa en tiempo real, la intercepción de tráfico y la omisión de fijación SSL en aplicaciones Android e iOS sin necesidad de root ni instalación de certificados.

Leer más en el blog: https://swarm.ptsecurity.com/fork-bomb-for-flutter/
Este framework ayuda con la ingeniería inversa de aplicaciones Flutter usando la versión parcheada de la librería Flutter que ya está compilada y lista para el reempaquetado de la aplicación. Esta librería tiene modificado el proceso de deserialización de snapshot para permitirte realizar análisis dinámico de manera conveniente.
Características clave:
socket.cc está parcheado para monitoreo e intercepción de tráfico;dart.cc está modificado para imprimir clases, funciones y algunos campos;Dockerfile especialmente diseñado.# 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
Debes especificar la IP de tu Servidor Proxy de Burp Suite ubicado en la misma red donde se encuentra el dispositivo con la aplicación Flutter. Luego configura el Proxy en BurpSuite -> Listener Proxy -> Options tab:
8083All interfacesTrue
No se requiere instalación de certificados ni acceso root para Android. reFlutter también permite omitir algunas implementaciones de fijación de certificados de Flutter.
⚠️ Nota: A partir de la versión de Flutter 3.24.0 (hash de snapshot:
80a49c7111088100a233b2ae788e1f48), la IP y puerto proxy hardcodeados han sido eliminados. Ahora necesitas configurar tu proxy directamente en el dispositivo.
Usa ADB para configurar el proxy del dispositivo:
adb -s <device> shell "settings put global http_proxy <proxy_ip:port>"
Firma, alinea e instala el APK. Opcionalmente configura TunProxy para enrutar el tráfico a través de Burp Suite.
Firma e instala el IPA. Configura Potatso para usar tu servidor proxy de Burp Suite.
El apk resultante debe estar alineado y firmado. Una herramienta recomendada es uber-apk-signer:
java -jar uber-apk-signer.jar --allowResign -a release.RE.apk
Ejecuta la aplicación en un dispositivo. Determina _kDartIsolateSnapshotInstructions mediante búsqueda binaria. reFlutter escribe el archivo dump en la carpeta raíz de la app y establece permisos 777. Recupéralo usando:
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/ ;
...
Después de ejecutar reflutter main.ipa, ejecuta la app en el dispositivo. La ruta del archivo dump se imprime en los registros de la consola de Xcode:
Current working dir: /private/var/mobile/Containers/Data/Application/<UUID>/dump.dart
Recupera el archivo del dispositivo.

frida-tools==13.7.1
frida==16.7.19
Usa los offsets de dump en el script de Frida:
frida -U -f <package> -l frida.js
Para encontrar _kDartIsolateSnapshotInstructions:
readelf -Ws libapp.so
Busca el campo Value.
App.framework y libapp.so dentro del archivo zipLos motores se compilan usando GitHub Actions basados en datos de enginehash.csv. El hash de snapshot se obtiene de:
https://storage.googleapis.com/flutter_infra_release/flutter/<hash>/android-arm64-release/linux-x64.zip
El parcheado manual del código de Flutter es compatible usando Docker:
git clone https://github.com/Impact-I/reFlutter && cd reFlutter
docker build -t reflutter -f Dockerfile .
Ejecuta con:
docker run -it -v "$(pwd):/t" -e HASH_PATCH=<Snapshot_Hash> -e COMMIT=<Engine_commit> reflutter
Ejemplo:
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
Banderas:
-e x64=0: deshabilita la compilación x64-e arm64=0: deshabilita la compilación arm64-e arm=0: deshabilita la compilación arm32-e WAIT=300: tiempo en segundos para modificar el código fuente antes de compilar-e HASH_PATCH: hash de snapshot de enginehash.csv-e COMMIT: hash del commit del motor