Servidores de ponte JSON TCP para IDA Pro e Ghidra, expondo descompilação, referências cruzadas, símbolos, vtables, RTTI e patch de memória para scripts externos e pipelines automatizados.
Servidores de ponte TCP JSON leves para IDA Pro e Ghidra que expõem fluxos de trabalho de engenharia reversa através de um protocolo de socket simples.
Permite que ferramentas externas, scripts CLI, utilitários Python e pipelines automatizados consultem descompilação, xrefs, símbolos, tabelas virtuais, RTTI, estruturas e memória de patch sem interação manual com a GUI.
Ao trabalhar em grandes projetos de engenharia reversa com vários binários abertos ao mesmo tempo (por exemplo, cliente de jogo, launcher, proxies DLL e stubs simultaneamente):
BASE_PORT = 5073 e sonda automaticamente portas sequenciais (5073, 5074, 5075, 5076...) até encontrar uma disponível.No IDA Pro, o interpretador Python permanece ativo entre múltiplas execuções de scripts:
ID_Server.py registra o handle do servidor em execução em builtins._ida_bridge_prev.stop() na instância anterior e aguarda sua thread (join(3.0)), liberando a porta de forma limpa antes de iniciar o novo servidor.Address already in use ou threads órfãs ao reexecutar o script.QUIT, STOP, EXIT ou SHUTDOWN pela conexão. O servidor confirma com {"ok": true, "shutdown": true} e fecha imediatamente.ida_bridge_stop() diretamente da CLI Python do IDA, ou simplesmente feche o IDA (threads daemon encerram automaticamente).is_cancelled() é verificado a cada 1s via timeout do socket), ou envie QUIT..idb / .i64) no IDA Pro.File -> Script file... / Alt+F7), execute:
import ID_Server
127.0.0.1:5073 (ou na próxima porta disponível).ida_bridge_stop()
Window -> Script Manager), adicione a pasta que contém Ghidra_Server.py ou execute-o diretamente no interpretador Python.127.0.0.1:5073 (ou próxima porta livre).Os comandos são strings simples delimitadas por nova linha enviadas via TCP (127.0.0.1:<PORT>). O servidor responde com um objeto JSON (ou texto delimitado por tabulação para comandos legados).
| Comando | Sintaxe | Descrição |
|---|---|---|
PING | PING | Verificação de saúde. Retorna "pong". |
CURRENT | CURRENT | Retorna o endereço atual do cursor, nome da função, tamanho, instruções de assembly e código descompilado. |
NAME | NAME <ea> | Retorna o nome do símbolo/função definido em <ea>. |
FUNC | FUNC <addr> | Retorna metadados completos da função, ponto de entrada, tamanho, assinatura, assembly e descompilação Hex-Rays/Ghidra. |
DECOMP | DECOMP <addr> | Alias para FUNC. Descompila a função alvo. |
DISASM | DISASM <ea> [n] | Retorna linhas de desmontagem para [n] instruções a partir de <ea> (padrão: 40). |
FIND | FIND <substr> | Busca sem distinção de maiúsculas/minúsculas em todos os símbolos e nomes de funções que correspondem a <substr> (até 300 correspondências). |
EXPORT | EXPORT [path] | Exporta todos os símbolos não-dummy, nomes mangled e demangled para um arquivo de texto (padrão: C:\Contexto\ida_names.txt). |
HELP | HELP | Retorna uma lista JSON de todos os comandos disponíveis suportados pelo servidor. |
QUIT | QUIT | Fecha graciosamente a conexão do cliente e para o socket do servidor bridge. |
| Comando | Sintaxe | Descrição |
|---|---|---|
XREF | XREF <addr> | Lista todas as referências cruzadas de entrada (chamadas de código, leituras/escritas de dados) direcionadas a <addr>. |
XFROM | XFROM <addr> | Lista todas as referências cruzadas de saída originadas de <addr>. |
CALLERS | CALLERS <addr> | Filtra referências de entrada para retornar apenas locais de chamada (incluindo chamadas indiretas resolvidas). |
READERS | READERS <addr> | Filtra referências de entrada para retornar apenas instruções que leem de <addr>. |
WRITERS | WRITERS <addr> | Filtra referências de entrada para retornar apenas instruções que escrevem em <addr>. |
DECOMP_XREF | DECOMP_XREF <addr> | Descompila em lote todas as funções chamadoras de <addr> em uma única requisição. |
IMPORTXREF | IMPORTXREF <name> | Localiza todos os locais de chamada em todo o binário para uma API importada do Windows/C (por exemplo, IMPORTXREF WSASendTo). |
TRACE | TRACE <addr> | Rastreia o fluxo de execução e blocos básicos ao redor de <addr>. |
| Comando | Sintaxe | Descrição |
|---|---|---|
READPTR | READPTR <addr> [count] | Lê a memória como cadeias de ponteiros (32-bit ou 64-bit) e classifica cada alvo (func, string, vtable). |
FINDPTR | FINDPTR <addr> | Varre dados globais e tabelas para encontrar qualquer ponteiro que referencie <addr> (encontra vtables, tabelas de despacho). |
STRUCT | STRUCT <addr> [n] | Despeja heuristicamente memória contígua interpretando campos como ints, floats, ponteiros e strings. |
DEFSTRUCT | DEFSTRUCT <name> [size] | Cria uma nova estrutura nomeada na biblioteca de tipos do banco de dados. |
SETFIELD | SETFIELD <struct> <off> <type> [name] | Define ou modifica um campo de estrutura em <off> com <type> e nome de campo opcional. |
MKPTRS | MKPTRS <addr> [count] | Converte bytes brutos do banco de dados em ponteiros tipados em massa. |
NEARSTR | NEARSTR <addr> | Encontra referências de string localizadas nas proximidades em seções de código ou dados dentro do alcance. |
| Comando | Sintaxe | Descrição |
|---|---|---|
VTABLE | VTABLE <funcaddr> | Identifica quais tabelas virtuais contêm <funcaddr>, incluindo slots de métodos vizinhos. |
VTDUMP | VTDUMP <addr> [count] | Despeja uma tabela virtual inteira: resolve cada slot para seu nome de método, offset e índice. |
RTTI | RTTI <addr|Name> | Percorre estruturas RTTI do MSVC C++ (TypeDescriptor -> CompleteObjectLocator -> vftable) para resolver hierarquias de classes e classes base. |
| Comando | Sintaxe | Descrição |
|---|---|---|
STR | STR <ascii> | Busca strings ASCII em todos os segmentos carregados. |
WSTR | WSTR <utf16> | Busca strings largas UTF-16 em todos os segmentos carregados. |
BYTES | BYTES <hex> | Busca sequências brutas de opcodes ou bytes de dados (por exemplo, BYTES 55 8B EC 83 EC). |