
ret-sync es un conjunto de plugins que ayuda a sincronizar una sesión de depuración (WinDbg/GDB/LLDB/OllyDbg2/x64dbg) con los desensambladores IDA/Ghidra/Binary Ninja.
ret-sync significa Synchronization de Herramientas de Ingeniería Inversa. Es un conjunto de plugins que ayudan a sincronizar una sesión de depuración (WinDbg/GDB/LLDB/OllyDbg/OllyDbg2/x64dbg) con un desensamblador (IDA/Ghidra/Binary Ninja). La idea subyacente es simple: tomar lo mejor de ambos mundos (análisis estático y dinámico).
Los depuradores y el análisis dinámico nos proporcionan:
!peb de WinDbg, !drvobj, !address, etc.)Los desensambladores y el análisis estático nos proporcionan:
Características clave:
ret-sync es un fork de qb-sync que desarrollé y mantuve durante mi estancia en Quarkslab.
Los plugins del depurador:
ext_windbg/sync: archivos fuente de la extensión WinDbg, una vez compilado: sync.dllext_gdb/sync.py: plugin de GDBext_lldb/sync.py: plugin de LLDBext_olly1: plugin de OllyDbg 1.10ext_olly2: plugin de OllyDbg v2ext_x64dbg: plugin de x64dbgLos plugins del desensamblador:
ext_ida/SyncPlugin.pyext_ghidra/dist/ghidra_*_retsync.zip: plugin de Ghidraext_bn/retsync: plugin de Binary NinjaY el plugin de librería:
ext_lib/sync.py: librería Python independienteLos plugins de IDA y GDB requieren una instalación válida de Python. Se soportan Python 2 (>=2.7) y Python 3.
Se ofrecen binarios precompilados para los depuradores WinDbg/OllyDbg/OllyDbg2/x64dbg a través de un pipeline de Azure DevOps:
Seleccione la última compilación y verifique los artefactos en la sección Related: 6 published.

Se proporciona un archivo de plugin precompilado del plugin de Ghidra en ext_ghidra/dist.
ret-sync debería funcionar sin configuración previa para la mayoría de los usuarios con una configuración típica: depurador y desensamblador(es) en el mismo host, nombres de módulos coincidentes.
Aún así, en algunos escenarios se puede utilizar una configuración específica. Para ello, las extensiones y plugins buscan un archivo de configuración global opcional llamado .sync en el directorio personal del usuario. Debe ser un archivo .INI válido.
Adicionalmente, los plugins de IDA y Ghidra también buscan el archivo de configuración primero en el directorio del IDB o del proyecto (<project>.rep) para permitir configuraciones locales por IDB/proyecto. Si hay un archivo de configuración local, se ignora el archivo de configuración global.
Los valores declarados en estos archivos de configuración anulan los valores predeterminados. Tenga en cuenta que no se crea ningún archivo .sync de forma predeterminada.
A continuación detallamos tres escenarios comunes donde un archivo de configuración es útil/necesario:
La sección [INTERFACE] se utiliza para personalizar la configuración relacionada con la red. Supongamos que uno quiere sincronizar IDA con un depurador ejecutándose dentro de una máquina virtual (o simplemente otro host), escenario común de depuración remota del kernel.
Simplemente cree dos archivos .sync:
Le dice al complemento **ret-sync** ``IDA`` que escuche en la interfaz ``192.168.128.1`` con el puerto ``9234``. No hace falta decir que esta interfaz debe ser accesible desde el host remoto o la máquina virtual.
* uno en la máquina donde se ejecuta el depurador, en el directorio home del usuario:```
[INTERFACE]
host=192.168.128.1
port=9234
Le indica al complemento de depurador ret-sync que se conecte al complemento ret-sync IDA configurado previamente para escuchar en esta interfaz.
NOTA: Debes especificar una IP real aquí y no usar 0.0.0.0. Esto se debe a que la variable es utilizada por múltiples fuentes tanto para enlazar como para conectar, por lo que usar 0.0.0.0 resultará en errores extraños.
[ALIASES] ntoskrnl_vuln.exe=ntkrnlmp.exe
La sección ``[ALIASES]`` se utiliza para personalizar el nombre que emplea un desensamblador (IDA/Ghidra) para registrar un módulo en su despachador/administrador de programas.
Por defecto, los complementos del desensamblador usan el nombre del archivo de entrada. Sin embargo, es posible que se haya renombrado el archivo previamente y que ya no coincida con el nombre del proceso real o del módulo cargado según lo ve el depurador.
Aquí simplemente le decimos al despachador que coincida con el nombre `ntkrnlmp.exe` (nombre real) en lugar de `ntoskrnl_vuln.exe` (nombre IDB).
## gdb con frontend de depuración de Qt Creator