让任何 AI 智能体都能理解编译后的二进制文件。
IDASQL 是由 Elias Bachaalany 创建的 IDA Pro 数据库 SQL 接口。它公开了 30 多个虚拟表,涵盖函数、交叉引用、字符串、类型、导入、反汇编和反编译。使用你的编码智能体中的 /idasql 技能即可完全无头运行——智能体会在后台为你运行 IDA——或者打开 IDA 的 UI,与你的编码智能体协作,一起进行逆向工程。无需 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
$ 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.
模型会自主推理理解该函数的最佳方法,对其进行完整逆向工程,并添加注释。
完成后,让 agent 保存并关闭:
/idasql:connect Please save all databases and shut down IDASQL.
你可以同时使用两个或多个数据库。向你的 agent 提示:
/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 GUI 中使用。要让你的代理与已打开的 IDA 会话交互:
在 IDA 的 idasql> 提示符下,输入:
.http start
IDA 输出:
IDASQL HTTP server: http://127.0.0.1:8174
在你的编码代理中:
/idasql:connect Let's work with this database: http://127.0.0.1:8174
现在 IDASQL 和你的 IDA UI 已经连接并协同工作了。
在 IDA 9.4 中,答案可以直接链接到 IDA 中。deep_links 表将任意
函数、地址、字符串或类型转换为 IDA 自身 Copy Link 格式的 ida:// 链接,
外加一个额外参数 idb_path,即数据库的完整路径。IDA 会忽略它;idasql 的
点击处理器使用它来启动 IDA 并打开正确的数据库。函数链接会打开
反编译器(没有反编译器时打开反汇编),其他链接打开反汇编:
SELECT f.name, dl.uri
FROM funcs f
JOIN deep_links dl ON dl.resource = 'functions' AND dl.addr = f.addr AND dl.view = 'pseudocode'
ORDER BY f.size DESC LIMIT 5;
编码代理会将这些渲染为可点击的名称。要使点击打开 IDA:
idasql link register # handle ida:// links (a replaced handler, such as hcli's, is saved)
idasql link unregister # remove it and restore the saved handler
idasql link open -- "ida:///sample.exe.i64/functions?rva=0x1130&view=pseudocode"
idasql link list # running IDA 9.4 instances and their databases
idasql link open 会引导已打开该数据库的运行中 IDA。链接中精确的
idb_path 优先;只有当该文件不在本机上时,才会使用打开了同名数据库的运行中 IDA。
如果没有 IDA 打开该数据库,它会在该数据库上启动 IDA(仅限 .i64 或
.idb),等待分析完成(--timeout <seconds>,1 到 3600),然后进行导航。当运行中的实例
无响应或数据库解包后的 .id0 已存在(IDA 可能已将其打开)时,它会拒绝启动第二个 IDA;
--launch-anyway 可覆盖此行为。
如果链接解码后的部分包含控制字符,则会被拒绝。--config <file> 放在动词之前
(idasql link --config <file> open ...)。在 IDA 内部,
SELECT ida_open_link(uri) 会导航当前会话。
点击是否能到达处理程序取决于终端。Windows Terminal 在打开自定义 scheme 之前会询问,
除非该 scheme 已列在其 safeUriSchemes 设置中
("safeUriSchemes": ["ida"])。
IDASQL 技能让你的编码代理通过自然语言完全控制 IDA 数据库。
allthingsida/idasql-skills 市场安装。IDA Pro 已安装,且其目录位于你的 PATH 中(Windows 上为 ida.exe,macOS/Linux 上为 ida)
idasql 从 Releases 下载。选择与你的 IDA 版本匹配的 ida92、ida93 或 ida94 构件:
*-plugin.zip 是 HCLI 兼容的插件归档,包含 Windows x86-64、Linux x86-64 和 macOS ARM64 二进制文件。*-cli-manual.zip 包含独立的 CLI 可执行文件,按主机架构组织。*-arm64-plugin-manual.zip(适用于 IDA 9.3 和 9.4)包含 Linux ARM64 插件二进制文件,对于 IDA 9.4 还包含 Windows ARM64 插件二进制文件,用于手动安装。插件二进制文件特定于 SDK 版本;不要将 ida92、ida93 或 ida94 构建用于其他 IDA 版本。
验证设置:idasql --version 应能在命令行中正常工作
在 Claude Code 中,运行:
/plugin marketplace add allthingsida/idasql-skills
然后从该市场安装 idasql 插件。有关 Codex 及其他安装方式,请参阅 idasql-skills README。
| 技能 | 描述 |
|---|---|
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.