Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
reFlutter — Framework di reverse engineering per Flutter | Kitploit
Strumenti/GitHubGitHub/ptswarm/reflutter
Sicurezza AndroidSniffing e Analisi dei PacchettiAnalisi Dinamica (Sandboxing)Sicurezza iOSReverse EngineeringSicurezza MobileAnalisi di BinariArchived
GitHubptswarm/reflutter

reFlutter

Framework di reverse engineering per Flutter

Vedi Repository
1.5k1884 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Twitter

stars workflow

Questo framework aiuta nel reverse engineering di app Flutter utilizzando la versione patchata della libreria Flutter già compilata e pronta per il reimpacchettamento dell'app. Questa libreria ha il processo di deserializzazione degli snapshot modificato per consentire di eseguire analisi dinamiche in modo conveniente.

Caratteristiche principali:

  • socket.cc è patchato per il monitoraggio e l'intercettazione del traffico;
  • dart.cc è modificato per stampare classi, funzioni e alcuni campi;
  • contiene modifiche minori per una compilazione riuscita;
  • se desideri implementare le tue patch, è supportata la modifica manuale del codice Flutter utilizzando un Dockerfile appositamente realizzato.

Motori supportati

  • Android: arm64, arm32;
  • iOS: arm64;
  • Release: Stable, Beta

Installazione

root@kitploit:~
# Linux, Windows, MacOS
pip3 install reflutter

Utilizzo

root@kitploit:~
impact@f:~$ reflutter main.apk

Inserisci l'IP del tuo Burp Suite: <input_ip>

SnapshotHash: 8ee4ef7a67df9845fba331734198a953
Il file apk risultante: ./release.RE.apk
Firma il file apk

Configura il server proxy Burp Suite in ascolto su *:8083
Proxy Tab -> Options -> Proxy Listeners -> Edit -> Binding Tab

Quindi abilita il proxy invisibile nella scheda Request Handling
Support Invisible Proxying -> true

impact@f:~$ reflutter main.ipa

Intercettazione del traffico

Devi specificare l'IP del tuo server proxy Burp Suite situato nella stessa rete del dispositivo con l'app Flutter. Successivamente, configura il Proxy in BurpSuite -> Listener Proxy -> Options tab

  • Aggiungi porta: 8083
  • Bind to address: All interfaces
  • Request handling: Support invisible proxying = True

Non è necessario installare certificati. Su un dispositivo Android, non è necessario l'accesso root. reFlutter permette anche di bypassare alcune implementazioni di certificate pinning di Flutter.

Utilizzo su Android

L'apk risultante deve essere allineato e firmato. Io uso uber-apk-signer java -jar uber-apk-signer.jar --allowResign -a release.RE.apk. Per vedere quale codice viene caricato tramite DartVM, devi eseguire l'applicazione sul dispositivo. Nota che devi trovare manualmente a cosa corrisponde _kDartIsolateSnapshotInstructions (es. 0xB000) usando una ricerca binaria. reFlutter scrive il dump nella cartella root dell'applicazione e imposta i permessi 777 al file e alla cartella. Puoi estrarre il file con il comando adb

root@kitploit:~
impact@f:~$ adb -d shell "cat /data/data/<NOME_PACCHETTO>/dump.dart" > dump.dart
contenuto del file
root@kitploit:~
Library:'package:anyapp/navigation/DeepLinkImpl.dart' Class: Navigation extends Object {  

String* DeepUrl = anyapp://evil.com/ ;

 Function 'Navigation.': constructor. (dynamic, dynamic, dynamic, dynamic) => NavigationInteractor { 
  
              Code Offset: _kDartIsolateSnapshotInstructions + 0x0000000000009270
  
                   }
    
 Function 'initDeepLinkHandle':. (dynamic) => Future<void>* { 
  
              Code Offset: _kDartIsolateSnapshotInstructions + 0x0000000000412fe8
  
                   }
    
 Function '_navigateDeepLink@547106886':. (dynamic, dynamic, {dynamic navigator}) => void { 
  
              Code Offset: _kDartIsolateSnapshotInstructions + 0x0000000000002638
  
                   }
 
       }
 
Library:'package:anyapp/auth/navigation/AuthAccount.dart' Class: AuthAccount extends Account {

PlainNotificationToken* _instance = sentinel;
 
 Function 'getAuthToken':. (dynamic, dynamic, dynamic, dynamic) => Future<AccessToken*>* { 
  
               Code Offset: _kDartIsolateSnapshotInstructions + 0x00000000003ee548
  
                   }
  
 Function 'checkEmail':. (dynamic, dynamic) => Future<bool*>* { 
  
               Code Offset: _kDartIsolateSnapshotInstructions + 0x0000000000448a08
   
                   }

 Function 'validateRestoreCode':. (dynamic, dynamic, dynamic) => Future<bool*>* { 
  
               Code Offset: _kDartIsolateSnapshotInstructions + 0x0000000000412c34
   
                   }

 Function 'sendSmsRestorePassword':. (dynamic, dynamic) => Future<bool*>* { 
  
               Code Offset: _kDartIsolateSnapshotInstructions + 0x00000000003efb88
  
                   }
       }

Utilizzo su iOS

Usa il file IPA creato dopo l'esecuzione del comando reflutter main.ipa. Per vedere quale codice viene caricato tramite DartVM, devi eseguire l'applicazione sul dispositivo. reFlutter stampa il suo output nei log della console in XCode con il tag reflutter.

To Do

  • Mostra offset assoluto del codice per le funzioni;
  • Estrarre più stringhe e campi;
  • Aggiungere patch socket;
  • Estendere il supporto del motore a Debug usando Fork e Github Actions;
  • Migliorare il rilevamento di App.framework e libapp.so all'interno dell'archivio zip

Compilazione del motore

I motori sono compilati usando reFlutter in Github Actions per compilare la versione desiderata; commit e hash degli snapshot sono presi da questa tabella. L'hash dello snapshot è estratto da storage.googleapis.com/flutter_infra_release/flutter/<hash>/android-arm64-release/linux-x64.zip

release

gif

Compilazione personalizzata

Se desideri implementare le tue patch, la modifica manuale del codice Flutter è supportata utilizzando un Docker appositamente realizzato.

sudo docker pull ptswarm/reflutter

root@kitploit:~
# Linux, Windows
ESEMPIO COMPILAZIONE ANDROID ARM64:
    sudo docker run -e WAIT=300 -e x64=0 -e arm=0 -e HASH_PATCH=<Snapshot_Hash> -e COMMIT=<Engine_commit> --rm -iv${PWD}:/t ptswarm/reflutter

FLAGS:
    -e x64=0                         <disabilita la compilazione per architettura x64, usa per ridurre i tempi di compilazione>
    -e arm=0                         <disabilita la compilazione per architettura arm, usa per ridurre i tempi di compilazione>
    -e WAIT=300                      <la quantità di tempo in secondi necessaria per modificare il codice sorgente>
    -e HASH_PATCH=[Snapshot_Hash]    <qui devi specificare l'hash dello snapshot che corrisponde meglio alla riga engine_commit della tabella enginehash.csv. Viene usato per la corretta ricerca delle patch in reFlutter e per una compilazione riuscita>
    -e COMMIT=[Engine_commit]        <qui specifica il commit per la tua versione del motore, prendilo dalla tabella enginehash.csv o dal repository flutter/engine>
Scarica lo strumento