
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.

Lee más en el blog: https://swarm.ptsecurity.com/fork-bomb-for-flutter/
Este framework ayuda con la ingeniería inversa de aplicaciones Flutter utilizando 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 el proceso de deserialización de snapshots modificado para permitirte realizar análisis dinámico de forma cómoda.
Características principales:
socket.cc está parcheado para la monitorización e interceptació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
Opciones:
-p, --patch-dump — modo dump: parchea el motor para emitir dump.dart (clases/métodos/offsets) al iniciar, e imprime una pista de frida.js en lugar de las instrucciones del proxy.-n, --no-interact — nunca solicita una IP de Burp (implica 127.0.0.1); útil para motores antiguos en CI.-b <Snapshot_Hash>, --build-engine — modo de compilación del motor: imprime el commit del motor para un hash de snapshot y (cuando se ejecuta dentro de un checkout de flutter/flutter) aplica los parches de código fuente de reFlutter. Consulta scripts/local-release.Necesitas especificar la IP de tu Servidor Proxy Burp Suite ubicado en la misma red donde está 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 eludir algunas de las implementaciones de certificate pinning de Flutter.
⚠️ Nota: Los motores hasta Flutter 3.24.x inclusive (hash de snapshot
80a49c7111088100a233b2ae788e1f48) todavía llevan la IP del proxy hardcodeada y se parchean en el lugar. A partir de 3.27.x la IP hardcodeada ya no está — configura el 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 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 aplicación 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 aplicación en el dispositivo. La ruta del archivo dump se imprime en los logs de la consola de Xcode:
Current working dir: /private/var/mobile/Containers/Data/Application/<UUID>/dump.dart
Recupera el archivo desde el dispositivo.

frida-tools==13.7.1
frida==16.7.19
Usa los offsets del 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 con scripts/local-release (macOS; compila v2 + v3 para iOS y Android arm64/arm/x64, verifica que cada parche se aplicó y sube los assets de la release) basándose en los datos de enginehash.csv. El commit del motor para un hash de snapshot se resuelve mediante reflutter -b <Snapshot_Hash>. El hash del snapshot se obtiene de:
https://storage.googleapis.com/flutter_infra_release/flutter/<hash>/android-arm64-release/linux-x64.zip
El parcheo 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 .
Ejecutar 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
Flags:
-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 del snapshot de enginehash.csv-e COMMIT: hash del commit del motor