
ret-sync è un insieme di plugin che aiuta a sincronizzare una sessione di debugging (WinDbg/GDB/LLDB/OllyDbg2/x64dbg) con i disassemblatori IDA/Ghidra/Binary Ninja.
ret-sync sta per Reverse-Engineering Tools SYNChronization. È un insieme di plugin che aiutano a sincronizzare una sessione di debug (WinDbg/GDB/LLDB/OllyDbg/OllyDbg2/x64dbg) con un disassemblatore (IDA/Ghidra/Binary Ninja). L'idea di base è semplice: prendere il meglio da entrambi i mondi (analisi statica e dinamica).
I debugger e l'analisi dinamica ci forniscono:
!peb, !drvobj,
!address, ecc.)I disassemblatori e l'analisi statica ci forniscono:
Funzionalità principali:
ret-sync è un fork di qb-sync che ho sviluppato e mantenuto durante la mia permanenza presso Quarkslab.
I plugin per debugger:
ext_windbg/sync: file sorgente dell'estensione WinDbg, una volta compilata: sync.dllext_gdb/sync.py: plugin GDBext_lldb/sync.py: plugin LLDBext_olly1: plugin OllyDbg 1.10ext_olly2: plugin OllyDbg v2ext_x64dbg: plugin x64dbgI plugin per disassemblatori:
ext_ida/SyncPlugin.pyext_ghidra/dist/ghidra_*_retsync.zip: plugin Ghidraext_bn/retsync: plugin Binary NinjaE il plugin libreria:
ext_lib/sync.py: libreria Python standaloneI plugin per IDA e GDB richiedono un ambiente Python funzionante. Sono supportati Python 2 (>=2.7) e Python 3.
Binari precompilati per i debugger WinDbg/OllyDbg/OllyDbg2/x64dbg sono forniti
tramite una pipeline Azure DevOps:
Seleziona l'ultima build e controlla gli artefatti nella sezione Related: 6 pubblicati.

Un archivio precompilato del plugin Ghidra è fornito in ext_ghidra/dist.
ret-sync dovrebbe funzionare immediatamente per la maggior parte degli utenti con una configurazione tipica: debugger e disassemblatore(i) sullo stesso host, nomi dei moduli corrispondenti.
Tuttavia, in alcuni scenari potrebbe essere utile una configurazione specifica. Per questo,
le estensioni e i plugin cercano un file di configurazione globale opzionale chiamato
.sync nella directory home dell'utente. Deve essere un file .INI valido.
Inoltre, i plugin per IDA e Ghidra cercano anche il file di configurazione
nella directory IDB o del progetto (<project>.rep) per primi, per consentire impostazioni
locali, per-IDB/progetto. Se è presente un file di configurazione locale, il
file di configurazione globale viene ignorato.
I valori dichiarati in questi file di configurazione sovrascrivono i valori predefiniti. Si noti
che nessun file .sync viene creato per impostazione predefinita.
Di seguito dettagliamo tre scenari comuni in cui un file di configurazione è utile/necessario:
La sezione [INTERFACE] viene utilizzata per personalizzare le impostazioni relative alla rete.
Supponiamo di voler sincronizzare IDA con un debugger in esecuzione all'interno di una
macchina virtuale (o semplicemente un altro host), scenario comune di debug remoto del kernel.
Creare semplicemente due file .sync:
Dice al plugin **ret-sync** ``IDA`` di ascoltare sull'interfaccia
``192.168.128.1`` con porta ``9234``. Inutile dire che questa
interfaccia deve essere raggiungibile dall'host remoto o dalla macchina virtuale.
* una sulla macchina dove viene eseguito il debugger, nella home directory dell'utente:```
[INTERFACE]
host=192.168.128.1
port=9234
Dice al plugin debugger ret-sync di connettersi al plugin ret-sync IDA
configurato in precedenza per ascoltare su questa interfaccia.
NOTA: Devi specificare un IP reale qui, e non usare 0.0.0.0. Questo perché
la variabile è utilizzata da più sorgenti sia per il binding che per la
connessione, quindi l'uso di 0.0.0.0 provocherà errori strani.
[ALIASES] ntoskrnl_vuln.exe=ntkrnlmp.exe
La sezione ``[ALIASES]`` viene utilizzata per personalizzare il nome utilizzato da un disassemblatore (IDA/Ghidra) per registrare un modulo al suo dispatcher/gestore di programmi.
Per impostazione predefinita, i plugin dei disassemblatori utilizzano il nome del file di input. Tuttavia, è possibile che il file sia stato rinominato in precedenza e non corrisponda più al nome del processo effettivo o del modulo caricato come visto dal debugger.
Qui diciamo semplicemente al dispatcher di corrispondere al nome `ntkrnlmp.exe` (nome reale) invece di `ntoskrnl_vuln.exe` (nome IDB).
## gdb con frontend di debug Qt Creator
Il frontend di debug di Qt Creator modifica il modo in cui viene registrato l'output dei comandi di gdb. Poiché ciò interferirebbe con la sincronizzazione, esiste un'opzione per utilizzare l'output grezzo di gdb per la sincronizzazione invece di un file temporaneo. Nel file di configurazione .sync utilizzare```
[GENERAL]
use_tmp_logging_file=false
if you wish to use the Qt debugging frontend for the target.
/proc/<pid>/maps