让任何 AI 智能体都能理解编译后的二进制文件。
IDASQL 是 IDA Pro 数据库的 SQL 接口,由 Elias Bachaalany 创建。它提供 30+ 个虚拟表,涵盖函数、交叉引用、字符串、类型、导入、反汇编和反编译。使用你的编码智能体中的 /idasql 技能即可完全无头工作——智能体在后台为你运行 IDA——或者打开 IDA 的界面,与你的编码智能体协作共同进行逆向工程。无需 IDAPython。无需脚本。只需 SQL。
为什么选择 SQL? SQL 是每个 AI 智能体都已经掌握的通用查询语言。IDASQL 与智能体无关:Claude、ChatGPT、Copilot、Cursor、自定义智能体,或者完全没有智能体。任何能够发出 SQL 查询的工具都可以分析二进制文件。
IDASQL 支持同时分析、交叉引用以及在一个或多个数据库之间传输注释。你能做什么,仅受限于你的想象力和所用模型的能力。
IDA Pro 已经拥有自己的数据库格式,用于描述函数、字符串、交叉引用、类型等。IDASQL 将这些内部结构映射到 实时 SQL 虚拟表。无需单独的导出或索引步骤——查询直接针对 IDA 的数据库执行,更改会实时反映。
| 模式 | 启动方式 | 适用场景 |
|---|---|---|
| 独立 CLI | idasql -s binary.i64 -i | 直接 SQL、脚本、流水线 |
| IDA 插件 | 从 IDA 的 CLI 下拉菜单中选择 idasql | GUI 内使用 SQL,实时数据库 |
| 技能工作流 | 在你的编码 CLI 中使用 /idasql:connect | AI 驱动的分析——智能体自主发出 SQL 查询 |
| You / Agent --> Natural language or SQL |
|
/idasql skills (LLM translates intent to SQL)
|
IDASQL --> IDA database(s)
|
Results --> LLM summarizes & reasons
<inline><p><b>本项目仅供教育和研究目的。请负责任地使用。</b></p></inline>```
$ 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)
一条命令。即时结果。无需编写脚本。
在安装 IDASQL CLI 和插件之后,启动你最喜欢的编码智能体,并通过提示开始逆向工程。IDASQL 完全以无头模式运行——你的智能体负责编排 IDA Pro:启动、分析、反编译、注释、保存——或者托管在 IDA GUI 内部,让你与智能体实时协作。
打开你最喜欢的编码智能体(例如 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 GUI 中同样有效。要将您的代理与打开的 IDA 会话配合使用:
1. 在 IDA 的 `idasql>` 提示符中,输入: ```
.http start
现在 IDASQL 与你的 IDA 界面已经连接并协同工作。
IDASQL 技能让你的编码代理能够通过自然语言完全控制 IDA 数据库。
allthingsida/idasql-skills 市场安装。ida.exe,macOS/Linux 上为 ida)idasql --version 应能在命令行中正常工作在 Claude Code 中运行:```text /plugin marketplace add allthingsida/idasql-skills
然后从该市场安装 `idasql` 插件。有关 Codex 及其他安装路径,请参阅 [idasql-skills README](https://github.com/allthingsida/idasql-skills#installation)。
#### 技能
| 技能 | 描述 |
|-------|-------------|
| `connect` | 连接到 IDA 数据库:CLI、HTTP 服务器、会话引导、技能路由、全局契约。 |
| `disassembly` | 查询 IDA 反汇编:函数、段、指令、块、操作数、图形。 |
| `data` | 查询 IDA 字符串、字节和二进制数据:搜索、重建、字节模式。 |
| `xrefs` | 分析 IDA 交叉引用:调用者、被调用者、导入项、数据引用、grep 搜索。 |
| `decompiler` | 反编译 IDA 函数:伪代码、ctree AST、局部变量、标签。 |
| `annotations` | 编辑 IDA 数据库:注释、重命名、类型、书签、枚举/结构体渲染。 |
| `types` | IDA 类型系统:创建/修改/应用结构体、联合体、枚举、typedef、parse_decls。 |
| `debugger` | IDA 调试器:断点、字节修补、条件、补丁清单。 |
| `storage` | 通过 netnode_kv 在 IDA 数据库中进行持久化键值存储。 |
| `idapython` | 通过 idasql 执行 IDAPython:代码片段、沙箱、输出捕获。 |
| `functions` | 完整的 idasql SQL 函数参考目录。 |
| `analysis` | 分析 IDA 二进制文件:分类、安全审计、加密/网络检测、多表查询。 |
| `resource` | 重建 IDA 二进制文件资源:递归注释、结构恢复、类型重建。 |
| `ui-context` | 捕获实时 IDA UI 上下文:屏幕、选中区域、控件焦点、地址锚点。 |
#### 示例提示词```
/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!
Legacy 32-bit `.idb` inputs are upgraded by idalib to a sibling `.i64`. When that
happens, idasql exits before serving SQL, returns exit code `3`, and prints one
JSON object to stdout with `status:"upgraded"` and `reopen_with`. Repeat the same
operation 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
有用的 CMake 开关: