乐于分享
好东西不私藏

让 JADX 接上 AI

让 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 审计、移动安全研究和代码理解。

项目 Banner

技术原理

JADX-AI-MCP 的底层是三层结构:LLM Client、Python MCP Server、JADX GUI Plugin。

LLM 客户端不直接读取 APK 文件。它调用 MCP 工具,MCP Server 再向 JADX 插件发 HTTP 请求。插件从 JADX GUI 里读取当前类、方法、Manifest、资源文件、引用关系或调试信息,再把结果返回给 LLM。

工作链路

项目文档把系统拆成 3 层:

层级
组件
作用
Presentation Tier
Claude、Cherry Studio、LM Studio、Codex 等 LLM 客户端
发起自然语言分析请求
Application Tier
Python MCP Server、FastMCP、httpx
暴露 MCP 工具,转发请求
Data Tier
JADX-AI-MCP 插件、JADX Core、JADX GUI
提供反编译后的真实上下文

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()
定位具体实现
Manifest 和资源
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
JADX 代码界面

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 工具:

MCP 工具列表

例如让 Claude 分析当前类:

fetch currently selected class and perform quick sast on it
SAST 示例

使用场景

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。适合梳理执行流,不适合直接代替人工判断漏洞可利用性。

使用注意

  1. 只分析自己有权测试的 APK。
  2. LLM 输出是审计线索,不是漏洞结论。
  3. 默认使用 localhost。远程绑定前先想清楚网络边界。
  4. README 明确提醒:--host 0.0.0.0 会让 MCP Server 以明文 HTTP 暴露给网络,且没有认证。
  5. 远程或 Docker 场景建议用防火墙、隔离网络或 SSH Tunnel。
  6. 代码、Manifest、资源和调试变量可能包含敏感信息,接入云端模型前要先做数据边界判断。

往期推荐 📚

taste-skill:AI前端审美外挂

GPT-Image-2 提示词模板库

给 AI 装上黑客大脑:hack-skills

欢迎关注“攻防录”✨