Serveurs de pont JSON TCP pour IDA Pro et Ghidra exposant la décompilation, les références croisées, les symboles, les vtables, le RTTI et le patch mémoire à des scripts externes et des pipelines automatisés.
Serveurs passerelles TCP JSON légers pour IDA Pro et Ghidra qui exposent des workflows de reverse engineering via un protocole socket simple.
Permet à des outils externes, scripts CLI, utilitaires Python et pipelines automatisés d'interroger la décompilation, les xrefs, les symboles, les tables virtuelles, le RTTI, les structures et la mémoire patchée sans interaction manuelle avec l'interface graphique.
Lorsque vous travaillez sur de gros projets de reverse engineering avec plusieurs binaires ouverts en même temps (par exemple client de jeu, launcher, proxys DLL et stubs simultanément) :
BASE_PORT = 5073 et sonde automatiquement les ports séquentiels (5073, 5074, 5075, 5076...) jusqu'à en trouver un disponible.Dans IDA Pro, l'interpréteur Python reste actif à travers plusieurs exécutions de scripts :
ID_Server.py enregistre le handle du serveur en cours dans builtins._ida_bridge_prev.stop() sur l'instance précédente et joint son thread (join(3.0)), libérant proprement le port avant de démarrer le nouveau serveur.Address already in use ni de threads orphelins en ré-exécutant le script.QUIT, STOP, EXIT ou SHUTDOWN à travers la connexion. Le serveur confirme avec {"ok": true, "shutdown": true} et se ferme immédiatement.ida_bridge_stop() directement depuis la CLI Python d'IDA, ou fermez simplement IDA (les threads daemon se terminent automatiquement).is_cancelled() est vérifié toutes les 1s via le timeout du socket), ou envoyez QUIT..idb / .i64) dans IDA Pro.File -> Script file... / Alt+F7), exécutez :
import ID_Server
127.0.0.1:5073 (ou le port disponible suivant).ida_bridge_stop()
Window -> Script Manager), ajoutez le dossier contenant Ghidra_Server.py ou exécutez-le directement dans l'interpréteur Python.127.0.0.1:5073 (ou le prochain port libre).Les commandes sont de simples chaînes délimitées par des retours à la ligne, envoyées via TCP (127.0.0.1:<PORT>). Le serveur répond avec un objet JSON (ou du texte délimité par des tabulations pour les commandes héritées).
| Commande | Syntaxe | Description |
|---|---|---|
PING | PING | Vérification de l'état. Retourne "pong". |
CURRENT | CURRENT | Retourne l'adresse du curseur actuel, le nom de la fonction, sa taille, les instructions assembleur et le code décompilé. |
NAME | NAME <ea> | Retourne le nom du symbole/de la fonction défini à <ea>. |
FUNC | FUNC <addr> | Retourne les métadonnées complètes de la fonction, le point d'entrée, la taille, la signature, l'assembleur et la décompilation Hex-Rays/Ghidra. |
DECOMP | DECOMP <addr> | Alias de FUNC. Décompile la fonction cible. |
DISASM | DISASM <ea> [n] | Retourne les lignes de désassemblage pour [n] instructions à partir de <ea> (par défaut : 40). |
FIND | FIND <substr> | Recherche insensible à la casse dans tous les symboles et noms de fonctions correspondant à <substr> (jusqu'à 300 correspondances). |
EXPORT | EXPORT [path] | Exporte tous les symboles non factices, noms mangled et demangled vers un fichier texte (par défaut : C:\Contexto\ida_names.txt). |
HELP | HELP | Retourne une liste JSON de toutes les commandes disponibles supportées par le serveur. |
QUIT | QUIT | Ferme gracieusement la connexion client et arrête le socket du serveur passerelle. |
| Commande | Syntaxe | Description |
|---|---|---|
XREF | XREF <addr> | Liste toutes les références croisées entrantes (appels de code, lectures/écritures de données) ciblant <addr>. |
XFROM | XFROM <addr> | Liste toutes les références croisées sortantes provenant de <addr>. |
CALLERS | CALLERS <addr> | Filtre les références entrantes pour retourner uniquement les sites d'appel (y compris les appels indirects résolus). |
READERS | READERS <addr> | Filtre les références entrantes pour retourner uniquement les instructions qui lisent depuis <addr>. |
WRITERS | WRITERS <addr> | Filtre les références entrantes pour retourner uniquement les instructions qui écrivent vers <addr>. |
DECOMP_XREF | DECOMP_XREF <addr> | Décompile par lots chaque fonction appelante de <addr> en une seule requête. |
IMPORTXREF | IMPORTXREF <name> | Localise tous les sites d'appel dans tout le binaire pour une API Windows/C importée (par ex. IMPORTXREF WSASendTo). |
TRACE | TRACE <addr> | Trace le flux d'exécution et les blocs de base autour de <addr>. |
| Commande | Syntaxe | Description |
|---|---|---|
READPTR | READPTR <addr> [count] | Lit la mémoire sous forme de chaînes de pointeurs (32 bits ou 64 bits) et classe chaque cible (func, string, vtable). |
FINDPTR | FINDPTR <addr> | Scanne les données globales et les tables pour trouver tout pointeur référençant <addr> (trouve les vtables, tables de dispatch). |
STRUCT | STRUCT <addr> [n] | Dumpe heuristiquement la mémoire contiguë en interprétant les champs comme des ints, floats, pointeurs et chaînes. |
DEFSTRUCT | DEFSTRUCT <name> [size] | Crée une nouvelle structure nommée dans la bibliothèque de types de la base de données. |
SETFIELD | SETFIELD <struct> <off> <type> [name] | Définit ou modifie un champ de structure à <off> avec <type> et un nom de champ optionnel. |
MKPTRS | MKPTRS <addr> [count] | Convertit en masse les octets bruts de la base de données en pointeurs typés. |
NEARSTR | NEARSTR <addr> | Trouve les références de chaînes situées à proximité dans les sections de code ou de données à portée. |
| Commande | Syntaxe | Description |
|---|---|---|
VTABLE | VTABLE <funcaddr> | Identifie quelles tables virtuelles contiennent <funcaddr>, y compris les slots de méthodes voisins. |
VTDUMP | VTDUMP <addr> [count] | Dumpe une table virtuelle entière : résout chaque slot vers son nom de méthode, offset et index. |
RTTI | RTTI <addr|Name> | Parcourt les structures RTTI C++ MSVC (TypeDescriptor -> CompleteObjectLocator -> vftable) pour résoudre les hiérarchies de classes et les classes de base. |
| Commande | Syntaxe | Description |
|---|---|---|
STR | STR <ascii> | Recherche des chaînes ASCII dans tous les segments chargés. |
WSTR | WSTR <utf16> | Recherche des chaînes larges UTF-16 dans tous les segments chargés. |
BYTES | BYTES <hex> | Recherche des séquences brutes d'opcodes ou d'octets de données (par ex. BYTES 55 8B EC 83 EC). |