
ret-sync ist eine Sammlung von Plugins, die dabei hilft, eine Debugging-Sitzung (WinDbg/GDB/LLDB/OllyDbg2/x64dbg) mit den Disassemblern IDA/Ghidra/Binary Ninja zu synchronisieren.
ret-sync steht für Reverse-Engineering Tools Synchronisation (Synchronisierung von Reverse-Engineering-Werkzeugen). Es handelt sich um eine Reihe von Plugins, die die Synchronisation einer Debugging-Sitzung (WinDbg/GDB/LLDB/OllyDbg/OllyDbg2/x64dbg) mit einem Disassembler (IDA/Ghidra/Binary Ninja) ermöglichen. Die zugrundeliegende Idee ist einfach: das Beste aus beiden Welten (statische und dynamische Analyse) nutzen.
Debugger und dynamische Analyse bieten uns:
!peb, !drvobj, !address, usw.)Disassembler und statische Analyse bieten uns:
Hauptfunktionen:
ret-sync ist ein Fork von qb-sync, den ich während meines Aufenthalts bei Quarkslab entwickelt und gewartet habe.
Die Debugger-Plugins:
ext_windbg/sync: WinDbg-Erweiterungsquellen, nach dem Bau: sync.dllext_gdb/sync.py: GDB-Pluginext_lldb/sync.py: LLDB-Pluginext_olly1: OllyDbg 1.10-Pluginext_olly2: OllyDbg v2-Pluginext_x64dbg: x64dbg-PluginDie Disassembler-Plugins:
ext_ida/SyncPlugin.pyext_ghidra/dist/ghidra_*_retsync.zip: Ghidra-Pluginext_bn/retsync: Binary Ninja-PluginUnd das Bibliotheks-Plugin:
ext_lib/sync.py: eigenständige Python-BibliothekIDA- und GDB-Plugins benötigen eine funktionierende Python-Umgebung. Python 2 (>=2.7) und Python 3 werden unterstützt.
Vorgefertigte Binärdateien für WinDbg/OllyDbg/OllyDbg2/x64dbg-Debugger werden über eine Azure DevOps-Pipeline bereitgestellt:
Wählen Sie den letzten Build aus und überprüfen Sie die Artefakte im Bereich Related: 6 published.

Ein vorgefertigtes Plugin-Archiv des Ghidra-Plugins wird in ext_ghidra/dist bereitgestellt.
ret-sync sollte für die meisten Benutzer mit einer typischen Einrichtung sofort funktionieren: Debugger und Disassembler auf demselben Host, Modulnamen stimmen überein.
In einigen Szenarien kann dennoch eine spezifische Konfiguration erforderlich sein. Dazu suchen Erweiterungen und Plugins optional nach einer globalen Konfigurationsdatei namens .sync im Home-Verzeichnis des Benutzers. Sie muss eine gültige .INI-Datei sein.
Zusätzlich suchen die IDA- und Ghidra-Plugins auch zuerst im IDB- oder Projektverzeichnis (<project>.rep) nach der Konfigurationsdatei, um lokale, pro-IDB/Projekt-Einstellungen zu ermöglichen. Wenn eine lokale Konfigurationsdatei vorhanden ist, wird die globale Konfigurationsdatei ignoriert.
Werte, die in diesen Konfigurationsdateien deklariert sind, überschreiben die Standardwerte. Bitte beachten Sie, dass standardmäßig keine .sync-Datei erstellt wird.
Im Folgenden beschreiben wir drei häufige Szenarien, in denen eine Konfigurationsdatei nützlich/notwendig ist:
Der Abschnitt [INTERFACE] wird verwendet, um netzwerkbezogene Einstellungen anzupassen. Angenommen, man möchte IDA mit einem Debugger synchronisieren, der auf einer virtuellen Maschine (oder einfach einem anderen Host) läuft – ein häufiges Szenario beim entfernten Kernel-Debugging.
Erstellen Sie einfach zwei .sync-Dateien:
Es weist das **ret-sync** ``IDA``-Plugin an, auf dem Interface ``192.168.128.1`` mit Port ``9234`` zu lauschen. Es versteht sich von selbst, dass dieses Interface vom entfernten Host oder der virtuellen Maschine aus erreichbar sein muss.
* eines auf dem Rechner, auf dem der Debugger ausgeführt wird, im Home-Verzeichnis des Benutzers:```
[INTERFACE]
host=192.168.128.1
port=9234
Es teilt dem ret-sync Debugger-Plugin mit, sich mit dem zuvor konfigurierten ret-sync IDA-Plugin zu verbinden, das auf diesem Interface lauscht.
HINWEIS: Sie müssen hier eine echte IP angeben und nicht 0.0.0.0 verwenden. Dies liegt daran, dass die Variable von mehreren Quellen sowohl zum Binden als auch zum Verbinden verwendet wird. Die Verwendung von 0.0.0.0 führt daher zu seltsamen Fehlern.
[ALIASES] ntoskrnl_vuln.exe=ntkrnlmp.exe
Der Abschnitt ``[ALIASES]`` wird verwendet, um den Namen anzupassen, der von einem Disassembler (IDA/Ghidra) verwendet wird, um ein Modul bei seinem Dispatcher/Programm-Manager zu registrieren.
Standardmäßig verwenden Disassembler-Plugins den Namen der Eingabedatei. Allerdings kann es vorkommen, dass man die Datei vorher umbenannt hat und sie nicht mehr mit dem Namen des tatsächlichen Prozesses oder geladenen Moduls übereinstimmt, wie er vom Debugger gesehen wird.
Hier teilen wir dem Dispatcher einfach mit, dass er den Namen `ntkrnlmp.exe` (echter Name) anstelle von `ntoskrnl_vuln.exe` (IDB-Name) verwenden soll.
## gdb mit Qt Creator Debugging-Frontend