RET-Sync significa Sincronização de ferramentas de engenharia reversa. É um conjunto de plug -ins que ajudam a sincronizar uma sessão de depuração (Windbg/GDB/LLDB/Ollydbg/ollydbg2/x64dbg) com um desmontador (Ida/Ghidra/Ninja binário). A idéia subjacente é simples: tome o melhor dos dois mundos (análise estática e dinâmica).
Debuggers e análise dinâmica nos fornecem:
!peb , !drvobj !address ,!Desmontadores e análise estática nos fornecem:
Principais recursos:
RET-Sync é um garfo de QB-Sync que eu desenvolvi e mantive durante a minha estadia no Quarkslab.
Os plugins do depurador:
ext_windbg/sync : Windbg Extension Source Arquins, uma vez construído: sync.dllext_gdb/sync.py : plugin GDBext_lldb/sync.py : plugin lldbext_olly1 : plugin ollydbg 1.10ext_olly2 : plugin ollydbg v2ext_x64dbg : x64dbg pluginOs plugins desmontadores:
ext_ida/SyncPlugin.pyext_ghidra/dist/ghidra_*_retsync.zip : plugin ghidraext_bn/retsync : plugin binário ninjaE o plugin da biblioteca:
ext_lib/sync.py : Biblioteca Python independenteOs plugins IDA e GDB requerem uma configuração Python válida. Python 2 (> = 2,7) e Python 3 são suportados.
Os binários pré-criados para os depuradores Windbg/Ollydbg/ollydbg2/x64dbg são propostos através de um pipeline Azure DevOps :
Selecione a última construção e verifique os artefatos na seção Related : 6 published .

Um arquivo de plug-in pré-construído do plug-in ghidra é fornecido em ext_ghidra/dist .
O RET-Sync deve funcionar fora da caixa para a maioria dos usuários com uma configuração típica: depurador e desmontagem (s) no mesmo host, nomes de módulos correspondentes.
Ainda assim, em alguns cenários, uma configuração específica pode ser usada. Para isso, extensões e plugins verifiquem um arquivo de configuração global opcional chamado .sync no diretório inicial do usuário. Deve ser um arquivo .INI válido.
Além disso, os plug-ins IDA e Ghidra também procuram o arquivo de configuração no Diretório de IDB ou Projeto ( <project>.rep ) primeiro para permitir configurações locais, por IDB/projeto. Se um arquivo de configuração local estiver presente, o arquivo de configuração global será ignorado.
Os valores declarados nesses arquivos de configuração substituem os valores padrão. Observe que não o arquivo .sync é criado por padrão.
Abaixo, detalhamos, três cenários comuns em que um arquivo de configuração é útil/necessário:
A seção [INTERFACE] é usada para personalizar configurações relacionadas à rede. Suponhamos que se queira sincronizar a IDA com um depurador em uma máquina virtual (ou simplesmente outro host), cenário de depuração do kernel remoto comum.
Simplesmente crie dois .sync File:
[INTERFACE]
host=192.168.128.1
port=9234
Ele informa ao plug-in RET-Sync IDA ouvir na interface 192.168.128.1 com a porta 9234 . Escusado será dizer que essa interface deve ser acessível a partir do host remoto ou da máquina virtual.
[INTERFACE]
host=192.168.128.1
port=9234
Ele informa ao plug-in Ret-Sync Debugger para conectar-se ao plug-in Ret-Sync IDA configurado anteriormente para ouvir nessa interface.
Nota: Você deve especificar um IP real aqui e não usar 0.0.0.0 . Isso ocorre porque a variável é usada por várias fontes para ligação e conexão; portanto, o uso de 0.0.0.0 resultará em erros estranhos.
[ALIASES]
ntoskrnl_vuln.exe=ntkrnlmp.exe
A seção [ALIASES] é usada para personalizar o nome que é usado por um desmontador (IDA/ghidra) para registrar um módulo no seu despachante/gerenciador de programas.
Por padrão, os plugins desmontadores usam o nome do arquivo de entrada. No entanto, pode -se ter renomeado o arquivo com antecedência e ele não corresponde mais ao nome do processo real ou do módulo carregado, como visto pelo depurador.
Aqui, simplesmente dizemos ao despachante para corresponder ao nome ntkrnlmp.exe (nome real) em vez de ntoskrnl_vuln.exe (nome do IDB).
O front -end de depuração do Criador QT muda a maneira como a saída do comando GDB é registrada. Como isso interferiria na sincronização, existe uma opção para usar a saída GDB bruta para sincronização em vez de um arquivo temporário. No .Sync Configuration File Use
[GENERAL]
use_tmp_logging_file=false
Se você deseja usar o Frontend de depuração do QT para o alvo.
/proc/<pid>/maps Em alguns cenários, como depurar dispositivos incorporados sobre firmware serial ou bruto no Qemu, o GDB não está ciente do PID e não pode acessar /proc/<pid>/maps .
Nesses casos, a seção [INIT] é usada para passar um contexto personalizado para o plug -in. Permite substituir alguns campos, como os mapeamentos de PID e memória.
.sync Content Extract:
[INIT]
context = {
"pid": 200,
"mappings": [ [0x400000, 0x7A81158, 0x7681158, "asav941-200.qcow2|lina"] ]
}
Cada entrada nos mapeamentos é: mem_base , mem_end , mem_size , mem_name .
Em alguns cenários, como depuração de dispositivos incorporados ou conexão com interfaces de depuração minimalista, pode ser mais conveniente ignorar o recurso de rebase de endereço automático implementado nos plugins desmontadores.
A opção use_raw_addr é atualmente suportada apenas para Ghidra. No .Sync Configuration File Use:
[GENERAL]
use_raw_addr=true
A ramificação IDA 7.x é necessária. Para versões mais antigas (6.9x), consulte a liberação arquivada ida6.9x .
Para instalação da IDA, copie a pasta Syncplugin.py e retsync do diretório de plug -ins ext_ida para IDA, por exemplo:
C:Program FilesIDA Pro 7.4plugins%APPDATA%Hex-RaysIDA Proplugins~/.idapro/pluginsAlt-Shift-S ) ou 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 com a extensão da IDA, duas opções estão disponíveis no arquivo retsync/rsconfig.py :
LOG_LEVEL = logging.INFO
LOG_TO_FILE_ENABLE = False
Configurar LOG_LEVEL Value para logging.DEBUG torna o plug -in mais detalhado.
Configurar LOG_TO_FILE_ENABLE Value como True aciona o registro das informações de exceção de broker.py e dispatcher.py em arquivos dedicados. O arquivo de log é gerado na pasta %TMP% com um padrão de nome retsync.%s.err .
Use a versão pré-criada na pasta ext_ghidra/dist ou siga as instruções para construí-la. Cada compilação de extensão suporta apenas a versão do ghidra especificada no nome do arquivo do plug -in. Por exemplo, ghidra_9.1_PUBLIC_20191104_retsync.zip é para ghidra 9.1 público.
apt install gradle$GHIDRA_DIR pelo seu diretório de instalação) cd ext_ghidra
gradle -PGHIDRA_INSTALL_DIR= $GHIDRA_DIRFile -> Install Extensions... , clique no sinal + e selecione o ext_ghidra/dist/ghidra_*_retsync.zip e clique em OK. Isso extrairá efetivamente a pasta retsync do zip para $GHIDRA_DIR/Extensions/Ghidra/ [*] retsync init
[>] programOpened: tm.sys
imageBase: 0x1c0000000
Alt+s )/desativar ( Alt+Shift+s )/reiniciar ( Alt+r ) sincronização. Uma janela de status também está disponível no Windows -> RetSyncPlugin . Você geralmente deseja deixá -lo de lado para integrá -lo às janelas do ambiente Ghidra.
O suporte binário do Ninja é experimental, certifique -se de fazer backup de seus bancos de dados de análise.
O RET-Sync requer o Ninja Binária versão 2.2 no mínimo, bem como o Python 3 (o Python 2 não é suportado).
O RET-Sync ainda não foi distribuído pelo gerenciador de plug-in do Ninja binário; Uma instalação manual é necessária. Basta copiar esse conteúdo da pasta ext_bn na pasta plug -ins do Ninja binário, por exemplo:
%APPDATA%Binary Ninjaplugins
Depois de reiniciar o ninja binário, a seguinte saída deve estar presente na janela do console:
[sync] commands added
Loaded python3 plugin 'retsync'
Use binários pré-construídos ou use a solução Visual Studio 2017 fornecida em ext_windbg (consulte https://docs.microsoft.com/en-us/visualstudio/releasenotes/vs2017-relnotes, se necessário).
Isso criará o arquivo x64releasesync.dll .
Você precisará copiar o arquivo sync.dll resultante no caminho de extensão Windbg apropriado.
Para versões anteriores do windbg, isso é algo assim (tenha cuidado com os sabores x86 / x64 ), por exemplo
C:Program Files (x86)Windows Kits10Debuggersx64winextsync.dll
A pasta para armazenar extensão parece ser baseada no caminho, então você precisa colocá -lo em um dos locais consultados.
Um exemplo é colocá -lo aqui:
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 exemplo, na janela de saída 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
Se o módulo atual do Windbg corresponder ao nome do arquivo IDA
[sync] idb is enabled with the idb client matching the module name.
Nota: Se você receber o seguinte erro, é porque você não copiou o arquivo para a pasta correta nas etapas acima.
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.
O erro abaixo geralmente significa que o Windbg tentou carregar o sabor incorreto da extensão, ex: x64 no lugar do 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 a visualização do Windbg carrega os dois plugins ( x86 e x64 ) do mesmo diretório, pode -se renomear o arquivo x86 sync32.dll .
0:000> .load sync32
ext_gdb/sync.py para o diretório de sua escolha gdb> source sync.py
[sync] configuration file loaded 192.168.52.1:9100
[sync] commands added
O suporte do LLDB é experimental, no entanto:
~/.lldbinit ) lldb> command script import sync
O suporte de Ollydbg 1.10 é experimental, no entanto:
No entanto, o suporte a ollydbg2 é experimental:
Com base no testplugin, https://github.com/x64dbg/testplugin. O suporte x64dbg é experimental, no entanto:
pluginsdk " em " ext_x64dbgx64dbg_sync ".d32 ou .dp64 ) dentro do diretório de plug -in do X64DBG.Para depuradores orientados para a linha de comando (principalmente windbg e gdb), um conjunto de comandos é exposto pelo RET-Sync para ajudar na tarefa de engenharia reversa.
Os comandos abaixo são genéricos (WindBG e GDB), observe que A ! O prefixo é necessário no WindBG (por exemplo: sync no GDB !sync
| Comando depurador | Descrição |
|---|---|
synchelp | Exibir a lista de comandos disponíveis com explicação curta |
sync | Inicie a sincronização |
syncoff | Pare a sincronização |
cmt [-a address] <string> | Adicione um comentário no IP atual no desmontador |
rcmt [-a address] | Redefinir comentário no IP atual no desmontador |
fcmt [-a address] <string> | Adicione um comentário de função para função em que o IP atual está localizado |
raddr <expression> | Adicione um comentário com o endereço rebocado avaliado da expressão |
rln <expression> | Obtenha símbolo do desmontador para o endereço fornecido |
lbl [-a address] <string> | Adicione um nome de etiqueta no IP atual no desmontador |
cmd <string> | Execute um comando no depurador e adicione sua saída como comentário no IP atual em desmontagem |
bc <||on|off|set 0xBBGGRR> | Ativar/desativar a coloração do caminho em desmontagem |
idblist | Obtenha a lista de todos os clientes do BIB conectados ao despachante |
syncmodauto <on|off> | Habilitar/desativar o Switch automático desmontador com base no nome do módulo |
idbn <n> | Defina o IDB ativo para o enésimo cliente |
jmpto <expression> | |
jmpraw <expression> | Se um BID estiver ativado, a visão do desmontador será sincronizada com o endereço resultante. |
translate <base> <addr> <mod> | Refase um endereço em relação ao nome e deslocamento do módulo |
Comandos específicos do Windbg:
| Comando depurador | Descrição |
|---|---|
curmod | Módulo de exibição Infomação para o deslocamento atual da instrução (para solução de problemas) |
modlist | Lista de módulos aprimorados de Modules Modules de marcação de depurador (DML) destinada a uma troca ativa mais suave do BID |
idb <module name> | Defina o módulo dado como o IDB ativo (consulte a versão aprimorada modlist do lm ) |
modmap <base> <size> <name> | Um módulo sintético ("Faked") (definido usando seu endereço e tamanho base) é adicionado à lista interna do depurador |
modunmap <base> | Remova um módulo sintético mapeado anteriormente no endereço base |
modcheck <||md5> | Use para verificar se o módulo atual realmente corresponde ao arquivo do IDB (ex: o módulo foi atualizado) |
bpcmds <||save|load|> | wrapper bpcmds , salvar e recarregar .bpcmds (lista de comandos de pontos de interrupção) Saída para o IDB atual |
ks | Languagem de marcação do depurador (DML) Saída aprimorada do comando kv |
Comandos específicos do GDB:
| Comando depurador | Descrição |
|---|---|
bbt | Linda backtrace. Semelhante ao BT no GDB, mas solicita símbolos da Desmontingbler |
patch | Patch bytes no desmontador com base no contexto ao vivo |
bx | Semelhante ao GDB X , mas usando um símbolo. O símbolo será resolvido pelo desmontador |
cc | Continue a cursor em desmontagem |
O campo de entrada Overwrite idb name deve alterar o nome do IDB padrão. É o nome usado pelo plug -in para se registrar no despachante. O interruptor automático do IDB é baseado na correspondência do nome do módulo. No caso de nomes conflitantes (como um foo.exe e foo.dll ), isso pode ser usado para facilitar a correspondência. Observe que, se você modificar o campo de entrada enquanto a sincronização estiver ativa, precisará se registrar novamente com o despachante; Isso pode ser feito simplesmente usando o botão " Restart ".
Como lembrete, é possível alias por padrão usando o arquivo de configuração .sync .
RET-Sync define esses atalhos globais em Ida:
Alt-Shift-S -Execute o plug-in Ret-SyncCtrl-Shift-S -TOLGLE GLOBAL SYNINGCtrl-H -Alternar os raios hexáticos sincronizadosDois botões também estão disponíveis na barra de ferramentas de depuração para alternar a sincronização global e hexadecimal.
Syncplugin.py também registra HotSkeys Wrapper Command Wrapper.
F2 - Defina ponto de interrupção no endereço do cursorF3 - Defina um ponto de interrupção de um tiro no endereço do cursorCtrl-F2 - Definir ponto de interrupção do hardware no endereço do cursorCtrl-F3 -Defina o ponto de interrupção de hardware de um tiro no endereço do cursorAlt-F2 - TRANSTOR (Rebase in Debugger) Endereço do cursor atualAlt-F5 - VáCtrl-Alt-F5 -Run (somente GDB)F10 - Etapa únicaF11 - Rastreio únicoEsses comandos estão disponíveis apenas quando o IDB atual está ativo. Quando possível, eles também foram implementados para outros depuradores.
Depois que a retsyncplugin foi aberta, você poderá adicioná -la à janela Codebrowser by Simple Drag'n'drop:

Se você deseja visualizar vários módulos, os arquivos precisam estar abertos no mesmo visualizador de código de código, basta arrastar os adicionais na janela Codebrowser para obter o resultado como acima.
RET-Sync define esses atalhos globais em Ghidra:
Alt-S - Ativar sincronizaçãoAlt-Shift-S -Desativar sincronizarAlt-R - Reiniciar a sincronizaçãoAlt-Shift-R -Recarregar ConfiguraçãoAs ligações sobre os comandos do depurador também são implementadas. Eles são semelhantes aos da extensão da IDA (exceto o comando "Go").
F2 - Defina ponto de interrupção no endereço do cursorCtrl-F2 - Definir ponto de interrupção do hardware no endereço do cursorAlt-F3 -Defina um ponto de interrupção de um tiro no endereço do cursorCtrl-F3 -Defina o ponto de interrupção de hardware de um tiro no endereço do cursorAlt-F2 - TRANSTOR (Rebase in Debugger) Endereço do cursor atualF5 - VáAlt-F5 - RUN (apenas GDB)F10 - Etapa únicaF11 - Rastreio único RET-Sync define esses atalhos globais no ninja binário:
Alt-S - Ativar sincronizaçãoAlt-Shift-S -Desativar sincronizarAs ligações sobre os comandos do depurador também são implementadas. Eles são semelhantes aos da extensão de Ida.
F2 - Defina ponto de interrupção no endereço do cursorCtrl-F2 - Definir ponto de interrupção do hardware no endereço do cursorAlt-F3 -Defina um ponto de interrupção de um tiro no endereço do cursorCtrl-F3 -Defina o ponto de interrupção de hardware de um tiro no endereço do cursorAlt-F2 - TRANSTOR (Rebase in Debugger) Endereço do cursor atualAlt-F5 - VáF10 - Etapa únicaF11 - Rastreio ú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: Chamando este comando sem argumento redefinir o comentário da função.
[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
Neste exemplo, o cliente atual do IDB ativo teria sido definido como:
[0] target.exe.
Alt-F2 ), rebate um endereço em relação ao nome e deslocamento do módulo. ! CMT ,! RCMT e ! Comandos FCMT suportam uma opção de endereço opcional: -a ou --address . O endereço deve ser aprovado como um valor hexadecimal. A análise de comando é baseada no módulo argparse do Python. Para interromper o uso da análise de linha -- .
[WinDbg]
0:000:x86> !cmt -a 0x430DB2 comment
O endereço deve ser o endereço de uma instrução válida.
Sincronizar com o 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, sem "!" prefixo
(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 definir um ponto de interrupção de um tiro e F5 para continuar. Isso é útil se você preferir fazê -lo no 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 )/desativar ( Alt+u ) Sincronização. Ctrl+s )/desativar a sincronização ( Ctrl+u ).Devido ao status beta da API Ollydbg2, apenas os seguintes recursos foram implementados:
F7 ; F8 para pisar]CTRL+; ]CTRL+: ] Use o menu Plugins ou comandos Atable (" !sync" ) ou desativar (" !syncoff ") Sincronização.
Use 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: Usando o comando ! Translate de um desmontador (IDA/ghidra, atalho Alt-F2 ), fará com que a janela desmontadora "pular" para o endereço específico (equivalente à execução da Disasm na linha de comando x64dbg).
Pode-se querer usar os recursos do núcleo RET-Sync (sincronização de posição com uma resolução de símbolos desmontadores), mesmo que um ambiente de depuração completo não esteja disponível ou com uma ferramenta personalizada. Para esse fim, uma biblioteca minimalista de Python foi extraída.
O exemplo abaixo ilustra o uso da biblioteca Python com um script que percorre a saída de uma ferramenta de log/rastreamento baseada em 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 ()Embora inicialmente focado na análise dinâmica (depuradores), é claro que é possível estender o conjunto de plugins e integrar-se a outras ferramentas.
Outros recursos:
Com GDB:
Com Windbg:
g '). Isso pode causar uma grande desaceleração se houver muito desses eventos. Uma correção limitada foi implementada, a melhor solução ainda é sincronizar temporariamente.Com ghidra:
Com Ida:
Conflitos:
.sync global para definir uma porta diferente. [INTERFACE]
host=127.0.0.1
port=9234
RET-SYNC é um software gratuito: você pode redistribuí-lo e/ou modificá-lo nos termos da licença pública geral da GNU, conforme publicado pela Free Software Foundation, versão 3 da licença ou (por sua opção) qualquer versão posterior.
Este programa é distribuído na esperança de que seja útil, mas sem garantia; sem a garantia implícita de comercialização ou aptidão para uma finalidade específica. Veja a licença pública geral da GNU para obter mais detalhes.
Você deveria ter recebido uma cópia da licença pública geral da GNU junto com este programa. Caso contrário, consulte http://www.gnu.org/license/.
O plugin binário ninja é liberado sob a licença do MIT.
Saudes de Bruce Dang, Stalkr, @Ivanlef0u, Damien Aumaître, Sébastien Renaud e Kévin Szkudlapski, @ M00DY , @Saidelike, Xavier Mehrenberger, Ben64, Raphaël Rigo, Jiss por sua bondade, ajuda, feedbacks e pensamentos. Ilfak Guilfanov, Igor Skochinsky e Arnaud Dieren por sua ajuda com os internos e o excelente apoio de Ida. Obrigado a Jordan Wiens e Vector 35. Finalmente, obrigado também a todos os colaboradores e a todos que relataram problemas/bugs.