关于 DexSQL
DexSQL 用 SQL 查询 Android APK 和 DEX 文件中的类、方法、字符串及调用引用,面向逆向分析人员和 AI Agent。它同时提供命令行和内置 MCP 服务,并在本地解析文件。
主要功能
- 01跨 APK 和 DEX 执行 SQL 查询
- 02检索类、方法、字符串和引用
- 03组合查询多个输入文件
- 04交互式查询与可复用脚本
- 05提取第三方许可证声明
适用场景
- 01查找引用特定字符串或 URL 的方法
- 02追踪直接及多跳调用者
- 03从 APK 检查相关 Smali
- 04对 DEX 文件重复执行分析查询
MCP 相关
内置 MCP 服务通过 stdio 将 AI 客户端连接到 DexSQL,并通过 MCP 资源提供模式和文档。APK 解析在本地进行。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
DexSQL
English | 简体中文
用于 Android 二进制文件的 SQL。
在 APK 和 DEX 文件中查询类、方法、字符串和调用引用。通过 MCP 将其连接到 AI Agent,也可以从命令行使用。
为什么选择 DexSQL?
AI Agent 可以通过一条 SQL 查询,在多个 DEX 文件中组合签名、字符串和调用关系,并仅返回所需的结构化结果。查询可以生成、优化并保存到脚本中,以便重复使用。
DexSQL 可直接读取 DEX 并复用已加载的数据集,支持以低延迟和较小的内存占用重复查询。测量结果请参见基准测试。
内置的 MCP 服务可直接连接 Agent,无需 GUI。
flowchart LR
A["AI client"] -->|stdio MCP| D["DexSQL"]
D --> F["APK / DEX"]
A -->|stdio MCP| P["JADX-MCP · Python"]
P -->|HTTP| J["JADX GUI + plugin · JVM"]
J --> F
与 AI Agent 配合使用
DexSQL 已列入官方 MCP Registry,名称为 org.lsposed/dexsql。支持从 Registry 安装服务的客户端可以直接添加它;Claude Desktop 则可以打开 Releases 中的 dexsql.mcpb bundle。该 bundle 支持 macOS、x86_64 Linux 和 x86_64 Windows;其他平台请使用技能或下方的手动设置方式。
使用 Skills CLI 安装设置技能:
npx skills add LSPosed/dexsql-release --skill install-dexsql
然后让你的 Agent 使用 install-dexsql 来安装 DexSQL 并配置其 MCP 连接。在 Codex 中,以 $install-dexsql 调用它。
该技能会从 Releases 下载兼容的二进制文件、验证其 SHA-256 校验和、添加 MCP 配置,并检查连接。它也可以使用本地可执行文件。上面的命令会安装该技能;实际设置由 Agent 在你调用它时执行。
手动设置 MCP
打开 Releases,选择与你的操作系统和 CPU 架构匹配的可执行文件或压缩包。查看所选版本的资源和说明,确认其可用性及系统要求。如有需要,请解压压缩包,然后在 Windows 上将可执行文件重命名为 dexsql.exe,在 macOS/Linux 上重命名为 dexsql。在 macOS/Linux 上,运行 chmod +x /path/to/dexsql。
从同一 Release 下载 LICENSE 和 LICENSE-AUXILIARY,并将它们与可执行文件放在一起,然后注册其绝对路径。Codex 配置如下:
codex mcp add dexsql -- /absolute/path/to/dexsql mcp
对于使用 mcpServers JSON 的客户端:
{
"mcpServers": {
"dexsql": {
"command": "/absolute/path/to/dexsql",
"args": ["mcp"]
}
}
}
在 Windows 上,请使用 dexsql.exe,并在 JSON 中转义反斜杠,例如 "D:\\Tools\\dexsql.exe"。如有需要,请重新加载客户端的 MCP 连接。客户端设置请参见 Codex MCP 文档。
连接后,可以尝试:
打开
/path/to/app.apk。查找引用此日志消息的方法,列出调用这些方法的调用方,并显示相关的 Smali。
该服务通过 MCP 资源提供其架构和文档。APK 解析在本地运行,不会修改输入文件。AI 客户端的设置决定哪些结果会发送给其模型。
性能
一次真实的 MCP 会话
某 AI Agent 通过 DexSQL MCP 服务分析了 Douyin 40.7.0(343 MiB,56 个 DEX 文件)。我们在 DexSQL 0.1.1 和另外六款工具上重放了其分析目标:rasc(ASC 的 Rust 实现)、DexDec、ddc、JADX API、garlic 和 droidsaw。
打开 APK 一次并回答 10 个目标,DexSQL 用时 0.71 秒,rasc 用时 1.69 秒,DexDec 用时 16 秒,其他工具用时 75 至 449 秒。DexSQL 每次会话打开 APK 一次需 0.38 秒;rasc 无需打开,但每一步都会重新读取 APK,因此只有一个问题的会话中,rasc 完成得更快。有些工具未能显示所有预期证据;这些遗漏仍在审核中。有关每个目标、各工具的接口、方法和测试框架,请参阅重放报告。
QQ 上的固定查询
针对同一个 QQ 9.3.55 APK(约 372 MiB)运行八项查询:类和方法查找、字符串引用、直接调用者和两跳调用者查询,以及复合谓词。比较对象包括 JADX、zinja-coder 的 JADX-MCP、ASC、DexDec、ddc、garlic 和 droidsaw。
启动时间包括进程启动、加载和准备,以及首次精确类查找;数值为三次运行的中位数。未清除操作系统文件缓存。
查询耗时取三个已准备工作流中九次重复运行的中位数。garlic 每次调用都会重启 MCP;该耗时计入结果。droidsaw CLI 使用三次独立调用,每次都包括加载。每项查询都使用从零开始的线性图表。超过坐标轴上限的柱状条会被截断、以箭头标记,并标注实际耗时。**斜线柱状条表示查询未能在 60 秒内完成。**灰色条目说明了缺少比较数据的原因。
调用链和复合谓词
直接调用者和两跳调用者查询分别返回 15 个和 16 个方法。每项复合查询返回一个方法。所有已完成并绘制的结果集均经过核验。JADX 原生适配器会直接读取元数据和 DEX 指令;它不会为了查找引用而反编译整个 APK。
内存数据通过 50 毫秒轮询间隔,在整个进程树范围内采集。浅色柱状条表示常见的加载并查找类工作流;深色柱状条表示各工具已执行的用例。RSS 总和可能会对共享页面重复计数。我们也记录了私有已提交内存和就绪时的内存占用。
在本次运行中,DexDec 的引用缓存使其重复调用者查询比 DexSQL 更快。droidsaw 的 MCP 因固定解析预算而拒绝输入,因此图表展示其 CLI 结果。有关首次查询和准备耗时、接口差异、SQL、结果哈希值和复现脚本,请参阅报告。
CLI
dexsql query --input app.apk --sql "SELECT DISTINCT method FROM method_strings WHERE value = 'https://api.example.com'"
dexsql query --input app.apk --interactive
dexsql extract licenses --output THIRD_PARTY_NOTICES
dexsql --help
重复使用 --input 可将多个文件一起查询。同一个可执行文件既提供 CLI,也提供 MCP 服务。
许可证
DexSQL 是 LSPosed 开发的闭源软件,采用 DexSQL Binary License 1.0 许可。根据其条款,个人和商业用途、集成及二进制再分发均免费。
公开的安装技能、基准测试材料和文档采用 MIT License 许可。
第三方材料保留其各自的许可证。运行 dexsql extract licenses 查看相关声明。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。