
ret-sync est un ensemble de plugins qui aide à synchroniser une session de débogage (WinDbg/GDB/LLDB/OllyDbg2/x64dbg) avec les désassembleurs IDA/Ghidra/Binary Ninja.
ret-sync signifie Reverse-Engineering Tools SYNChronization. C'est un ensemble de plugins qui aident à synchroniser une session de débogage (WinDbg/GDB/LLDB/OllyDbg/OllyDbg2/x64dbg) avec un désassembleur (IDA/Ghidra/Binary Ninja). L'idée sous-jacente est simple : tirer le meilleur des deux mondes (analyse statique et dynamique).
Les débogueurs et l'analyse dynamique nous fournissent :
!peb de WinDbg, !drvobj, !address, etc.)Les désassembleurs et l'analyse statique nous fournissent :
Fonctionnalités clés :
ret-sync est un fork de qb-sync que j'ai développé et maintenu pendant mon séjour chez Quarkslab.
Les plugins pour débogueurs :
ext_windbg/sync : fichiers sources de l'extension WinDbg, une fois compilée : sync.dllext_gdb/sync.py : plugin GDBext_lldb/sync.py : plugin LLDBext_olly1 : plugin OllyDbg 1.10ext_olly2 : plugin OllyDbg v2ext_x64dbg : plugin x64dbgLes plugins pour désassembleurs :
ext_ida/SyncPlugin.pyext_ghidra/dist/ghidra_*_retsync.zip : plugin Ghidraext_bn/retsync : plugin Binary NinjaEt le plugin bibliothèque :
ext_lib/sync.py : bibliothèque Python autonomeLes plugins IDA et GDB nécessitent une installation Python valide. Python 2 (>=2.7) et Python 3 sont pris en charge.
Des binaires précompilés pour les débogueurs WinDbg/OllyDbg/OllyDbg2/x64dbg sont proposés via un pipeline Azure DevOps :
Sélectionnez la dernière build et vérifiez les artefacts dans la section Related : 6 published.

Une archive précompilée du plugin Ghidra est fournie dans ext_ghidra/dist.
ret-sync devrait fonctionner immédiatement pour la plupart des utilisateurs avec une configuration typique : débogueur et désassembleur(s) sur le même hôte, noms de modules correspondants.
Cependant, dans certains scénarios, une configuration spécifique peut être nécessaire. Pour cela, les extensions et plugins recherchent un fichier de configuration global optionnel nommé .sync dans le répertoire personnel de l'utilisateur. Il doit s'agir d'un fichier .INI valide.
De plus, les plugins IDA et Ghidra recherchent également le fichier de configuration d'abord dans le répertoire de l'IDB ou du projet (<project>.rep) pour permettre des paramètres locaux, par IDB/projet. Si un fichier de configuration local est présent, le fichier de configuration global est ignoré.
Les valeurs déclarées dans ces fichiers de configuration remplacent les valeurs par défaut. Veuillez noter qu'aucun fichier .sync n'est créé par défaut.
Ci-dessous, nous détaillons trois scénarios courants où un fichier de configuration est utile/nécessaire :
La section [INTERFACE] est utilisée pour personnaliser les paramètres réseau. Supposons que l'on souhaite synchroniser IDA avec un débogueur s'exécutant dans une machine virtuelle (ou simplement un autre hôte), scénario courant de débogage noyau à distance.
Créez simplement deux fichiers .sync :
Il indique au plugin **ret-sync** ``IDA`` d'écouter sur l'interface
``192.168.128.1`` avec le port ``9234``. Il va sans dire que cette
interface doit être accessible depuis la machine distante ou la machine virtuelle.
* une sur la machine où le débogueur est exécuté, dans le répertoire personnel de l'utilisateur :```
[INTERFACE]
host=192.168.128.1
port=9234
Il indique au plugin de débogueur ret-sync de se connecter au plugin ret-sync IDA configuré précédemment pour écouter sur cette interface.
NOTE: Vous devez spécifier une vraie adresse IP ici, et ne pas utiliser 0.0.0.0. En effet, la variable est utilisée par plusieurs sources à la fois pour la liaison et la connexion, donc l'utilisation de 0.0.0.0 entraînera des erreurs étranges.
[ALIASES] ntoskrnl_vuln.exe=ntkrnlmp.exe
La section ``[ALIASES]`` permet de personnaliser le nom utilisé par un désassembleur (IDA/Ghidra) pour enregistrer un module auprès de son répartiteur/gestionnaire de programme.
Par défaut, les plugins de désassembleur utilisent le nom du fichier d'entrée. Cependant, on peut avoir renommé le fichier au préalable et celui-ci ne correspond plus au nom du processus réel ou du module chargé tel que vu par le débogueur.
Ici, on indique simplement au répartiteur de correspondre au nom `ntkrnlmp.exe` (nom réel) au lieu de `ntoskrnl_vuln.exe` (nom IDB).
## gdb avec le frontal de débogage Qt Creator