前言:随着大模型(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 中反编译的代码,并直接对代码进行操作。

工作原理:

JADX GUI REQUEST HANDLERS JADX AI MCP PLUGIN JADX MCP SERVER LLM CLIENT JADX GUI REQUEST HANDLERS JADX AI MCP PLUGIN JADX MCP SERVER LLM CLIENT #mermaid-svg-89gMDtgKTtIjzofy{font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-89gMDtgKTtIjzofy .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-89gMDtgKTtIjzofy .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-89gMDtgKTtIjzofy .error-icon{fill:#552222;}#mermaid-svg-89gMDtgKTtIjzofy .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-89gMDtgKTtIjzofy .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-89gMDtgKTtIjzofy .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-89gMDtgKTtIjzofy .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-89gMDtgKTtIjzofy .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-89gMDtgKTtIjzofy .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-89gMDtgKTtIjzofy .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-89gMDtgKTtIjzofy .marker{fill:#333333;stroke:#333333;}#mermaid-svg-89gMDtgKTtIjzofy .marker.cross{stroke:#333333;}#mermaid-svg-89gMDtgKTtIjzofy svg{font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-89gMDtgKTtIjzofy p{margin:0;}#mermaid-svg-89gMDtgKTtIjzofy .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-89gMDtgKTtIjzofy text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-89gMDtgKTtIjzofy .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-89gMDtgKTtIjzofy .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-89gMDtgKTtIjzofy .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-89gMDtgKTtIjzofy .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-89gMDtgKTtIjzofy #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-89gMDtgKTtIjzofy .sequenceNumber{fill:white;}#mermaid-svg-89gMDtgKTtIjzofy #sequencenumber{fill:#333;}#mermaid-svg-89gMDtgKTtIjzofy #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-89gMDtgKTtIjzofy .messageText{fill:#333;stroke:none;}#mermaid-svg-89gMDtgKTtIjzofy .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-89gMDtgKTtIjzofy .labelText,#mermaid-svg-89gMDtgKTtIjzofy .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-89gMDtgKTtIjzofy .loopText,#mermaid-svg-89gMDtgKTtIjzofy .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-89gMDtgKTtIjzofy .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-89gMDtgKTtIjzofy .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-89gMDtgKTtIjzofy .noteText,#mermaid-svg-89gMDtgKTtIjzofy .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-89gMDtgKTtIjzofy .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-89gMDtgKTtIjzofy .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-89gMDtgKTtIjzofy .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-89gMDtgKTtIjzofy .actorPopupMenu{position:absolute;}#mermaid-svg-89gMDtgKTtIjzofy .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-89gMDtgKTtIjzofy .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-89gMDtgKTtIjzofy .actor-man circle,#mermaid-svg-89gMDtgKTtIjzofy line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-89gMDtgKTtIjzofy :root{–mermaid-font-family:“trebuchet ms”,verdana,arial,sans-serif;} INVOKE MCP TOOL INVOKE HTTP REQUEST INVOKE HTTP REQUEST HANDLER PERFORM ACTION/GATHER DATA ACTION PERFORMED/DATA GATHERED CRAFT HTTP RESPONSE HTTP RESPONSE 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


🚀 环境搭建

安装配置主要分为三个步骤:下载资源、插件安装和服务端配置。

资源链接:https://pan.quark.cn/s/94e52164049d

1. 资源下载

前往 GitHub Releases 页面,下载以下两个文件:

  1. jadx-ai-mcp-<version>.jar (插件本体,如果使用命令行安装可跳过)
  2. jadx-mcp-server-<version>.zip (MCP 服务端,必须下载)

image-20260130011825957

2. 安装 JADX 插件

方法一:命令行一键安装(推荐)

确保 jadx 命令在环境变量中,运行:

jadx plugins --install "github:zinja-coder:jadx-ai-mcp"

方法二:GUI 手动安装(推荐)

打开 JADX-GUI,进入插件管理界面

image-20260130012523796

选择下载好的 .jar 文件进行安装。

image-20260130012934984

3. 配置 MCP 服务端

本项目推荐使用 uv 进行 Python 依赖管理,这比传统的 pip 更快且环境隔离更好。当然,你也可以使用传统的 pipAnaconda

方式一:使用 uv (推荐)

  1. 解压 jadx-mcp-server-<version>.zip
  2. 安装 uv (如果尚未安装):
    • Mac/Linux: curl -LsSf https://astral.sh/uv/install.sh | sh
    • Windows: powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
      image-20260130013151078

方式二:使用 pip / Anaconda

如果你习惯使用传统的 Python 环境管理,可以直接执行以下命令安装依赖:

pip install -r requirements.txt

image-20260130015346883

image-20260130015221006

如果出现依赖问题,建议通过 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,需要先安装 httpxfastmcp 两个包。

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"
      ]
    }
  }
}

image-20260130013737313

选项 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 题目往往会在点击按钮时触发校验。

image-20260130020120784

提示词

“请分析 MainActivity,找到点击按钮后触发的校验方法。”

AI 执行操作

  1. 调用 get_class_source(className="com.testjava.jack.pingan1.MainActivity")

  2. 分析 onClick 监听器,识别出关键调用。

  3. 返回结果:

    “点击按钮后,程序会立即执行 onClick 方法,该方法读取用户输入,使用 自定义的 Base64 算法 (由 Base64New 类实现)进行加密,然后检查加密结果是否等于 5rFf7E2K6rqN7Hpiyush7E6S5fJg6rsi5NBf6NGT5rs= 。”

    image-20260130020514046

第二步:分析加密算法

我们需要搞清楚 Base64New 类到底做了什么。

提示词

“分析 Base64New 类,详细解释其编码逻辑,并检查它使用的字符表是否为标准 Base64 字符表。”

AI 执行操作

  1. 调用 get_class_source(className="com.testjava.jack.pingan1.Base64New")

  2. 读取代码,对比标准 Base64 算法。

  3. 返回结果:

    “经过分析,Base64New 类实现了标准的 Base64 编码算法,但替换了字符映射表

    自定义字符表vwxrstuopq34567ABCDEFGHIJyz012PQRSTKLMNOZabcdUVWXYefghijklmn89+/
    标准字符表ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

    这是一个典型的换表 Base64 混淆。解密时需要先将密文按自定义表还原数值,再按标准 Base64 解码。”

    image-20260130022049907

第三步:编写解题脚本 (Solver)

既然搞懂了逻辑,就让 AI 直接帮我们写出解密脚本拿到 Flag。

提示词

“根据分析出的自定义 Base64 字符表和 MainActivity 中的密文,请帮我写一个 Python 脚本来还原出 Flag。”

AI 执行操作

  1. 提取密文 5rFf7E2K6rqN7Hpiyush7E6S5fJg6rsi5NBf6NGT5rs=
  2. 提取自定义字符表。
  3. 生成 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 执行操作

  1. 调用 rename_class("com.testjava.jack.pingan1.Base64New", "CustomBase64")
  2. JADX 界面中的引用自动更新,MainActivity 中的代码变为 CustomBase64 nb = new CustomBase64();,可读性显著提升。

image-20260130022104762


💡 总结与思考

通过 JADX-AI-MCP,逆向工程的门槛被进一步降低:

  1. 效率提升:不再需要人肉翻译每一个混淆变量,AI 能基于语义快速重构代码可读性。
  2. 交互式分析:你可以像问同事一样问 AI:“这里为什么会崩溃?”、“这个字符串是在哪里定义的?”,AI 会自动去调 xrefsresources 接口找答案。
  3. 动态调试结合:甚至在调试时,AI 都能帮你分析当前的堆栈帧(Stack Frames)和变量值。

关于Python学习指南

如果你对Python感兴趣,想通过学习Python获取更高的薪资,那下面这套Python学习资料一定对你有用!

资料包括:Python安装包+激活码、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习等学习教程。0基础小白也能听懂、看懂,跟着教程走,带你从零基础系统性地学好Python!

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

在这里插入图片描述

二、Python学习软件

工欲善其事,必先利其器。学习Python常用的开发软件都在这里了!
在这里插入图片描述

三、Python操作实例

学python就与学数学一样,是不能只看书不做题的,直接看步骤和答案会让人误以为自己全都掌握了,但是碰到生题的时候还是会一筹莫展。

因此在学习python的过程中一定要记得多动手写代码,教程只需要看一两遍即可。
在这里插入图片描述

四、Python就业项目实战

我们学习Python必然是为了找到高薪的工作或者高报酬的兼职,下面是一些公司所能用到的实战项目,学完这些相信大家一定可以找到满意的工作。

在这里插入图片描述
领取方式我会放在下面,希望领取了的朋友不要忘了(下方名片,放心添加*)

img

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐