前言:随着大模型(LLM)的爆发,编程辅助工具层出不穷。但在安卓逆向领域,如何将 AI 的理解能力直接嵌入到我们熟悉的工具链中?今天介绍的 JADX-AI-MCP 就是这样一个革命性的插件,它是 Zin MCP Suite 的一部分,通过 MCP(Model Context Protocol)协议,将 JADX 与 Claude/Cursor 等 AI 助手无缝连接,实现了“反编译 -> AI 代码审计 -> 自动重命名/分析”的闭环工作流。
🛠️ 什么是 JADX-AI-MCP?
JADX-AI-MCP 是 JADX 的一个插件,它配合 JADX-MCP-SERVER(一个 Python 服务端),让你的 LLM(如 Claude Desktop, Cursor, 或其他支持 MCP 的客户端)能够“看”到 JADX 中反编译的代码,并直接对代码进行操作。
工作原理:
sequenceDiagram
LLM CLIENT->>JADX MCP SERVER: INVOKE MCP TOOL
JADX MCP SERVER->>JADX AI MCP PLUGIN: INVOKE HTTP REQUEST
JADX AI MCP PLUGIN->>REQUEST HANDLERS: INVOKE HTTP REQUEST HANDLER
REQUEST HANDLERS->>JADX GUI: PERFORM ACTION/GATHER DATA
JADX GUI->>REQUEST HANDLERS: ACTION PERFORMED/DATA GATHERED
REQUEST HANDLERS->>JADX AI MCP PLUGIN: CRAFT HTTP RESPONSE
JADX AI MCP PLUGIN->>JADX MCP SERVER:HTTP RESPONSE
JADX MCP SERVER->>LLM CLIENT: MCP TOOL RESULT
用户在 LLM 客户端发起请求 -> JADX MCP Server 转发请求 -> JADX 插件执行操作(如获取代码、重命名) -> 结果返回给 LLM。
核心能力:
- 代码获取与搜索:
fetch_current_class()/get_class_source(): 获取类源码。search_classes_by_keyword(): 全局搜索包含特定关键字的类。get_android_manifest(): 直接读取 Manifest 文件。get_strings(): 获取 strings.xml 资源。
- 重构与反混淆:
rename_class(),rename_method(),rename_field(): 自动重命名混淆的类、方法和字段。rename_package(): 重命名整个包。
- 交叉引用分析:
xrefs_to_method(): 查找方法的调用位置。xrefs_to_field(): 查找字段的访问位置。
- 调试辅助:
debug_get_stack_frames(): 获取调试时的堆栈信息。debug_get_variables(): 获取调试时的变量值。
项目地址:GitHub - zinja-coder/jadx-ai-mcp
🚀 环境搭建
安装配置主要分为三个步骤:下载资源、插件安装和服务端配置。
==资源链接==:pan.quark.cn/s/94e521640…
1. 资源下载
前往 GitHub Releases 页面,下载以下两个文件:
jadx-ai-mcp-<version>.jar(插件本体,如果使用命令行安装可跳过)jadx-mcp-server-<version>.zip(MCP 服务端,必须下载)
2. 安装 JADX 插件
方法一:命令行一键安装(推荐)
确保 jadx 命令在==环境变量中==,运行:
jadx plugins --install "github:zinja-coder:jadx-ai-mcp"
方法二:GUI 手动安装(推荐)
打开 JADX-GUI,进入插件管理界面
选择下载好的 .jar 文件进行安装。
3. 配置 MCP 服务端
本项目推荐使用 uv 进行 Python 依赖管理,这比传统的 pip 更快且环境隔离更好。当然,你也可以使用传统的 pip 或 Anaconda。
方式一:使用 uv (推荐)
- 解压
jadx-mcp-server-<version>.zip。 - 安装
uv(如果尚未安装):- Mac/Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh - Windows:
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
- Mac/Linux:
方式二:使用 pip / Anaconda
如果你习惯使用传统的 Python 环境管理,可以直接执行以下命令安装依赖:
pip install -r requirements.txt
如果出现依赖问题,建议通过 Anaconda 管理虚拟环境。笔者使用的是 Python 3.13 版本,实测兼容性良好。
4. 配置 AI 客户端
支持 Claude Desktop、Cherry Studio、LM Studio 等多种客户端。
选项 A: TRAE
方式一:使用 uv (推荐)
"mcpServers": {
"jadx-mcp-server": {
"command": "uv",
"args": [
"--directory",
"D:\\jadx-mcp-server-v6.1.0\\jadx-mcp-server\\",
"run",
"jadx_mcp_server.py"
]
}
}
方式二:使用系统 Python
注意:如果使用自带的 Python,需要先安装 httpx 和 fastmcp 两个包。
pip install httpx fastmcp
配置如下:
{
"mcpServers": {
"jadx-mcp-server": {
"command": "E:\\tools\\path\\python\\python313\\python.exe",
"args": [
"E:\\tools\\Reverse\\Android\\jadx-mcp-server-v6.1.0\\jadx-mcp-server\\jadx_mcp_server.py"
]
}
}
}
选项 B: Claude Desktop (官方推荐)
编辑配置文件:
- Windows:
%APPDATA%\Claude\claude_desktop_config.json - macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
添加如下配置(注意替换实际路径):
{
"mcpServers": {
"jadx-mcp-server": {
"command": "/path/to/uv",
"args": [
"--directory",
"/absolute/path/to/jadx-mcp-server/",
"run",
"jadx_mcp_server.py"
]
}
}
}
选项 C: Cherry Studio
在 Cherry Studio 的 MCP 设置中添加工具:
- Type: stdio
- Command:
uv - Arguments:
--directory /absolute/path/to/jadx-mcp-server run jadx_mcp_server.py
5. (进阶) HTTP 模式与自定义端口
如果需要通过 HTTP 远程调用,或解决端口冲突,可以使用以下命令启动服务端:
# 开启 HTTP 模式
uv run jadx_mcp_server.py --http
# 指定 JADX 端口 (默认 9999)
uv run jadx_mcp_server.py --jadx-port 8652
💡 常用提示词 (Sample Prompts)
配置好后,你可以直接对 AI 说出以下指令:
- 🔍 基础理解:
- "Explain what this class does in one paragraph." (一句话解释这个类在做什么)
- "Is there any obfuscation in this class?" (这里面有混淆代码吗?)
- 🛡️ 漏洞检测:
- "Check this class for hardcoded secrets or credentials." (检查硬编码密钥)
- "Does this method sanitize user input before using it?" (检查输入清洗)
- 🛠️ 逆向辅助:
- "Deobfuscate and rename the classes and methods to something readable." (反混淆并重命名)
- "Tell me which classes contains code related to 'encryption'?" (哪些类和加密有关?)
- 🐞 调试辅助:
- "Fetch stack frames and variables from debugger and provide summary." (获取调试堆栈和变量并总结)
⚔️ 逆向实战:破解 CTF 题目 (Find the Flag)
为了演示 AI 如何辅助逆向,我们以一道典型的 CTF 题目为例。目标是从 APK 中找到隐藏的 Flag。
第一步:定位关键逻辑
打开 JADX,我们通常会先看 MainActivity。但 CTF 题目往往会在点击按钮时触发校验。
提示词:
“请分析
MainActivity,找到点击按钮后触发的校验方法。”
AI 执行操作:
-
调用
get_class_source(className="com.testjava.jack.pingan1.MainActivity")。 -
分析
onClick监听器,识别出关键调用。 -
返回结果:
“点击按钮后,程序会立即执行 onClick 方法,该方法读取用户输入,使用 自定义的 Base64 算法 (由
Base64New类实现)进行加密,然后检查加密结果是否等于5rFf7E2K6rqN7Hpiyush7E6S5fJg6rsi5NBf6NGT5rs=。”
第二步:分析加密算法
我们需要搞清楚 Base64New 类到底做了什么。
提示词:
“分析
Base64New类,详细解释其编码逻辑,并检查它使用的字符表是否为标准 Base64 字符表。”
AI 执行操作:
-
调用
get_class_source(className="com.testjava.jack.pingan1.Base64New")。 -
读取代码,对比标准 Base64 算法。
-
返回结果:
“经过分析,
Base64New类实现了标准的 Base64 编码算法,但替换了字符映射表。自定义字符表:
vwxrstuopq34567ABCDEFGHIJyz012PQRSTKLMNOZabcdUVWXYefghijklmn89+/标准字符表:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/这是一个典型的换表 Base64 混淆。解密时需要先将密文按自定义表还原数值,再按标准 Base64 解码。”
第三步:编写解题脚本 (Solver)
既然搞懂了逻辑,就让 AI 直接帮我们写出解密脚本拿到 Flag。
提示词:
“根据分析出的自定义 Base64 字符表和
MainActivity中的密文,请帮我写一个 Python 脚本来还原出 Flag。”
AI 执行操作:
- 提取密文
5rFf7E2K6rqN7Hpiyush7E6S5fJg6rsi5NBf6NGT5rs=。 - 提取自定义字符表。
- 生成 Python 解密代码(使用
str.translate映射回标准表,再解码)。
AI 生成代码:
import base64
# 自定义字符表 (从 Base64New 类提取)
custom_table = "vwxrstuopq34567ABCDEFGHIJyz012PQRSTKLMNOZabcdUVWXYefghijklmn89+/"
# 标准 Base64 字符表
std_table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
# 密文 (从 MainActivity 提取)
cipher = "5rFf7E2K6rqN7Hpiyush7E6S5fJg6rsi5NBf6NGT5rs="
# 建立映射并转换
trans_map = str.maketrans(custom_table, std_table)
std_cipher = cipher.translate(trans_map)
# 标准 Base64 解码
flag = base64.b64decode(std_cipher).decode('utf-8')
print(f"Flag: {flag}")
第四步:一键重命名优化
为了让代码以后更好看,我们可以顺手把类名改了,使其符合其实际功能。
提示词:
“把
Base64New类重命名为CustomBase64,表明它是一个自定义的 Base64 实现。”
AI 执行操作:
- 调用
rename_class("com.testjava.jack.pingan1.Base64New", "CustomBase64")。 - JADX 界面中的引用自动更新,
MainActivity中的代码变为CustomBase64 nb = new CustomBase64();,可读性显著提升。
💡 总结与思考
通过 JADX-AI-MCP,逆向工程的门槛被进一步降低:
- 效率提升:不再需要人肉翻译每一个混淆变量,AI 能基于语义快速重构代码可读性。
- 交互式分析:你可以像问同事一样问 AI:“这里为什么会崩溃?”、“这个字符串是在哪里定义的?”,AI 会自动去调
xrefs或resources接口找答案。 - 动态调试结合:甚至在调试时,AI 都能帮你分析当前的堆栈帧(Stack Frames)和变量值。
未来展望: 这种 "IDE + MCP + LLM" 的模式将是未来的主流。对于逆向工程师来说,学会如何用 Prompt 驱动工具去干脏活累活,将成为核心竞争力之一。
参考资源: