
Corrige as bibliotecas do motor Flutter para permitir engenharia reversa em tempo de execução, interceptação de tráfego e bypass de SSL pinning para aplicativos Android e iOS sem necessidade de root ou instalação de certificados.

Leia mais no blog: https://swarm.ptsecurity.com/fork-bomb-for-flutter/
Este framework ajuda na engenharia reversa de aplicativos Flutter usando a versão modificada da biblioteca Flutter que já está compilada e pronta para o reempacotamento do aplicativo. Esta biblioteca tem o processo de desserialização de snapshot modificado para permitir que você realize análise dinâmica de forma conveniente.
Principais características:
socket.cc está modificado para monitoramento e interceptação de tráfego;dart.cc está modificado para imprimir classes, funções e alguns campos;Dockerfile especialmente criado.# 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
Você precisa especificar o IP do seu Proxy Server Burp Suite localizado na mesma rede onde o dispositivo com o aplicativo Flutter está. Em seguida, configure o Proxy na aba BurpSuite -> Listener Proxy -> Options:
8083All interfacesTrue
Não é necessária instalação de certificado ou acesso root no Android. O reFlutter também permite contornar algumas implementações de fixação de certificado (pinning) do Flutter.
⚠️ Nota: A partir da versão 3.24.0 do Flutter (hash do snapshot:
80a49c7111088100a233b2ae788e1f48), o IP e porta do proxy fixados no código foram removidos. Agora você precisa configurar seu proxy diretamente no dispositivo.
Use o ADB para configurar o proxy do dispositivo:
adb -s <device> shell "settings put global http_proxy <proxy_ip:port>"
Assine, alinhe e instale o APK. Opcionalmente, configure o TunProxy para rotear o tráfego pelo Burp Suite.
Assine e instale o IPA. Configure o Potatso para usar seu servidor proxy Burp Suite.
O apk resultante deve estar alinhado e assinado. Uma ferramenta recomendada é o uber-apk-signer:
java -jar uber-apk-signer.jar --allowResign -a release.RE.apk
Execute o app em um dispositivo. Determine _kDartIsolateSnapshotInstructions via busca binária. O reFlutter escreve o arquivo de dump na pasta raiz do app e define permissões 777. Recupere-o 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/ ;
...
Após executar reflutter main.ipa, execute o app no dispositivo. O caminho do arquivo de dump é exibido nos logs do console do Xcode:
Current working dir: /private/var/mobile/Containers/Data/Application/<UUID>/dump.dart
Recupere o arquivo do dispositivo.

frida-tools==13.7.1
frida==16.7.19
Use os offsets do dump no script do Frida:
frida -U -f <package> -l frida.js
Para encontrar _kDartIsolateSnapshotInstructions:
readelf -Ws libapp.so
Procure pelo campo Value.
App.framework e libapp.so dentro do arquivo zipOs engines são construídos usando o GitHub Actions com base nos dados em enginehash.csv. O hash do snapshot é obtido de:
https://storage.googleapis.com/flutter_infra_release/flutter/<hash>/android-arm64-release/linux-x64.zip
A modificação manual do código Flutter é suportada usando Docker:
git clone https://github.com/Impact-I/reFlutter && cd reFlutter
docker build -t reflutter -f Dockerfile .
Execute com:
docker run -it -v "$(pwd):/t" -e HASH_PATCH=<Snapshot_Hash> -e COMMIT=<Engine_commit> reflutter
Exemplo:
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: desabilita build x64-e arm64=0: desabilita build arm64-e arm=0: desabilita build arm32-e WAIT=300: tempo em segundos para modificar o código antes do build-e HASH_PATCH: hash do snapshot de enginehash.csv-e COMMIT: hash do commit do engine