TCP JSON-серверы-мосты для IDA Pro и Ghidra, предоставляющие декомпиляцию, перекрёстные ссылки, символы, таблицы виртуальных методов, RTTI и патчинг памяти внешним скриптам и автоматизированным конвейерам.
Легковесные TCP JSON мостовые серверы для IDA Pro и Ghidra, предоставляющие доступ к рабочим процессам обратной разработки через простой сокетный протокол.
Позволяет внешним инструментам, CLI-скриптам, Python-утилитам и автоматизированным конвейерам запрашивать декомпиляцию, перекрёстные ссылки, символы, виртуальные таблицы, RTTI, структуры и патчить память без ручного взаимодействия с GUI.
При работе над крупными проектами обратной разработки с несколькими одновременно открытыми бинарными файлами (например, игровой клиент, лаунчер, DLL-прокси и заглушки одновременно):
BASE_PORT = 5073 и автоматически проверяет последовательные порты (5073, 5074, 5075, 5076...) до нахождения свободного.В IDA Pro интерпретатор Python остаётся активным между несколькими запусками скриптов:
ID_Server.py регистрирует работающий дескриптор сервера в builtins._ida_bridge_prev.stop() для предыдущего экземпляра и присоединяет его поток (join(3.0)), чисто освобождая порт перед запуском нового сервера.Address already in use или осиротевшие потоки от повторного запуска скрипта.QUIT, STOP, EXIT или SHUTDOWN через соединение. Сервер подтверждает с {"ok": true, "shutdown": true} и немедленно закрывается.ida_bridge_stop() напрямую из IDA Python CLI или просто закройте IDA (потоки-демоны завершаются автоматически).is_cancelled() проверяется каждую 1с через таймаут сокета) или отправьте QUIT..idb / .i64) в IDA Pro.File -> Script file... / Alt+F7) выполните:
import ID_Server
127.0.0.1:5073 (или следующем доступном порту).ida_bridge_stop()
Window -> Script Manager) добавьте папку, содержащую Ghidra_Server.py, или запустите его напрямую в интерпретаторе Python.127.0.0.1:5073 (или следующему свободному порту).Команды — это обычные строки, разделённые символами новой строки, отправляемые по TCP (127.0.0.1:<PORT>). Сервер отвечает объектом JSON (или текстом с разделителями-табуляциями для устаревших команд).
| Команда | Синтаксис | Описание |
|---|---|---|
PING | PING | Проверка работоспособности. Возвращает "pong". |
CURRENT | CURRENT | Возвращает текущий адрес курсора, имя функции, размер, инструкции ассемблера и декомпилированный код. |
NAME | NAME <ea> | Возвращает имя символа/функции, определённое по адресу <ea>. |
FUNC | FUNC <addr> | Возвращает полные метаданные функции, точку входа, размер, сигнатуру, ассемблер и декомпиляцию Hex-Rays/Ghidra. |
DECOMP | DECOMP <addr> | Псевдоним для FUNC. Декомпилирует целевую функцию. |
DISASM | DISASM <ea> [n] | Возвращает строки дизассемблирования для [n] инструкций, начиная с <ea> (по умолчанию: 40). |
FIND | FIND <substr> | Поиск без учёта регистра по всем символам и именам функций, соответствующим <substr> (до 300 совпадений). |
EXPORT | EXPORT [path] | Экспортирует все не-фиктивные символы, искажённые и демагглированные имена в текстовый файл (по умолчанию: C:\Contexto\ida_names.txt). |
HELP | HELP | Возвращает JSON-список всех доступных команд, поддерживаемых сервером. |
QUIT | QUIT | Корректно закрывает клиентское соединение и останавливает сокет мостового сервера. |
| Команда | Синтаксис | Описание |
|---|---|---|
XREF | XREF <addr> | Перечисляет все входящие перекрёстные ссылки (вызовы кода, чтение/запись данных), нацеленные на <addr>. |
XFROM | XFROM <addr> | Перечисляет все исходящие перекрёстные ссылки, исходящие из <addr>. |
CALLERS | CALLERS <addr> | Фильтрует входящие ссылки, возвращая только места вызовов (включая разрешённые косвенные вызовы). |
READERS | READERS <addr> | Фильтрует входящие ссылки, возвращая только инструкции, которые читают из <addr>. |
WRITERS | WRITERS <addr> | Фильтрует входящие ссылки, возвращая только инструкции, которые записывают в <addr>. |
DECOMP_XREF | DECOMP_XREF <addr> | Пакетно декомпилирует каждую вызывающую функцию <addr> в одном запросе. |
IMPORTXREF | IMPORTXREF <name> | Находит все места вызовов по всему бинарному файлу для импортированного Windows/C API (например, IMPORTXREF WSASendTo). |
TRACE | TRACE <addr> | Трассирует поток выполнения и базовые блоки вокруг <addr>. |
| Команда | Синтаксис | Описание |
|---|---|---|
READPTR | READPTR <addr> [count] | Читает память как цепочки указателей (32-битные или 64-битные) и классифицирует каждую цель (func, string, vtable). |
FINDPTR | FINDPTR <addr> | Сканирует глобальные данные и таблицы для поиска любого указателя, ссылающегося на <addr> (находит vtables, таблицы диспетчеризации). |
STRUCT | STRUCT <addr> [n] | Эвристически выгружает непрерывную память, интерпретируя поля как int, float, указатели и строки. |
DEFSTRUCT | DEFSTRUCT <name> [size] | Создаёт новую именованную структуру в библиотеке типов базы данных. |
SETFIELD | SETFIELD <struct> <off> <type> [name] | Определяет или изменяет поле структуры по смещению <off> с типом <type> и необязательным именем поля. |
MKPTRS | MKPTRS <addr> [count] | Массово преобразует сырые байты базы данных в типизированные указатели. |
NEARSTR | NEARSTR <addr> | Находит строковые ссылки, расположенные рядом в секциях кода или данных в пределах диапазона. |
| Команда | Синтаксис | Описание |
|---|---|---|
VTABLE | VTABLE <funcaddr> | Определяет, какие виртуальные таблицы содержат <funcaddr>, включая соседние слоты методов. |
VTDUMP | VTDUMP <addr> [count] | Выгружает всю виртуальную таблицу: разрешает каждый слот в имя метода, смещение и индекс. |
RTTI | RTTI <addr|Name> | Обходит структуры MSVC C++ RTTI (TypeDescriptor -> CompleteObjectLocator -> vftable) для разрешения иерархий классов и базовых классов. |
| Команда | Синтаксис | Описание |
|---|---|---|
STR | STR <ascii> | Ищет ASCII-строки по всем загруженным сегментам. |
WSTR | WSTR <utf16> | Ищет широкие строки UTF-16 по всем загруженным сегментам. |
BYTES | BYTES <hex> | Ищет сырые последовательности байтов опкодов или данных (например, BYTES 55 8B EC 83 EC). |