
ret-sync é um conjunto de plugins que ajuda a sincronizar uma sessão de depuração (WinDbg/GDB/LLDB/OllyDbg2/x64dbg) com desmontadores IDA/Ghidra/Binary Ninja.
ret-sync significa "Reverse-Engineering Tools SYNChronization". É um conjunto de plugins que ajudam a sincronizar uma sessão de depuração (WinDbg/GDB/LLDB/OllyDbg/OllyDbg2/x64dbg) com um desassemblador (IDA/Ghidra/Binary Ninja). A ideia subjacente é simples: aproveitar o melhor dos dois mundos (análise estática e dinâmica).
Depuradores e análise dinâmica nos fornecem:
!peb, !drvobj do WinDbg,
!address, etc.)Desassembladores e análise estática nos fornecem:
Principais recursos:
ret-sync é um fork do qb-sync que desenvolvi e mantive durante minha estadia no Quarkslab.
Os plugins do depurador:
ext_windbg/sync: arquivos fonte da extensão WinDbg, quando compilada: sync.dllext_gdb/sync.py: plugin GDBext_lldb/sync.py: plugin LLDBext_olly1: plugin OllyDbg 1.10ext_olly2: plugin OllyDbg v2ext_x64dbg: plugin x64dbgOs plugins do desassemblador:
ext_ida/SyncPlugin.pyext_ghidra/dist/ghidra_*_retsync.zip: plugin Ghidraext_bn/retsync: plugin Binary 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.
Binários pré-compilados para os depuradores WinDbg/OllyDbg/OllyDbg2/x64dbg são fornecidos
através de um pipeline Azure DevOps:
Selecione a última compilação e verifique os artefatos na seção Related: 6 published.

Um arquivo pré-compilado do plugin Ghidra é fornecido em ext_ghidra/dist.
ret-sync deve funcionar imediatamente para a maioria dos usuários com uma configuração típica: depurador e desassemblador(s) na mesma máquina, nomes de módulo correspondentes.
Ainda assim, em alguns cenários uma configuração específica pode ser usada. Para isso,
as extensões e plugins verificam um arquivo de configuração global opcional chamado
.sync no diretório pessoal do usuário. Deve ser um arquivo .INI válido.
Além disso, os plugins IDA e Ghidra também procuram pelo arquivo de configuração
no diretório do IDB ou do 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 é ignorado.
Os valores declarados nesses arquivos de configuração substituem os valores padrão. Por favor,
note que nenhum arquivo .sync é criado por padrão.
Abaixo detalhamos três cenários comuns onde um arquivo de configuração é útil/necessário:
A seção [INTERFACE] é usada para personalizar configurações relacionadas à rede.
Vamos supor que alguém queira sincronizar IDA com um depurador rodando dentro de
uma máquina virtual (ou simplesmente outro host), cenário comum de depuração remota do kernel.
Simplesmente crie dois arquivos .sync:
Ele informa o plugin **ret-sync** do ``IDA`` para escutar na interface ``192.168.128.1`` com a porta ``9234``. É óbvio que essa interface deve estar acessível a partir do host remoto ou da máquina virtual.
* um na máquina onde o depurador é executado, no diretório home do usuário:```
[INTERFACE]
host=192.168.128.1
port=9234
Ele instrui o plugin de depurador ret-sync a conectar-se ao plugin IDA ret-sync configurado anteriormente para escutar nesta 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 múltiplas fontes tanto para vinculação quanto para conexão, então usar 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 em seu despachante/gerenciador de programas.
Por padrão, os plugins do desmontador usam o nome do arquivo de entrada. No entanto, pode-se ter renomeado o arquivo anteriormente e ele não corresponde mais ao nome do processo real ou 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 IDB).
## gdb with Qt Creator debugging frontend
O frontend de depuração do Qt Creator altera a forma como a saída do comando gdb é registrada. Como isso interferiria na sincronização, existe uma opção para usar a saída bruta do gdb para sincronização em vez de um arquivo temporário. No arquivo de configuração .sync, use```
[GENERAL]
use_tmp_logging_file=false
se deseja usar o frontend de depuração Qt para o alvo.
/proc/<pid>/mapsEm alguns cenários, como depuração de dispositivos embarcados via serial ou firmware bruto no QEMU, o gdb não tem conhecimento do PID e não consegue acessar /proc/<pid>/maps.