TCP-JSON-Bridge-Server für IDA Pro und Ghidra, die Dekompilierung, Xrefs, Symbole, Vtables, RTTI und Speicher-Patching für externe Skripte und automatisierte Pipelines bereitstellen.
Leichtgewichtige TCP-JSON-Bridge-Server für IDA Pro und Ghidra, die Reverse-Engineering-Workflows über ein einfaches Socket-Protokoll bereitstellen.
Ermöglicht externen Tools, CLI-Skripten, Python-Utilities und automatisierten Pipelines, Dekompilierung, Xrefs, Symbole, virtuelle Tabellen, RTTI, Strukturen und Patch-Speicher abzufragen, ohne manuelle GUI-Interaktion.
Bei der Arbeit an großen Reverse-Engineering-Projekten mit mehreren gleichzeitig geöffneten Binärdateien (z. B. Spiel-Client, Launcher, DLL-Proxys und Stubs gleichzeitig):
BASE_PORT = 5073 und probiert automatisch sequenzielle Ports (5073, 5074, 5075, 5076...) durch, bis er einen verfügbaren findet.In IDA Pro bleibt der Python-Interpreter über mehrere Skriptausführungen hinweg am Leben:
ID_Server.py registriert das laufende Server-Handle in builtins._ida_bridge_prev.stop() auf der vorherigen Instanz auf und joint deren Thread (join(3.0)), wodurch der Port sauber freigegeben wird, bevor der neue Server gestartet wird.Address already in use oder verwaiste Threads durch erneutes Ausführen des Skripts.QUIT, STOP, EXIT oder SHUTDOWN über die Verbindung. Der Server bestätigt mit {"ok": true, "shutdown": true} und schließt sofort.ida_bridge_stop() direkt aus der IDA Python CLI auf, oder schließen Sie einfach IDA (Daemon-Threads beenden sich automatisch).is_cancelled() wird jede Sekunde über Socket-Timeout geprüft), oder senden Sie QUIT..idb / .i64) in IDA Pro.File -> Script file... / Alt+F7) aus:
import ID_Server
127.0.0.1:5073 (oder dem nächsten verfügbaren Port).ida_bridge_stop()
Window -> Script Manager) den Ordner hinzu, der Ghidra_Server.py enthält, oder führen Sie es direkt im Python-Interpreter aus.127.0.0.1:5073 (oder den nächsten freien Port).Befehle sind einfache, durch Zeilenumbrüche getrennte Strings, die über TCP (127.0.0.1:<PORT>) gesendet werden. Der Server antwortet mit einem JSON-Objekt (oder tabulatorgetrenntem Text für Legacy-Befehle).
| Befehl | Syntax | Beschreibung |
|---|---|---|
PING | PING | Health-Check. Gibt "pong" zurück. |
CURRENT | CURRENT | Gibt die aktuelle Cursor-Adresse, den Funktionsnamen, die Größe, Assembly-Anweisungen und den dekompilierten Code zurück. |
NAME | NAME <ea> | Gibt den an <ea> definierten Symbol-/Funktionsnamen zurück. |
FUNC | FUNC <addr> | Gibt vollständige Funktionsmetadaten, Einstiegspunkt, Größe, Signatur, Assembly und Hex-Rays/Ghidra-Dekompilierung zurück. |
DECOMP | DECOMP <addr> | Alias für FUNC. Dekompiliert die Zielfunktion. |
DISASM | DISASM <ea> [n] | Gibt Disassembly-Zeilen für [n] Anweisungen ab <ea> zurück (Standard: 40). |
FIND | FIND <substr> | Groß-/Kleinschreibungsunabhängige Suche über alle Symbole und Funktionsnamen, die <substr> entsprechen (bis zu 300 Treffer). |
EXPORT | EXPORT [path] | Exportiert alle nicht-Dummy-Symbole, gemangelte und demangelte Namen in eine Textdatei (Standard: C:\Contexto\ida_names.txt). |
HELP | HELP | Gibt eine JSON-Liste aller vom Server unterstützten Befehle zurück. |
QUIT | QUIT | Schließt die Client-Verbindung sauber und stoppt den Bridge-Server-Socket. |
| Befehl | Syntax | Beschreibung |
|---|---|---|
XREF | XREF <addr> | Listet alle eingehenden Querverweise (Code-Aufrufe, Datenlese-/Schreibzugriffe) auf, die auf <addr> abzielen. |
XFROM | XFROM <addr> | Listet alle ausgehenden Querverweise auf, die von <addr> ausgehen. |
CALLERS | CALLERS <addr> | Filtert eingehende Referenzen, um nur Aufrufstellen zurückzugeben (einschließlich aufgelöster indirekter Aufrufe). |
READERS | READERS <addr> | Filtert eingehende Referenzen, um nur Anweisungen zurückzugeben, die von <addr> lesen. |
WRITERS | WRITERS <addr> | Filtert eingehende Referenzen, um nur Anweisungen zurückzugeben, die auf <addr> schreiben. |
DECOMP_XREF | DECOMP_XREF <addr> | Batch-dekompiliert jede aufrufende Funktion von <addr> in einer einzigen Anfrage. |
IMPORTXREF | IMPORTXREF <name> | Findet alle Aufrufstellen im gesamten Binary für eine importierte Windows-/C-API (z. B. IMPORTXREF WSASendTo). |
TRACE | TRACE <addr> | Verfolgt den Ausführungsfluss und die Basisblöcke um <addr>. |
| Befehl | Syntax | Beschreibung |
|---|---|---|
READPTR | READPTR <addr> [count] | Liest Speicher als Zeigerketten (32-Bit oder 64-Bit) und klassifiziert jedes Ziel (func, string, vtable). |
FINDPTR | FINDPTR <addr> | Durchsucht globale Daten und Tabellen, um jeden Zeiger zu finden, der auf <addr> verweist (findet vtables, Dispatch-Tabellen). |
STRUCT | STRUCT <addr> [n] | Gibt heuristisch zusammenhängenden Speicher aus und interpretiert Felder als Ints, Floats, Zeiger und Strings. |
DEFSTRUCT | DEFSTRUCT <name> [size] | Erstellt eine neue benannte Struktur in der Datenbank-Typbibliothek. |
SETFIELD | SETFIELD <struct> <off> <type> [name] | Definiert oder ändert ein Strukturfeld bei <off> mit <type> und optionalem Feldnamen. |
MKPTRS | MKPTRS <addr> [count] | Konvertiert rohe Datenbankbytes in großen Mengen in typisierte Zeiger. |
NEARSTR | NEARSTR <addr> | Findet String-Referenzen in der Nähe in Code- oder Datensegmenten innerhalb des Bereichs. |
| Befehl | Syntax | Beschreibung |
|---|---|---|
VTABLE | VTABLE <funcaddr> | Identifiziert, welche virtuellen Tabellen <funcaddr> enthalten, einschließlich benachbarter Methoden-Slots. |
VTDUMP | VTDUMP <addr> [count] | Gibt eine gesamte virtuelle Tabelle aus: löst jeden Slot zu seinem Methodennamen, Offset und Index auf. |
RTTI | RTTI <addr|Name> | Durchläuft MSVC C++ RTTI-Strukturen (TypeDescriptor -> CompleteObjectLocator -> vftable), um Klassenhierarchien und Basisklassen aufzulösen. |
| Befehl | Syntax | Beschreibung |
|---|---|---|
STR | STR <ascii> | Sucht nach ASCII-Strings über alle geladenen Segmente. |
WSTR | WSTR <utf16> | Sucht nach UTF-16-Wide-Strings über alle geladenen Segmente. |
BYTES | BYTES <hex> | Sucht nach rohen Opcode- oder Datenbyte-Sequenzen (z. B. BYTES 55 8B EC 83 EC). |