
Vibe Reverse Engineer with IDA SQL: Интерфейс для IDA на SQL через живые виртуальные таблицы
Дайте любому ИИ-агенту возможность понимать скомпилированные бинарные файлы.
IDASQL — это SQL-интерфейс для баз данных IDA Pro, созданный Elias Bachaalany. Он предоставляет более 30 виртуальных таблиц, охватывающих функции, перекрёстные ссылки, строки, типы, импорты, дизассемблирование и декомпиляцию. Используйте навыки /idasql вашего кодинг-агента для полностью автономной работы — агент запускает IDA в фоновом режиме за вас — или откройте интерфейс IDA и сотрудничайте с вашим кодинг-агентом для совместного реверс-инжиниринга. Никакого IDAPython. Никакого скриптинга. Просто SQL.
Почему SQL? SQL — это универсальный язык запросов, на котором уже говорит каждый ИИ-агент. IDASQL не зависит от агента: Claude, ChatGPT, Copilot, Cursor, кастомные агенты или вообще без агента. Любой инструмент, способный выполнять SQL-запросы, может анализировать бинарные файлы.
IDASQL поддерживает анализ, перекрёстные ссылки и перенос аннотаций между одной или несколькими базами данных одновременно. Ваши возможности ограничены только воображением и мощью используемой модели.
У IDA Pro уже есть собственный формат базы данных, описывающий функции, строки, перекрёстные ссылки, типы и многое другое. IDASQL отображает эти внутренние структуры на живые SQL-виртуальные таблицы. Здесь нет отдельного шага экспорта или индексации — запросы выполняются напрямую против базы данных IDA, и изменения отражаются мгновенно.
|
/idasql skills (LLM translates intent to SQL)
|
IDASQL --> IDA database(s)
|
Results --> LLM summarizes & reasons
No input content was provided to translate.```
$ idasql -s WerFaultTool.exe.i64 -q "SELECT * FROM funcs LIMIT 5"
Opening: WerFaultTool.exe.i64...
Database opened successfully.
+------+-------------------------------------------------+------+----------+-------+
| addr | name | size | end_addr | flags |
+------+-------------------------------------------------+------+----------+-------+
| 16 | WerFaultTool.AboutForm::.ctor | 13 | 29 | 4096 |
| 32 | WerFaultTool.AboutForm::Dispose | 30 | 62 | 4096 |
| 64 | WerFaultTool.AboutForm::InitializeComponent | 295 | 359 | 4096 |
| 400 | WerFaultTool.WerFaultGUI::.ctor | 936 | 1336 | 4096 |
| 1344 | WerFaultTool.WerFaultGUI::CreateDynamicControls | 231 | 1575 | 4096 |
+------+-------------------------------------------------+------+----------+-------+
5 row(s)
Одна команда. Мгновенный результат. Без написания скриптов.
После установки CLI и плагина IDASQL запустите вашего любимого агента кодирования и начните реверс-инжиниринг с помощью подсказок. IDASQL работает полностью без графического интерфейса (headless) — ваш агент управляет IDA Pro: запуском, анализом, декомпиляцией, аннотированием, сохранением — или размещается внутри GUI IDA, где вы взаимодействуете с агентом в реальном времени.
Откройте вашего любимого агента кодирования (например, Claude Code) и введите:``` /idasql:connect Please open sample_malware.exe in the background and let's analyze it together.
Агент запускает IDASQL в фоновом режиме без графического интерфейса. С этого момента общайтесь с базой данных естественным языком. Например:```
/idasql:annotations Fully annotate the function I'm looking at, also use the decompiler skill.
Модель автономно определяет оптимальный подход к пониманию функции, полностью реверс-инжинирит её и аннотирует.
Когда закончите, попросите агента сохраниться и завершить работу:``` /idasql:connect Please save all databases and shut down IDASQL.
### Работа с несколькими базами данных
Вы можете работать с двумя или более базами данных одновременно. Дайте команду вашему агенту:```
/idasql:connect In this folder, there are many *.exe files. Please use parallel agents to open IDASQL in the background and report how many functions each has.
Затем продолжите:``` Tell me, how many strings all these databases have in common?
Агент работает со всеми базами данных одновременно. Вы можете перекрёстно ссылаться, сравнивать и переносить аннотации между ними.
### Работа с IDA UI
Всё вышеперечисленное одинаково работает из графического интерфейса IDA. Чтобы подключить агента к открытой сессии IDA:
1. В приглашении `idasql>` в IDA введите: ```
.http start
Теперь IDASQL и ваш IDA UI подключены и работают вместе.
Навыки IDASQL дают вашему кодинг-агенту полный контроль над базами IDA через естественный язык.
allthingsida/idasql-skills.ida.exe на Windows, ida на macOS/Linux)idasql --version должна работать из командной строкиВнутри Claude Code выполните:```text /plugin marketplace add allthingsida/idasql-skills
затем установите плагин `idasql` из этого маркетплейса. См. [idasql-skills README](https://github.com/allthingsida/idasql-skills#installation) для Codex и других путей установки.
#### Навыки
| Навык | Описание |
|-------|-------------|
| `connect` | Подключение к базам данных IDA: CLI, HTTP-сервер, начальная загрузка сеанса, маршрутизация навыков, глобальные контракты. |
| `disassembly` | Запросы к дизассемблированному коду IDA: функции, сегменты, инструкции, блоки, операнды, графы. |
| `data` | Запросы к строкам, байтам и бинарным данным IDA: поиск, восстановление, байтовые шаблоны. |
| `xrefs` | Анализ перекрёстных ссылок IDA: вызывающие, вызываемые, импорты, ссылки на данные, grep-поиск. |
| `decompiler` | Декомпиляция функций IDA: псевдокод, ctree AST, локальные переменные, метки. |
| `annotations` | Редактирование баз данных IDA: комментарии, переименования, типы, закладки, отображение enum/struct. |
| `types` | Система типов IDA: создание/изменение/применение структур, объединений, перечислений, typedef, parse_decls. |
| `debugger` | Отладчик IDA: точки останова, патчинг байтов, условия, список патчей. |
| `storage` | Постоянное хранилище ключ-значение в базах данных IDA через netnode_kv. |
| `idapython` | Выполнение IDAPython через idasql: сниппеты, песочница, захват вывода. |
| `functions` | Полный справочный каталог SQL-функций idasql. |
| `analysis` | Анализ бинарных файлов IDA: триаж, аудит безопасности, обнаружение крипто/сетевой активности, многотабличные запросы. |
| `resource` | Восстановление исходного представления бинарных файлов IDA: рекурсивное аннотирование, восстановление структур, реконструкция типов. |
| `ui-context` | Захват живого UI-контекста IDA: экран, выделение, фокус виджета, якоря адресов. |
#### Примеры промптов```
/idasql:analysis analyze this binary; tell me the most called functions.
/idasql:data find functions that reference "password" strings and rank by xrefs.
/idasql:xrefs show callers of CreateFileW and summarize error handling.
/idasql:data identify suspicious hardcoded URLs and the functions that reference them.
Навыки /idasql управляют анализом из вашего кодинг-CLI -- без необходимости писать IDAPython-скрипты.
idasql v0.0.18 - SQL interface to IDA databases
Usage: idasql -s [-q ] [-f ] [-i] [--export ]
Options: -s IDA database (.idb/.i64) OR raw binary (.exe/.dll/firmware/etc.) — raw binaries trigger fresh idalib analysis and string-list rebuild — legacy 32-bit .idb files upgrade to .i64 and require an explicit reopen --token Auth token for HTTP/MCP server mode (if server requires it) -q Execute SQL query or semicolon-separated script -f Execute SQL from file -i Interactive REPL mode -w, --write Save database on exit (persist changes) --export Export tables to SQL file (local mode only) --export-tables=X Tables to export: * (all, default) or table1,table2,... --http [port] Start HTTP REST server (default: 8080, local mode only) --bind Bind address for HTTP/MCP server (default: 127.0.0.1) --mcp [port] Start MCP server (default: random port, use in -i mode) Or use .mcp start in interactive mode -h, --help Show this help --version Show version
Examples: idasql -s test.i64 -q "SELECT name, size FROM funcs LIMIT 10" idasql -s test.i64 -q "SELECT * FROM binary; SELECT COUNT(*) FROM funcs;" idasql -s test.i64 -f queries.sql idasql -s test.i64 -i idasql -s test.i64 --export dump.sql idasql -s test.i64 --http 8080 idasql -s sample.exe --http # raw PE: idalib auto-analyzes, then serves SQL (default port 8080) idasql -s firmware.bin -q "SELECT * FROM binary" idasql -s test.i64 --mcp 9000
Thank you for using IDA. Have a nice day!
Устаревшие 32-битные входные файлы `.idb` обновляются idalib до соседнего `.i64`. Когда это
происходит, idasql завершает работу до обработки SQL, возвращает код выхода `3` и выводит один
JSON-объект в stdout с `status:"upgraded"` и `reopen_with`. Повторите ту же
операцию с `-s <reopen_with>`.
</details>
### Сборка из исходного кода
#### Предварительные требования
- CMake 3.20+
- компилятор C++20
- IDA SDK 9.0+ (задайте переменную окружения `IDASDK`)```bash
cmake -S . -B build -DIDASQL_WITH_MCP=ON -DIDASQL_BUILD_EXAMPLES=OFF
cmake --build build --config Release
Useful CMake switches:
| Режим | Как запустить | Для чего лучше всего |
|---|
| Автономный CLI | idasql -s binary.i64 -i | Прямой SQL, скриптинг, конвейеры |
| Плагин IDA | Выберите idasql из раскрывающегося списка CLI в IDA | SQL внутри GUI, живая база данных |
| Рабочий процесс навыка | /idasql:connect в вашем CLI для кодинга | Анализ на основе ИИ — агент автономно выполняет SQL-запросы |
| You / Agent --> Natural language or SQL |
| Switch | Default | Description |
|---|---|---|
IDASQL_WITH_MCP | ON | Build MCP server support via fastmcpp. Disable for a smaller/offline build or when you do not need --mcp / .mcp. |
IDASQL_BUILD_CLI | ON | Build the standalone idasql command-line tool. |
IDASQL_BUILD_PLUGIN | ON | Build the IDA plugin. |
IDASQL_BUILD_EXAMPLES | ON | Build the example programs under examples/. |
Notes:
--http from the CLI or .http start from the REPL/plugin CLI.PRAGMA idasql.enable_idapython = 1;.IDASQL_WITH_MCP=ON fetches fastmcpp; OFF removes MCP support and the --mcp / .mcp commands.XSQL_WITH_THINCLIENT is forced ON, and HTTPLIB_USE_OPENSSL_IF_AVAILABLE is forced OFF because IDASQL uses local plain HTTP.30+ virtual tables covering functions, strings, types, cross-references, disassembly, decompilation, and more.
| Table | Description |
|---|---|
funcs | Functions - name, addr, size, end addr, flags (INSERT/UPDATE/DELETE) |
segments | Segments - name, start/end addr, permissions, class (INSERT/UPDATE/DELETE) |
names | Named locations - addr, name, flags (INSERT/UPDATE/DELETE) |
entries | Entry points - export/program/tls callbacks (ordinal, addr, name) |
imports | Imports - module, name, addr, ordinal |
xrefs | Cross-references - from/to addr, type, is_code |
blocks | Basic blocks - start/end addr, func_addr, size |
fchunks | Function chunks - split/tail chunks with owner |
instructions | Disassembly - addr, mnemonic, operands, itype, func_addr (UPDATE operand format_spec / DELETE) |
instruction_operands | Normalized instruction operands - opnum, text, type, value; optimized by addr and func_addr |
heads | All head items (code + data) - optimized address lookup/range navigation |
| Table | Description |
|---|---|
strings | Strings - addr, content, length, type |
bytes | Raw bytes - value/word/dword/qword writable (UPDATE patches, DELETE reverts), original_value, is_patched (fast patch enumeration via WHERE is_patched = 1) |
| Table | Description |
|---|---|
pseudocode | Decompiled pseudocode via Hex-Rays |
ctree | Hex-Rays ctree AST nodes |
ctree_lvars | Local variables from Hex-Rays decompilation |
ctree_call_args | Hex-Rays call argument details per call site |
ctree_labels | Hex-Rays ctree labels (goto targets) |
| Table | Description |
|---|---|
types | Type library - structs, unions, enums with members (INSERT/UPDATE/DELETE) |
types_members | Struct/union member details (INSERT/UPDATE/DELETE) |
types_enum_values | Enum member values (INSERT/UPDATE/DELETE) |
types_func_args | Function type argument details |
local_types | Local type library entries |
| Table | Description |
|---|---|
comments | Comments - addr, regular and repeatable comments (INSERT/UPDATE/DELETE) |
bookmarks | Bookmarks - slot, addr, description (INSERT/UPDATE/DELETE) |
breakpoints | Breakpoints - addr, type, enabled, condition (full CRUD) |
hidden_ranges | Collapsed/hidden ranges - start/end, description, header, footer |
| Table | Description |
|---|---|
grep | Unified entity search table (pattern, name, kind, addr, ordinal, parent_name, full_name) |
| Table | Description |
|---|---|
binary | Database summary/overview - processor, bitness, address range, counts |
db_info | Database metadata key-value pairs |
ida_info | IDA analysis info key-value pairs |
problems | IDA analysis problems/warnings |
signatures | FLIRT signature status |
fixups | Fixup/relocation entries |
mappings | Address space mappings |
| Table | Description |
|---|---|
netnode_kv | Persistent key-value storage (netnode) |
| Table | Description |
|---|---|
disasm_calls | Call graph - caller/callee pairs per function |
disasm_loops | Loop detection - header blocks and back edges |
| Function | Description |
|---|---|
decompile(addr) | Decompile function at address (returns pseudocode) |
disasm_at(addr) | Canonical disassembly listing at address |
get_ui_context_json() | UI context JSON — live in the GUI plugin; a "not applicable" stub under CLI/idalib |
Use the grep table for composable SQL searches over named functions, labels,
segments, types, and members.```sql
-- Search anything starting with "Create"
SELECT name, kind, printf('0x%X', addr) as addr
FROM grep
WHERE pattern = 'Create%'
LIMIT 20;
-- Search anywhere in name (plain text performs a contains search) SELECT name, kind, full_name FROM grep WHERE pattern = 'File' AND kind IN ('function', 'import') LIMIT 20;
-- Find struct members SELECT name, parent_name, full_name FROM grep WHERE pattern = 'dw%' AND kind = 'member';
-- Pagination SELECT name, kind, full_name FROM grep WHERE pattern = 'Create%' ORDER BY kind, name LIMIT 20 OFFSET 20;
## Интеграция
### HTTP REST API
HTTP-сервер без состояния для простой интеграции. Без накладных расходов протокола.```bash
idasql -s database.i64 --http 8080
Входной текст для перевода отсутствует.```bash curl http://localhost:8080/status curl -X POST http://localhost:8080/query -d "SELECT name FROM funcs LIMIT 5" curl -X POST http://localhost:8080/query -d "SELECT * FROM binary; SELECT COUNT(*) FROM funcs;"
Все ответы `/query` используют каноническую обёртку скрипта — одиночный оператор = массив из одного элемента:```
{
"success": true,
"statement_count": <N>,
"results": [
{ "statement_index": 0, "success": true, "columns": [...], "rows": [...], "row_count": <N>, "elapsed_ms": <ms>, "error": null },
...
],
"row_count_total": <N>,
"elapsed_ms_total": <ms>,
"first_error_index": null
}
По умолчанию используется режим fail-fast; передайте continue_on_error=true (например, ?continue_on_error=1), чтобы выполнять все операторы независимо от более ранних ошибок. Каждый results[i].error является каноническим для ошибок по каждому оператору; first_error_index указывает на самую раннюю ошибку или равен null. При сбое разбиения (например, незакрытая кавычка) ответ имеет вид success:false, statement_count:0, results:[] плюс верхнеуровневый parse_error.
Для нескольких баз данных запускайте отдельные экземпляры:```bash idasql -s malware.i64 --http 8080 idasql -s kernel.i64 --http 8082
Эндпоинты: `/status`, `/help`, `/query`, `/shutdown`
#### HTTP-сервер из REPL
Запустите HTTP-сервер в интерактивном режиме из REPL или CLI плагина IDA:```
idasql -s database.i64 -i
idasql> .http start
HTTP server started on port 8142
URL: http://127.0.0.1:8142
...
Press Ctrl+C to stop and return to REPL.
В плагине IDA (неблокирующий):``` idasql> .http start HTTP server started on port 8142 idasql> .http stop HTTP server stopped
Сервер использует случайный порт (8100-8199), чтобы избежать конфликтов с `--http`.
### Автозапуск (закрепление)
`.pin` сохраняет предпочтение сервера в IDB (netnode `$ idasql config`), поэтому
**плагин IDA автоматически запускает** HTTP- или MCP-сервер при каждом открытии этой базы данных —
удобно для многоэкземплярных конфигураций, где каждая база данных сохраняет стабильный, известный порт.```
idasql> .pin set http 8080 # pin HTTP at 127.0.0.1:8080 (autostart on)
idasql> .pin set mcp 0.0.0.0 9500 # bind override + port (port optional; omit or 0 = fresh random port each launch)
idasql> .pin list # show pinned config
idasql> .pin off http # disable autostart but keep host/port
idasql> .pin clear all # remove all pins
После закрепления повторное открытие базы данных автоматически запускает сервер — вы увидите это в окне вывода IDA при загрузке:``` IDASQL v0.0.18: Query engine initialized IDASQL CLI: Installed IDASQL: autostart -> IDASQL HTTP server: http://127.0.0.1:8099 Type '.http stop' to stop the server.
`.pin` (или `.pin list`) показывает текущую конфигурацию для обоих сервисов:```
idasql> .pin
Autostart pins:
http 127.0.0.1:8099 (autostart: on)
mcp (not set)
.pin
работает и в CLI, и в плагине (CLI просто читает/записывает пины)..http start / .mcp start без явного указания порта повторно используют закреплённые хост/порт..pin сохраняются только при запуске с -w/--write
(как и любые другие изменения IDB).Для клиентов, совместимых с MCP (Model Context Protocol, стандарт для интеграции ИИ-инструментов):
--mcp и .mcp доступны при сборке с -DIDASQL_WITH_MCP=ON, что является значением по умолчанию. Собирайте с -DIDASQL_WITH_MCP=OFF, чтобы исключить поддержку MCP.```bash
idasql -s database.i64 --mcp idasql -s database.i64 --mcp 9500 # specific port
idasql -s database.i64 -i .mcp start
Настройте ваш MCP-клиент:```json
{
"mcpServers": {
"idasql": { "url": "http://127.0.0.1:<port>/sse" }
}
}
Инструменты: idasql_query (прямой SQL-запрос или скрипт, разделённый точкой с запятой)
IDASQL является частью семейства инструментов, которые предоставляют доступ к различным платформам бинарного анализа и отладочной информации через одну и ту же SQL-поверхность и построены на общей платформе виртуальных таблиц libxsql. Запрос, освоенный в одном инструменте, в значительной степени переносится на остальные — например, тот же SELECT name, size FROM funcs ORDER BY size DESC LIMIT 10 работает везде.
Платформы реверс-инжиниринга
Отладочная информация и данные компилятора
Ядро
libxsql - Библиотека C++17 только с заголовочными файлами (header-only) для представления структур данных C++ в виде виртуальных таблиц SQLite. Предоставляет fluent builder API для определения таблиц, проталкивание ограничений (constraint pushdown) и поддержку тонкого HTTP-клиента.
fastmcpp - Опциональная реализация MCP-сервера, используемая при сборке с -DIDASQL_WITH_MCP=ON.
Кратко: вы можете читать, собирать, оценивать, тестировать производительность, упаковывать и использовать немодифицированную версию idasql, в том числе в коммерческих целях, при условии сохранения уведомлений и соблюдения условий лицензии. Вы можете форкать или патчить её для подготовки исправлений ошибок, оптимизаций, новых функций, тестов или улучшений документации с целью обратного внесения в проект в рамках предусмотренных лицензией целей внесения вклада.
Вы не можете поддерживать расходящийся частный форк, порт, ребрендинг, клон, API-совместимую замену, конкурирующую реализацию или использовать idasql в качестве входных данных для ИИ с целью воссоздания или улучшения производной реализации без предварительного письменного разрешения Элиаса Бачаалани (Elias Bachaalany). Независимые реализации, которые не скопированы из idasql, не являются её материально производными и не в значительной степени основаны на ней в смысле, определённом лицензией, не запрещены.
Запросы на разрешение: откройте issue на GitHub в allthingsida/idasql/issues.
Если idasql в материальной степени влияет на распространяемый проект, сохраняйте указание на человеческое происхождение: заметно указывайте idasql и Элиаса Бачаалани в вашем README/документации и, когда применимо, в интерфейсе About/credits. Лицензия включает раздел примеров/FAQ, описывающий распространённые разрешённые случаи использования и случаи, требующие разрешения. Сторонние зависимости (libxsql, IDA SDK и их транзитивные зависимости) остаются под действием своих собственных лицензий.
См. полный текст Human-Origin Source License v1.0.