Server bridge JSON TCP per IDA Pro e Ghidra che espongono decompilazione, xref, simboli, vtable, RTTI e patching della memoria a script esterni e pipeline automatizzate.
Server bridge TCP JSON leggeri per IDA Pro e Ghidra che espongono flussi di lavoro di reverse engineering tramite un semplice protocollo socket.
Consente a strumenti esterni, script CLI, utility Python e pipeline automatizzate di interrogare decompilazione, xref, simboli, tabelle virtuali, RTTI, strutture e patch di memoria senza interazione manuale con la GUI.
Quando si lavora su grandi progetti di reversing con più binari aperti contemporaneamente (ad esempio client di gioco, launcher, proxy DLL e stub simultaneamente):
BASE_PORT = 5073 e sonda automaticamente le porte sequenziali (5073, 5074, 5075, 5076...) finché non ne trova una disponibile.In IDA Pro, l'interprete Python rimane attivo attraverso più esecuzioni di script:
ID_Server.py registra l'handle del server in esecuzione in builtins._ida_bridge_prev.stop() sull'istanza precedente e viene effettuato il join del suo thread (join(3.0)), rilasciando in modo pulito la porta prima di avviare il nuovo server.Address already in use né thread orfani a causa della riesecuzione dello script.QUIT, STOP, EXIT o SHUTDOWN attraverso la connessione. Il server conferma con {"ok": true, "shutdown": true} e si chiude immediatamente.ida_bridge_stop() direttamente dalla CLI Python di IDA, oppure chiudi semplicemente IDA (i thread daemon terminano automaticamente).is_cancelled() viene verificato ogni 1s tramite timeout del socket), oppure invia QUIT..idb / .i64) in IDA Pro.File -> Script file... / Alt+F7), esegui:
import ID_Server
127.0.0.1:5073 (o sulla porta successiva disponibile).ida_bridge_stop()
Window -> Script Manager), aggiungi la cartella contenente Ghidra_Server.py oppure eseguilo direttamente nell'interprete Python.127.0.0.1:5073 (o alla successiva porta libera).I comandi sono stringhe semplici delimitate da newline inviate su TCP (127.0.0.1:<PORT>). Il server risponde con un oggetto JSON (o testo delimitato da tabulazioni per i comandi legacy).
| Comando | Sintassi | Descrizione |
|---|---|---|
PING | PING | Controllo di stato. Restituisce "pong". |
CURRENT | CURRENT | Restituisce l'indirizzo corrente del cursore, il nome della funzione, la dimensione, le istruzioni assembly e il codice decompilato. |
NAME | NAME <ea> | Restituisce il nome del simbolo/funzione definito in <ea>. |
FUNC | FUNC <addr> | Restituisce i metadati completi della funzione, il punto di ingresso, la dimensione, la firma, l'assembly e la decompilazione Hex-Rays/Ghidra. |
DECOMP | DECOMP <addr> | Alias di FUNC. Decompila la funzione di destinazione. |
DISASM | DISASM <ea> [n] | Restituisce le righe di disassembly per [n] istruzioni a partire da <ea> (predefinito: 40). |
FIND | FIND <substr> | Ricerca case-insensitive su tutti i simboli e i nomi di funzione corrispondenti a <substr> (fino a 300 corrispondenze). |
EXPORT | EXPORT [path] | Esporta tutti i simboli non dummy, i nomi mangled e demangled in un file di testo (predefinito: C:\Contexto\ida_names.txt). |
HELP | HELP | Restituisce un elenco JSON di tutti i comandi disponibili supportati dal server. |
QUIT | QUIT | Chiude in modo controllato la connessione client e arresta il socket del server bridge. |
| Comando | Sintassi | Descrizione |
|---|---|---|
XREF | XREF <addr> | Elenca tutti i cross-reference in ingresso (chiamate di codice, letture/scritture di dati) che puntano a <addr>. |
XFROM | XFROM <addr> | Elenca tutti i cross-reference in uscita che hanno origine da <addr>. |
CALLERS | CALLERS <addr> | Filtra i riferimenti in ingresso per restituire solo i call site (incluse le chiamate indirette risolte). |
READERS | READERS <addr> | Filtra i riferimenti in ingresso per restituire solo le istruzioni che leggono da <addr>. |
WRITERS | WRITERS <addr> | Filtra i riferimenti in ingresso per restituire solo le istruzioni che scrivono in <addr>. |
DECOMP_XREF | DECOMP_XREF <addr> | Decompila in batch ogni funzione chiamante di <addr> in un'unica richiesta. |
IMPORTXREF | IMPORTXREF <name> | Individua tutti i call site in tutto il binario per un'API Windows/C importata (ad esempio IMPORTXREF WSASendTo). |
TRACE | TRACE <addr> | Traccia il flusso di esecuzione e i basic block circostanti <addr>. |
| Comando | Sintassi | Descrizione |
|---|---|---|
READPTR | READPTR <addr> [count] | Legge la memoria come catene di puntatori (32-bit o 64-bit) e classifica ciascun target (func, string, vtable). |
FINDPTR | FINDPTR <addr> | Scansiona dati globali e tabelle per trovare qualsiasi puntatore che referenzia <addr> (trova vtable, dispatch table). |
STRUCT | STRUCT <addr> [n] | Esegue un dump euristico della memoria contigua interpretando i campi come int, float, puntatori e stringhe. |
DEFSTRUCT | DEFSTRUCT <name> [size] | Crea una nuova struttura denominata nella libreria dei tipi del database. |
SETFIELD | SETFIELD <struct> <off> <type> [name] | Definisce o modifica un campo della struttura in <off> con <type> e nome del campo opzionale. |
MKPTRS | MKPTRS <addr> [count] | Converte in blocco i byte grezzi del database in puntatori tipizzati. |
NEARSTR | NEARSTR <addr> | Trova riferimenti a stringhe situati nelle vicinanze in sezioni di codice o dati entro un certo intervallo. |
| Comando | Sintassi | Descrizione |
|---|---|---|
VTABLE | VTABLE <funcaddr> | Identifica quali tabelle virtuali contengono <funcaddr>, inclusi gli slot dei metodi adiacenti. |
VTDUMP | VTDUMP <addr> [count] | Esegue il dump di un'intera tabella virtuale: risolve ogni slot nel suo nome di metodo, offset e indice. |
RTTI | RTTI <addr|Name> | Attraversa le strutture RTTI C++ MSVC (TypeDescriptor -> CompleteObjectLocator -> vftable) per risolvere gerarchie di classi e classi base. |
| Comando | Sintassi | Descrizione |
|---|---|---|
STR | STR <ascii> | Cerca stringhe ASCII in tutti i segmenti caricati. |
WSTR | WSTR <utf16> | Cerca stringhe wide UTF-16 in tutti i segmenti caricati. |
BYTES | BYTES <hex> | Cerca sequenze grezze di opcode o byte di dati (ad esempio BYTES 55 8B EC 83 EC). |