Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
reFlutter — Framework de rétro-ingénierie Flutter | Kitploit
Outils/GitHubGitHub/ptswarm/reflutter
Sécurité AndroidSniffing et Analyse de PaquetsAnalyse Dynamique (Sandboxing)Sécurité iOSRétro-ingénierieSécurité MobileAnalyse de BinairesArchived
GitHubptswarm/reflutter

reFlutter

Framework de rétro-ingénierie Flutter

Voir le dépôt
1.5k188il y a 4 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Twitter

stars workflow

Ce framework aide à la rétro-ingénierie des applications Flutter en utilisant une version patchée de la bibliothèque Flutter, déjà compilée et prête pour le reconditionnement d'applications. Cette bibliothèque a un processus de désérialisation de snapshot modifié pour permettre une analyse dynamique pratique.

Fonctionnalités clés :

  • socket.cc est patché pour la surveillance et l'interception du trafic ;
  • dart.cc est modifié pour afficher les classes, fonctions et certains champs ;
  • contient des modifications mineures pour une compilation réussie ;
  • si vous souhaitez implémenter vos propres correctifs, une modification manuelle du code Flutter est prise en charge à l'aide d'un Dockerfile spécialement conçu.

Moteurs pris en charge

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

Installation

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

Utilisation

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

Veuillez saisir l'IP de votre Burp Suite : <input_ip>

SnapshotHash : 8ee4ef7a67df9845fba331734198a953
Le fichier apk résultant : ./release.RE.apk
Veuillez signer le fichier apk

Configurez le serveur proxy Burp Suite pour écouter sur *:8083
Onglet Proxy -> Options -> Proxy Listeners -> Modifier -> Onglet Binding

Activez ensuite le proxy invisible dans l'onglet Request Handling
Support Invisible Proxying -> true

impact@f:~$ reflutter main.ipa

Interception du trafic

Vous devez spécifier l'IP de votre serveur proxy Burp Suite situé sur le même réseau que l'appareil contenant l'application Flutter. Ensuite, configurez le proxy dans BurpSuite -> Listener Proxy -> Options tab

  • Ajoutez le port : 8083
  • Liez à l'adresse : All interfaces
  • Gestion des requêtes : Support Invisible Proxying = True

Vous n'avez pas besoin d'installer de certificats. Sur un appareil Android, vous n'avez pas non plus besoin d'accès root. reFlutter permet également de contourner certaines implémentations de certificat pinning de Flutter.

Utilisation sur Android

L'APK obtenu doit être aligné et signé. J'utilise uber-apk-signer java -jar uber-apk-signer.jar --allowResign -a release.RE.apk. Pour voir quel code est chargé via DartVM, vous devez exécuter l'application sur l'appareil. Notez que vous devez trouver manuellement la valeur de _kDartIsolateSnapshotInstructions (ex. 0xB000) en effectuant une recherche binaire. reFlutter écrit le dump dans le dossier racine de l'application et définit les permissions 777 sur le fichier et le dossier. Vous pouvez récupérer le fichier avec la commande adb

root@kitploit:~
impact@f:~$ adb -d shell "cat /data/data/<NOM_DU_PACKAGE>/dump.dart" > dump.dart
contenu du fichier
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
  
                   }
       }

Utilisation sur iOS

Utilisez le fichier IPA créé après l'exécution de la commande reflutter main.ipa. Pour voir quel code est chargé via DartVM, vous devez exécuter l'application sur l'appareil. reFlutter affiche sa sortie dans les logs de la console dans XCode avec le tag reflutter.

À faire

  • Afficher le décalage absolu du code pour les fonctions ;
  • Extraire plus de chaînes et de champs ;
  • Ajouter le patch socket ;
  • Étendre la prise en charge du moteur à Debug en utilisant Fork et Github Actions ;
  • Améliorer la détection de App.framework et libapp.so dans l'archive zip

Construire le moteur

Les moteurs sont construits en utilisant reFlutter dans Github Actions. Pour construire la version souhaitée, les commits et les hash de snapshot sont utilisés à partir de ce tableau. Le hash du snapshot est extrait de storage.googleapis.com/flutter_infra_release/flutter/<hash>/android-arm64-release/linux-x64.zip

release

gif

Construction personnalisée

Si vous souhaitez implémenter vos propres correctifs, la modification manuelle du code Flutter est prise en charge à l'aide d'un Docker spécialement conçu.

sudo docker pull ptswarm/reflutter

root@kitploit:~
# Linux, Windows
EXAMPLE BUILD 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                         <disables building for x64 archiitechture, use to reduce building time>
    -e arm=0                         <disables building for arm archiitechture, use to reduce building time>
    -e WAIT=300                      <the amount of time in seconds you need to edit source code>
    -e HASH_PATCH=[Snapshot_Hash]    <here you need to specify snapshot hash which matches the engine_commit line of enginehash.csv table best. It is used for proper patch search in reFlutter and for successfull compilation>
    -e COMMIT=[Engine_commit]        <here you specify commit for your engine version, take it from enginehash.csv table or from flutter/engine repo>
Télécharger l’outil