让 JADX 接上 AI
JADX-AI-MCP 是一个 JADX 插件加 MCP Server 组合。它把 Android APK 的反编译上下文接给 Claude、Codex、Cherry Studio、LM Studio 等 LLM 客户端,用来做源码理解、漏洞线索排查、资源分析和调试辅助。
项目地址: https://github.com/zinja-coder/jadx-ai-mcp
文档地址: https://jadx-ai-mcp.readthedocs.io/en/latest/
该项目适合授权 APK 审计、移动安全研究和代码理解。

技术原理
JADX-AI-MCP 的底层是三层结构:LLM Client、Python MCP Server、JADX GUI Plugin。
LLM 客户端不直接读取 APK 文件。它调用 MCP 工具,MCP Server 再向 JADX 插件发 HTTP 请求。插件从 JADX GUI 里读取当前类、方法、Manifest、资源文件、引用关系或调试信息,再把结果返回给 LLM。

项目文档把系统拆成 3 层:
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
Java 插件侧使用 Javalin 提供本地 HTTP 服务。Python Server 使用 asyncio 和 httpx.AsyncClient 处理请求。文档里还特别提到一点:访问 JADX GUI 数据时要走 Swing 的 EDT 线程,否则容易碰到并发问题。
当前 MCP 工具覆盖面比较宽:

|
|
|
|
|---|---|---|
|
|
fetch_current_class()
get_selected_text() |
|
|
|
get_all_classes()
search_classes_by_keyword() |
|
|
|
get_method_by_name()
get_fields_of_class() |
|
|
|
get_android_manifest()
get_strings()、get_resource_file() |
|
|
|
rename_class()
rename_method()、rename_field() |
|
|
|
debug_get_stack_frames()
debug_get_threads()、debug_get_variables() |
|
|
|
xrefs_to_class()
xrefs_to_method()、xrefs_to_field() |
|
它和“把源码复制给 AI”最大的区别,是上下文可以来自 JADX 当前项目。分析一个大 APK 时,不用一次性塞进所有代码,而是按工具逐步读取。
项目也做了大 APK 场景的处理。文档提到,大型 APK 可能有 10000+ classes,列表接口支持 offset 和 count 分页,默认 100 条,最大 10000 条。
快速上手
1. 检查环境
文档要求 Java 11+、Python 3.10+、JADX 1.5.1+。
java -versionpython --versionjadx --version

2. 安装 JADX 插件
推荐一行命令安装:
jadx plugins --install "github:zinja-coder:jadx-ai-mcp"
3. 准备 MCP Server
Release 里需要下载两个文件:
jadx-ai-mcp-<version>.jarjadx-mcp-server-<version>.zip
进入 jadx-mcp-server 后,可以用 uv 启动:
cd jadx-mcp-serveruv run jadx_mcp_server.py --help
4. 配置 LLM 客户端
Claude Desktop 的配置文件位置如下:
Windows: %APPDATA%\Claude\claude_desktop_config.jsonmacOS: ~/Library/Application Support/Claude/claude_desktop_config.jsonLinux: ~/.config/Claude/claude_desktop_config.json
配置示例:
{"mcpServers": {"jadx-mcp-server": {"command": "/path/to/uv","args": ["--directory","/path/to/jadx-mcp-server/","run","jadx_mcp_server.py" ] } }}
5. 启动并使用
在 JADX-GUI 里打开 APK,再启动 MCP Server。默认情况下,JADX 插件监听 127.0.0.1:8650,MCP Server HTTP 模式监听 127.0.0.1:8651。
uv run jadx_mcp_server.py --http
连接成功后,LLM 客户端里可以看到可用 MCP 工具:

例如让 Claude 分析当前类:
fetch currently selected class and perform quick sast on it

使用场景
APK 代码理解
任务示例: 打开一个混淆后的 APK,让 AI 解释当前类负责什么。
技术要点: 用 fetch_current_class() 获取当前类源码,再让 LLM 总结职责、识别可疑命名和外部依赖。遇到大项目时,用分页和关键词搜索逐步展开,不要一次性拉全量类。
移动安全审计
任务示例: 检查某个类是否存在硬编码密钥、明文存储、SQL 拼接、危险权限调用。
技术要点: 结合 get_android_manifest()、get_strings()、search_classes_by_keyword() 和当前类源码。AI 给出的结论只能作为线索,最终要回到代码和运行环境确认。
反混淆和重命名
任务示例: 某个包里大量类名、方法名不可读,需要先整理阅读路径。
技术要点: 先让 AI 根据上下文推断类职责,再使用 rename_class()、rename_method()、rename_field() 做可读性改名。重命名前最好保存项目状态,避免误改影响后续分析。
调试状态解释
任务示例: JADX 调试器停在某个位置,需要解释线程、变量和调用栈。
技术要点: 使用 debug_get_stack_frames()、debug_get_threads()、debug_get_variables() 把运行状态交给 LLM。适合梳理执行流,不适合直接代替人工判断漏洞可利用性。
使用注意
-
只分析自己有权测试的 APK。 -
LLM 输出是审计线索,不是漏洞结论。 -
默认使用 localhost。远程绑定前先想清楚网络边界。 -
README 明确提醒: --host 0.0.0.0会让 MCP Server 以明文 HTTP 暴露给网络,且没有认证。 -
远程或 Docker 场景建议用防火墙、隔离网络或 SSH Tunnel。 -
代码、Manifest、资源和调试变量可能包含敏感信息,接入云端模型前要先做数据边界判断。
往期推荐 📚
欢迎关注“攻防录”✨
夜雨聆风