RET-Sync significa Sincronización de herramientas de ingeniería inversa. Es un conjunto de complementos que ayudan a sincronizar una sesión de depuración (WindBG/GDB/LLDB/OLLYDBG/OLLYDBG2/X64DBG) con un desapsilador (Ida/Ghidra/Ninja binaria). La idea subyacente es simple: tomar lo mejor de ambos mundos (análisis estático y dinámico).
Los depugadores y el análisis dinámico nos proporcionan:
!peb , !drvobj , !address , etc. )Los desarmados y el análisis estático nos proporcionan:
Características clave:
RET-Sync es una bifurcación de QB-Sync que desarrollé y mantuve durante mi estadía en Quarkslab.
Los complementos del depurador:
ext_windbg/sync : WindBG Extension Futed Archivos, una vez construidos: sync.dllext_gdb/sync.py : complemento GDBext_lldb/sync.py : complemento LLDBext_olly1 : complemento Ollydbg 1.10ext_olly2 : complemento OllydBG V2ext_x64dbg : complemento X64DBGLos complementos de desmerimiento:
ext_ida/SyncPlugin.pyext_ghidra/dist/ghidra_*_retsync.zip : Ghidra Pluginext_bn/retsync : complemento Ninja BinarioY el complemento de la biblioteca:
ext_lib/sync.py : biblioteca de python independienteLos complementos IDA y GDB requieren una configuración válida de Python. Python 2 (> = 2.7) y Python 3 son compatibles.
Los binarios previos a la construcción de los depuradores WindBG/OllydBG/OllyDBG2/X64DBG se proponen a través de una tubería Azure DevOps :
Seleccione la última compilación y verifique los artefactos en la sección Related : 6 published .

Se proporciona un archivo de complemento previo al complemento Ghidra en ext_ghidra/dist .
RET-Sync debería funcionar fuera de la caja para la mayoría de los usuarios con una configuración típica: depurador y desascadia (s) en el mismo host, los nombres de módulos coinciden.
Aún así, en algunos escenarios se puede usar una configuración específica. Para eso, las extensiones y los complementos verifican un archivo de configuración global opcional llamado .sync en el directorio de inicio del usuario. Debe ser un archivo .INI válido.
Además, los complementos de IDA y Ghidra también buscan el archivo de configuración en el Directorio IDB o Proyecto ( <project>.rep ) primero para permitir la configuración local, 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 el archivo no .sync se crea de forma predeterminada.
A continuación, detallamos, tres escenarios comunes en los que es útil/necesario un archivo de configuración:
La sección [INTERFACE] se utiliza para personalizar la configuración relacionada con la red. Supongamos que uno quiere sincronizar IDA con un depurador que se ejecuta dentro de una máquina virtual (o simplemente otro host), un escenario de depuración de kernel remoto común.
Simplemente cree dos archivos .sync :
[INTERFACE]
host=192.168.128.1
port=9234
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.
[INTERFACE]
host=192.168.128.1
port=9234
Le dice al complemento RET-Sync Debugger que se conecte al complemento RET-Sync IDA configurado previamente para escuchar en esta interfaz.
Nota: debe 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 la unión como para la conexión, por lo que usar 0.0.0.0 dará como resultado errores extraños.
[ALIASES]
ntoskrnl_vuln.exe=ntkrnlmp.exe
La sección [ALIASES] se utiliza para personalizar el nombre que utiliza un desapsilador (IDA/Ghidra) para registrar un módulo a su administrador de despachador/programa.
De forma predeterminada, los complementos desastres usan el nombre del archivo de entrada. Sin embargo, uno puede haber cambiado el nombre del archivo de antemano y ya no coincide con el nombre del proceso real o el módulo cargado como 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 de IDB).
La depuración de QT Creator Frontend cambia la forma en que se registra la salida del comando GDB. Dado que esto interferiría con la sincronización, existe una opción para usar la salida GDB sincronizada para la sincronización en lugar de un archivo temporal. En el uso del archivo de configuración .sync
[GENERAL]
use_tmp_logging_file=false
Si desea utilizar el Frontend de depuración QT para el objetivo.
/proc/<pid>/maps En algunos escenarios, como la depuración de dispositivos integrados sobre el firmware en serie o en bruto en QEMU, GDB no es consciente del PID y no puede acceder /proc/<pid>/maps .
En estos casos, la sección [INIT] se utiliza para pasar un contexto personalizado al complemento. Permite anular algunos campos, como el PID y las asignaciones de memoria.
Extracto de contenido .sync :
[INIT]
context = {
"pid": 200,
"mappings": [ [0x400000, 0x7A81158, 0x7681158, "asav941-200.qcow2|lina"] ]
}
Cada entrada en las asignaciones es: mem_base , mem_end , mem_size , mem_name .
En algunos escenarios, como la depuración de dispositivos integrados o conectarse a interfaces de depuración minimalistas, puede ser más conveniente evitar la función de rebase de dirección automática implementada en los complementos de desonometría.
La opción use_raw_addr es actualmente compatible solo para Ghidra. En el uso del archivo de configuración .sync:
[GENERAL]
use_raw_addr=true
Se requiere la rama IDA 7.x. Para versiones anteriores (6.9x), consulte la versión archivada ida6.9x .
Para la instalación de IDA, copie Syncplugin.py y retsync de la carpeta desde el directorio de complementos ext_ida al IDA, por ejemplo:
C:Program FilesIDA Pro 7.4plugins%APPDATA%Hex-RaysIDA Proplugins~/.idapro/pluginsAlt-Shift-S ) o Edit > Plugins > ret-sync [sync] default idb name: ld.exe
[sync] sync enabled
[sync] cmdline: "C:Program FilesPython38python.exe" -u "C:UsersuserAppDataRoamingHex-RaysIDA Propluginsretsyncbroker.py" --idb "target.exe"
[sync] module base 0x100400000
[sync] hexrays #7.3.0.190614 found
[sync] broker started
[sync] plugin loaded
[sync] << broker << dispatcher not found, trying to run it
[sync] << broker << dispatcher now runs with pid: 6544
[sync] << broker << connected to dispatcher
[sync] << broker << listening on port 63107
Para solucionar problemas con la extensión de IDA, hay dos opciones disponibles en el archivo retsync/rsconfig.py :
LOG_LEVEL = logging.INFO
LOG_TO_FILE_ENABLE = False
Configuración del valor LOG_LEVEL en logging.DEBUG hace que el complemento sea más detallado.
La configuración del valor LOG_TO_FILE_ENABLE en True desencadena el registro de información de excepción de broker.py y dispatcher.py en archivos dedicados. El archivo de registro se genera en la carpeta %TMP% con un patrón de nombre retsync.%s.err .
Utilice la versión preconstruida desde la carpeta ext_ghidra/dist o siga las instrucciones para construirla. Cada compilación de extensión solo admite la versión de Ghidra especificada en el nombre del archivo del complemento. Por ejemplo, ghidra_9.1_PUBLIC_20191104_retsync.zip es para ghidra 9.1 público.
apt install gradle$GHIDRA_DIR con su directorio de instalación) cd ext_ghidra
gradle -PGHIDRA_INSTALL_DIR= $GHIDRA_DIRFile -> Install Extensions... , haga clic en el signo + y seleccione ext_ghidra/dist/ghidra_*_retsync.zip y haga clic en Aceptar. Esto extraerá efectivamente la carpeta retsync de la zip a $GHIDRA_DIR/Extensions/Ghidra/ [*] retsync init
[>] programOpened: tm.sys
imageBase: 0x1c0000000
Alt+s )/Disable ( Alt+Shift+s )/Reiniciar ( Alt+r ) Sincronización. Una ventana de estado también está disponible en Windows -> RetSyncPlugin . En general, desea soltarlo para integrarlo con las ventanas de entorno Ghidra.
El soporte de Ninja Binary es experimental, asegúrese de hacer una copia de seguridad de sus bases de datos de análisis.
RET-SYNC requiere Binary Ninja Versión 2.2 como mínimo y Python 3 (Python 2 no es compatible).
RET-Sync aún no se distribuye a través del Administrador de complementos de Binary Ninja; Se requiere una instalación manual. Simplemente copie ese contenido de la carpeta ext_bn en la carpeta de complementos de Binary Ninja, por ejemplo:
%APPDATA%Binary Ninjaplugins
Después de reiniciar Ninja binario, la siguiente salida debe estar presente en la ventana de la consola:
[sync] commands added
Loaded python3 plugin 'retsync'
Use binarios preconstruidos o use la solución Visual Studio 2017 proporcionada en ext_windbg , (consulte https://docs.microsoft.com/en-us/visualstudio/releasenotes/vs2017-relnotes si es necesario).
Esto construirá el archivo x64releasesync.dll .
Deberá copiar el archivo sync.dll resultante en la ruta de extensión WindBG apropiada.
Para versiones anteriores de WindBG, esto es algo como esto (tenga cuidado con los sabores x86 / x64 ), por ejemplo
C:Program Files (x86)Windows Kits10Debuggersx64winextsync.dll
La carpeta para almacenar la extensión parece estar basada en la ruta, por lo que debe ponerla en una de las ubicaciones consultadas.
Un ejemplo es ponerlo aquí:
C:UsersuserAppDataLocalMicrosoftWindowsAppssync.dll
.load ) 0:000> .load sync
[sync.dll] DebugExtensionInitialize, ExtensionApis loaded
0:000> !sync
[sync] No argument found, using default host (127.0.0.1:9100)
[sync] sync success, sock 0x5a8
[sync] probing sync
[sync] sync is now enabled with host 127.0.0.1
Por ejemplo, en la ventana de salida de Ida
[*] << broker << dispatcher msg: add new client (listening on port 63898), nb client(s): 1
[*] << broker << dispatcher msg: new debugger client: dbg connect - HostMachineHostUser
[sync] set debugger dialect to windbg, enabling hotkeys
Si el módulo actual de WindBG coincide con el nombre del archivo IDA
[sync] idb is enabled with the idb client matching the module name.
Nota: Si recibe el siguiente error, es porque no ha copiado el archivo a la carpeta correcta en los pasos anteriores.
0: kd> .load sync
The call to LoadLibrary(sync) failed, Win32 error 0n2
"The system cannot find the file specified."
Please check your debugger configuration and/or network access.
El error a continuación generalmente significa que WindBG intentó cargar el sabor incorrecto de la extensión, Ej: x64 en lugar del x86 sync.dll .
0:000> .load sync
The call to LoadLibrary(sync) failed, Win32 error 0n193
"%1 is not a valid Win32 application."
Please check your debugger configuration and/or network access.
Como WindBG Preview Carga los complementos ( x86 y x64 ) desde el mismo directorio, se puede cambiar el nombre del archivo x86 sync32.dll .
0:000> .load sync32
ext_gdb/sync.py al directorio de su elección gdb> source sync.py
[sync] configuration file loaded 192.168.52.1:9100
[sync] commands added
Sin embargo, el soporte LLDB es experimental:
~/.lldbinit ) lldb> command script import sync
Ollydbg 1.10 El soporte es experimental, sin embargo:
El soporte OllyDBG2 es experimental, sin embargo:
Basado en TestPlugin, https://github.com/x64dbg/testplugin. Sin embargo, el soporte de X64DBG es experimental:
pluginsdk " en " ext_x64dbgx64dbg_sync ".d32 o .dp64 ) dentro del directorio de complementos de X64DBG.Para los depugadores orientados a la línea de comandos (principalmente WindBG y GDB), RET-Sync está expuesto un conjunto de comandos para ayudar en la tarea de ingeniería inversa.
Los comandos a continuación son genéricos (WindBG y GDB), ¡tenga en cuenta que A ! Se necesita prefijo en WindBG (por ejemplo: sync en GDB , !sync en WindBG).
| Comando de depuración | Descripción |
|---|---|
synchelp | Mostrar la lista de comandos disponibles con breve explicación |
sync | Iniciar sincronización |
syncoff | Detener la sincronización |
cmt [-a address] <string> | Agregue un comentario en la IP actual en Dissembler |
rcmt [-a address] | Restablecer comentarios en la IP actual en Dissembler |
fcmt [-a address] <string> | Agregue un comentario de función para la función en la que se encuentra la IP actual |
raddr <expression> | Agregue un comentario con la dirección rebajada evaluada a partir de la expresión |
rln <expression> | Obtenga el símbolo del desmontador de la dirección dada |
lbl [-a address] <string> | Agregue un nombre de etiqueta en la IP actual en Dissembler |
cmd <string> | Ejecutar un comando en el depurador y agregar su salida como comentario en la IP actual en Dissembler |
bc <||on|off|set 0xBBGGRR> | Habilitar/deshabilitar la coloración de ruta en Disimitor |
idblist | Obtenga la lista de todos los clientes del IDB conectados al despachador |
syncmodauto <on|off> | Habilitar/deshabilitar el interruptor automático de desascado basado en el nombre del módulo |
idbn <n> | Establezca el IDB activo en el enésimo cliente |
jmpto <expression> | |
jmpraw <expression> | Si se habilita un IDB, entonces la vista del Disimitador se sincroniza con la dirección resultante. |
translate <base> <addr> <mod> | Rebase una dirección con respecto al nombre y desplazamiento de su módulo |
Comandos específicos de WindBG:
| Comando de depuración | Descripción |
|---|---|
curmod | Infomación del módulo de visualización para la compensación de instrucciones actuales (para la resolución de problemas) |
modlist | Lista de módulos mejorada del lenguaje de marcado del depurador (DML) destinado a conmutación de IDB activo más suave |
idb <module name> | Establecer el módulo dado como el IDB activo (consulte la versión mejorada de modlist de lm ) |
modmap <base> <size> <name> | Se agrega un módulo sintético ("falso") (definido usando su dirección y tamaño base) a la lista interna del depurador |
modunmap <base> | Eliminar un módulo sintético mapeado previamente en la dirección base |
modcheck <||md5> | Use para verificar si el módulo actual realmente coincide con el archivo de IDB (ex: el módulo se ha actualizado) |
bpcmds <||save|load|> | BPCMDS WRAPPER, Guardar y Recargar .BPCMDS (Lista de comandos de puntos de interrupción) Salida al IDB actual |
ks | Lenguaje de marcado del depurador (DML) Salida mejorada del comando KV |
Comandos específicos de GDB:
| Comando de depuración | Descripción |
|---|---|
bbt | Hermoso retroceso. Similar a BT en GDB, pero solicita símbolos de Disensembler |
patch | Bytes de parche en Disapsembler basado en el contexto en vivo |
bx | Similar a GDB X pero usando un símbolo. El símbolo será resuelto por desascado |
cc | Continúa cursor en Disensambler |
El campo de entrada Overwrite idb name está destinado a cambiar el nombre de IDB predeterminado. Es el nombre que el complemento utiliza para registrarse con el despachador. El interruptor automático IDB se basa en la coincidencia del nombre del módulo. En caso de nombres conflictivos (como un foo.exe y foo.dll ), esto se puede usar para aliviar la coincidencia. Tenga en cuenta que si modifica el campo de entrada mientras la sincronización está activa, debe volver a registrarse con el despachador; Esto se puede hacer simplemente usando el botón " Restart ".
Como recordatorio, es posible alias de forma predeterminada utilizando el archivo de configuración .sync .
RET-Sync define estos atajos globales en IDA:
Alt-Shift-S -Ejecutar el complemento RET-SyncCtrl-Shift-S -Syncing globalCtrl-H -Sincronización de rayos hexadecimalesTambién hay dos botones disponibles en la barra de herramientas de depuración para alternar la sincronización global y hexagonal.
Syncplugin.py también registra las teclas de acceso caliente del comando del depurador.
F2 - Establezca el punto de interrupción en la dirección del cursorF3 - Establezca un punto de interrupción de un disparo en la dirección del cursorCtrl-F2 - Establezca el punto de interrupción del hardware en la dirección del cursorCtrl-F3 -Establezca el punto de interrupción de hardware de una sola vez en la dirección del cursorAlt-F2 - Traduce (Rebase en el depurador) Dirección del cursor actualAlt-F5 - GOCtrl-Alt-F5 -Ejecutar (solo GDB)F10 - Paso únicoF11 - Trace únicoEstos comandos solo están disponibles cuando el IDB actual está activo. Cuando sea posible, también se han implementado para otros depugadores.
Una vez que se abrió Retssyncplugin, puede agregarlo a la ventana CodeBrowser mediante drag'n'drop simple:

Si desea ver varios módulos, los archivos deben estar abiertos en el mismo Visor de código de código, simplemente arrastre los que sean adicionales en la ventana CodeBrowser para obtener el resultado como se indicó anteriormente.
Ret-Sync define estos atajos globales en Ghidra:
Alt-S - Habilitar sincronizaciónAlt-Shift-S -Deshabilitar sincronizaciónAlt-R - Reiniciar sincronizaciónAlt-Shift-R -Configuración de recargaTambién se implementan enlaces sobre los comandos del depurador. Son similares a los de la extensión de Ida (excepto el comando "Go").
F2 - Establezca el punto de interrupción en la dirección del cursorCtrl-F2 - Establezca el punto de interrupción del hardware en la dirección del cursorAlt-F3 -Establezca un punto de interrupción de un disparo en la dirección del cursorCtrl-F3 -Establezca el punto de interrupción de hardware de una sola vez en la dirección del cursorAlt-F2 - Traduce (Rebase en el depurador) Dirección del cursor actualF5 - GOAlt-F5 - Run (solo GDB)F10 - Paso únicoF11 - Trace único Ret-Sync define estos atajos globales en Ninja binario:
Alt-S - Habilitar sincronizaciónAlt-Shift-S -Deshabilitar sincronizaciónTambién se implementan enlaces sobre los comandos del depurador. Son similares a los de la extensión de Ida.
F2 - Establezca el punto de interrupción en la dirección del cursorCtrl-F2 - Establezca el punto de interrupción del hardware en la dirección del cursorAlt-F3 -Establezca un punto de interrupción de un disparo en la dirección del cursorCtrl-F3 -Establezca el punto de interrupción de hardware de una sola vez en la dirección del cursorAlt-F2 - Traduce (Rebase en el depurador) Dirección del cursor actualAlt-F5 - GOF10 - Paso únicoF11 - Trace único [WinDbg]
0:000:x86> pr
eax=00000032 ebx=00000032 ecx=00000032 edx=0028eebc esi=00000032 edi=00000064
eip=00430db1 esp=0028ed94 ebp=00000000 iopl=0 nv up ei pl nz na po nc
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000202
image00000000_00400000+0x30db1:
00430db1 57 push edi
0:000:x86> dd esp 8
0028ed94 00000000 00433845 0028eebc 00000032
0028eda4 0028f88c 00000064 002b049e 00000110
0:000:x86> !cmt 0028ed94 00000000 00433845 0028eebc 00000032
[sync.dll] !cmt called
[IDA]
.text:00430DB1 push edi ; 0028ed94 00000000 00433845 0028eebc 00000032
[WinDbg]
0:000:x86> !rcmt
[sync] !rcmt called
[IDA]
.text:00430DB1 push edi
[WinDbg]
0:000:x86> !fcmt decodes buffer with key
[sync] !fcmt called
[IDA]
.text:004012E0 ; decodes buffer with key
.text:004012E0 public decrypt_func
.text:004012E0 decrypt_func proc near
.text:004012E0 push ebp
Nota: Llamar a este comando sin argumento restablecer el comentario de la función.
[WinDbg]
0:000:x86> !lbl meaningful_label
[sync] !lbl called
[IDA]
.text:000000000040271E meaningful_label:
.text:000000000040271E mov rdx, rsp
[WinDbg]
0:000:x86> pr
eax=00000032 ebx=00000032 ecx=00000032 edx=0028eebc esi=00000032 edi=00000064
eip=00430db1 esp=0028ed94 ebp=00000000 iopl=0 nv up ei pl nz na po nc
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000202
image00000000_00400000+0x30db1:
00430db1 57 push edi
[sync.dll] !cmd r edi
[IDA]
.text:00430DB1 push edi ; edi=00000064
[WinDbg]
0:000> !idblist
> currently connected idb(s):
[0] target.exe
[WinDbg]
0:000> !syncmodauto off
[IDA]
[*] << broker << dispatcher msg: sync mode auto set to off
[WinDbg]
0:000:> !idbn 0
> current idb set to 0
En este ejemplo, el cliente IDB activo actual se habría establecido en:
[0] target.exe.
Alt-F2 ), rebase una dirección con respecto al nombre y desplazamiento de su módulo. ! CMT , ! RCMT y ! Los comandos FCMT admiten una opción de dirección opcional: -a o --address . La dirección debe aprobarse como un valor hexadecimal. El análisis de comandos se basa en el módulo argparse de Python. Para detener el uso de análisis de línea -- .
[WinDbg]
0:000:x86> !cmt -a 0x430DB2 comment
La dirección debe ser una dirección de instrucción válida.
Sincronización con el host:
gdb> sync
[sync] sync is now enabled with host 192.168.52.1
<not running>
gdb> r
Starting program: /bin/ls
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/libthread_db.so.1".
Use comandos, sin "!" prefijo
(gdb) cmd x/i $pc
[sync] command output: => 0x8049ca3: push edi
(gdb) synchelp
[sync] extension commands help:
> sync <host>
> syncoff
> cmt [-a address] <string>
> rcmt [-a address] <string>
> fcmt [-a address] <string>
> cmd <string>
> bc <on|off|>
> rln <address>
> bbt <symbol>
> patch <addr> <count> <size>
> bx /i <symbol>
> cc
> translate <base> <addr> <mod>
(gdb) bt
#0 0x0000000000a91a73 in ?? ()
#1 0x0000000000a6d994 in ?? ()
#2 0x0000000000a89125 in ?? ()
#3 0x0000000000a8a574 in ?? ()
#4 0x000000000044f83b in ?? ()
#5 0x0000000000000000 in ?? ()
(gdb) bbt
#0 0x0000000000a91a73 in IKE_GetAssembledPkt ()
#1 0x0000000000a6d994 in catcher ()
#2 0x0000000000a89125 in IKEProcessMsg ()
#3 0x0000000000a8a574 in IkeDaemon ()
#4 0x000000000044f83b in sub_44F7D0 ()
#5 0x0000000000000000 in ()
F3 para establecer un punto de interrupción de un disparo y F5 para continuar. Esto es útil si prefiere hacerlo con GDB. (gdb) b* 0xA91A73
Breakpoint 1 at 0xa91a73
(gdb) c
Continuing.
Breakpoint 1, 0x0000000000a91a73 in ?? ()
(gdb) cc
[sync] current cursor: 0xa91a7f
[sync] reached successfully
(gdb)
lldb> process launch -s
lldb> sync
[sync] connecting to localhost
[sync] sync is now enabled with host localhost
[sync] event handler started
lldb> synchelp
[sync] extension commands help:
> sync <host> = synchronize with <host> or the default value
> syncoff = stop synchronization
> cmt <string> = add comment at current eip in IDA
> rcmt <string> = reset comments at current eip in IDA
> fcmt <string> = add a function comment for 'f = get_func(eip)' in IDA
> cmd <string> = execute command <string> and add its output as comment at current eip in IDA
> bc <on|off|> = enable/disable path coloring in IDA
color a single instruction at current eip if called without argument
lldb> cmt mooo
Alt+s )/Disable ( Alt+u ). Ctrl+s )/Disable ( Ctrl+u ).Debido al estado beta de la API OllyDBG2, solo se han implementado las siguientes características:
F7 ; F8 para pisar]CTRL+; ]CTRL+: ] Use el menú o comandos de complementos Habilitar (" !sync" ) o deshabilitar (" !syncoff ") Sincronización.
Usar comandos
[sync] synchelp command!
[sync] extension commands help:
> !sync = synchronize with <host from conf> or the default value
> !syncoff = stop synchronization
> !syncmodauto <on | off> = enable / disable idb auto switch based on module name
> !synchelp = display this help
> !cmt <string> = add comment at current eip in IDA
> !rcmt <string> = reset comments at current eip in IDA
> !idblist = display list of all IDB clients connected to the dispatcher
> !idb <module name> = set given module as the active idb (see !idblist)
> !idbn <n> = set active idb to the n_th client. n should be a valid decimal value
> !translate <base> <addr> <mod> = rebase an address with respect to local module's base
NOTA: Usar el comando ! Traducir de un desascado (IDA/Ghidra, Alt-F2 Actualidad), hará que la ventana Desensambleador "salte" a la dirección específica (equivalente a ejecutar DisasM en la línea de comandos X64DBG).
Es posible que desee utilizar características del núcleo RET-Sync (sincronización de posición con una resolución de símbolos desapee) a pesar de que un entorno de depuración completo no está disponible o con una herramienta personalizada. Con ese fin, se ha extraído una biblioteca minimalista de Python.
El siguiente ejemplo ilustra el uso de la biblioteca de Python con un script que camina a través de la salida de una herramienta de registro/rastreo basada en eventos.
from sync import *
HOST = '127.0.0.1'
MAPPINGS = [
[ 0x555555400000 , 0x555555402000 , 0x2000 , " /bin/tempfile" ],
[ 0x7ffff7dd3000 , 0x7ffff7dfc000 , 0x29000 , " /lib/x86_64-linux-gnu/ld-2.27.so" ],
[ 0x7ffff7ff7000 , 0x7ffff7ffb000 , 0x4000 , " [vvar]" ],
[ 0x7ffff7ffb000 , 0x7ffff7ffc000 , 0x1000 , " [vdso]" ],
[ 0x7ffffffde000 , 0x7ffffffff000 , 0x21000 , " [stack]" ],
]
EVENTS = [
[ 0x0000555555400e74 , "malloc" ],
[ 0x0000555555400eb3 , "open" ],
[ 0x0000555555400ee8 , "exit" ]
]
synctool = Sync ( HOST , MAPPINGS )
for e in EVENTS :
offset , name = e
synctool . invoke ( offset )
print ( " 0x%08x - %s" % ( offset , name ))
print ( "[>] press enter for next event" )
input ()Si bien inicialmente se centra en el análisis dinámico (depuradores), es posible extender, por supuesto, extender el conjunto de complementos e integrarse con otras herramientas.
Otros recursos:
Con GDB:
Con Windbg:
g '). Esto puede causar una desaceleración importante si hay demasiados eventos. Se ha implementado una solución limitada, la mejor solución aún es sincronizar temporalmente.Con Ghidra:
Con Ida:
Conflicto (s):
.sync para definir un puerto diferente. [INTERFACE]
host=127.0.0.1
port=9234
RET-Sync es un software gratuito: puede redistribuirlo y/o modificarlo bajo los términos de la Licencia Pública General de GNU, publicada por la Free Software Foundation, ya sea la versión 3 de la licencia o (a su opción) cualquier versión posterior.
Este programa se distribuye con la esperanza de que sea útil, pero sin ninguna garantía; Sin siquiera la garantía implícita de comerciabilidad o estado físico para un propósito particular. Vea la Licencia Pública General de GNU para más detalles.
Debería haber recibido una copia de la Licencia Pública General de GNU junto con este programa. Si no, consulte http://www.gnu.org/licenses/.
El complemento Ninja Binario se lanza bajo la licencia MIT.
Salve a Bruce Dang, Stalkr, @Ivanlef0u, Damien Aumaître, Sébastien Renaud y Kévin Szkudlapski, @ m00dy , @saidelike, Xavier Mehrenberger, Ben64, Raphaël Rigo, Jiss por su amabilidad, ayuda, comentarios y pensamientos. Ilfak Guilfanov, Igor Skochinsky y Arnaud Durenen por su ayuda con las partes internas de Ida y el apoyo sobresaliente. Gracias a Jordan Wiens y Vector 35. Finalmente, gracias también a todos los contribuyentes y a todos los que informaron problemas/errores.