Servidores puente TCP JSON para IDA Pro y Ghidra que exponen descompilación, referencias cruzadas, símbolos, vtables, RTTI y parcheo de memoria a scripts externos y pipelines automatizados.
Servidores puente TCP JSON ligeros para IDA Pro y Ghidra que exponen flujos de trabajo de ingeniería inversa a través de un protocolo de socket simple.
Permite que herramientas externas, scripts CLI, utilidades Python y pipelines automatizados consulten descompilación, xrefs, símbolos, tablas virtuales, RTTI, estructuras y memoria de parches sin interacción manual con la GUI.
Cuando se trabaja en proyectos grandes de reversing con múltiples binarios abiertos al mismo tiempo (por ejemplo, cliente de juego, lanzador, proxies DLL y stubs simultáneamente):
BASE_PORT = 5073 y sondea automáticamente puertos secuenciales (5073, 5074, 5075, 5076...) hasta encontrar uno disponible.En IDA Pro, el intérprete de Python permanece activo a través de múltiples ejecuciones de scripts:
ID_Server.py registra el manejador del servidor en ejecución en builtins._ida_bridge_prev.stop() en la instancia anterior y une su hilo (join(3.0)), liberando limpiamente el puerto antes de iniciar el nuevo servidor.Address already in use ni hilos huérfanos por re-ejecutar el script.QUIT, STOP, EXIT o SHUTDOWN a través de la conexión. El servidor confirma con {"ok": true, "shutdown": true} y cierra inmediatamente.ida_bridge_stop() directamente desde la CLI de Python de IDA, o simplemente cierra IDA (los hilos daemon salen automáticamente).is_cancelled() se verifica cada 1s mediante timeout de socket), o envía QUIT..idb / .i64) en IDA Pro.File -> Script file... / Alt+F7), ejecuta:
import ID_Server
127.0.0.1:5073 (o el siguiente puerto disponible).ida_bridge_stop()
Window -> Script Manager), agrega la carpeta que contiene Ghidra_Server.py o ejecútalo directamente en el intérprete de Python.127.0.0.1:5073 (o el siguiente puerto libre).Los comandos son cadenas de texto plano delimitadas por saltos de línea enviadas por TCP (127.0.0.1:<PORT>). El servidor responde con un objeto JSON (o texto delimitado por tabulaciones para comandos legacy).
| Comando | Sintaxis | Descripción |
|---|---|---|
PING | PING | Verificación de estado. Devuelve "pong". |
CURRENT | CURRENT | Devuelve la dirección actual del cursor, nombre de función, tamaño, instrucciones de ensamblador y código descompilado. |
NAME | NAME <ea> | Devuelve el nombre del símbolo/función definido en <ea>. |
FUNC | FUNC <addr> | Devuelve metadatos completos de la función, punto de entrada, tamaño, firma, ensamblador y descompilación Hex-Rays/Ghidra. |
DECOMP | DECOMP <addr> | Alias de FUNC. Descompila la función objetivo. |
DISASM | DISASM <ea> [n] | Devuelve líneas de desensamblado para [n] instrucciones comenzando desde <ea> (por defecto: 40). |
FIND | FIND <substr> | Búsqueda insensible a mayúsculas en todos los símbolos y nombres de funciones que coincidan con <substr> (hasta 300 coincidencias). |
EXPORT | EXPORT [path] | Exporta todos los símbolos no dummy, nombres mangled y demangled a un archivo de texto (por defecto: C:\Contexto\ida_names.txt). |
HELP | HELP | Devuelve una lista JSON de todos los comandos disponibles soportados por el servidor. |
QUIT | QUIT | Cierra limpiamente la conexión del cliente y detiene el socket del servidor puente. |
| Comando | Sintaxis | Descripción |
|---|---|---|
XREF | XREF <addr> | Lista todas las referencias cruzadas entrantes (llamadas de código, lecturas/escrituras de datos) dirigidas a <addr>. |
XFROM | XFROM <addr> | Lista todas las referencias cruzadas salientes originadas desde <addr>. |
CALLERS | CALLERS <addr> | Filtra las referencias entrantes para devolver solo sitios de llamada (incluyendo llamadas indirectas resueltas). |
READERS | READERS <addr> | Filtra las referencias entrantes para devolver solo instrucciones que leen desde <addr>. |
WRITERS | WRITERS <addr> | Filtra las referencias entrantes para devolver solo instrucciones que escriben en <addr>. |
DECOMP_XREF | DECOMP_XREF <addr> | Descompila en lote cada función llamadora de <addr> en una sola solicitud. |
IMPORTXREF | IMPORTXREF <name> | Localiza todos los sitios de llamada en todo el binario para una API importada de Windows/C (por ejemplo, IMPORTXREF WSASendTo). |
TRACE | TRACE <addr> | Rastrea el flujo de ejecución y los bloques básicos que rodean <addr>. |
| Comando | Sintaxis | Descripción |
|---|---|---|
READPTR | READPTR <addr> [count] | Lee memoria como cadenas de punteros (32-bit o 64-bit) y clasifica cada objetivo (func, string, vtable). |
FINDPTR | FINDPTR <addr> | Escanea datos globales y tablas para encontrar cualquier puntero que referencie <addr> (encuentra vtables, tablas de despacho). |
STRUCT | STRUCT <addr> [n] | Volcado heurístico de memoria contigua interpretando campos como ints, floats, punteros y strings. |
DEFSTRUCT | DEFSTRUCT <name> [size] | Crea una nueva estructura nombrada en la librería de tipos de la base de datos. |
SETFIELD | SETFIELD <struct> <off> <type> [name] | Define o modifica un campo de estructura en <off> con <type> y nombre de campo opcional. |
MKPTRS | MKPTRS <addr> [count] | Convierte bytes crudos de la base de datos en punteros tipados de forma masiva. |
NEARSTR | NEARSTR <addr> | Encuentra referencias a strings ubicadas cerca en secciones de código o datos dentro del rango. |
| Comando | Sintaxis | Descripción |
|---|---|---|
VTABLE | VTABLE <funcaddr> | Identifica qué tablas virtuales contienen <funcaddr>, incluyendo slots de métodos vecinos. |
VTDUMP | VTDUMP <addr> [count] | Volcado completo de una tabla virtual: resuelve cada slot a su nombre de método, offset e índice. |
RTTI | RTTI <addr|Name> | Recorre estructuras RTTI de MSVC C++ (TypeDescriptor -> CompleteObjectLocator -> vftable) para resolver jerarquías de clases y clases base. |
| Comando | Sintaxis | Descripción |
|---|---|---|
STR | STR <ascii> | Busca strings ASCII en todos los segmentos cargados. |
WSTR | WSTR <utf16> | Busca strings anchos UTF-16 en todos los segmentos cargados. |
BYTES | BYTES <hex> | Busca secuencias de bytes de opcode o datos crudos (por ejemplo, BYTES 55 8B EC 83 EC). |