前言随着大模型LLM的爆发编程辅助工具层出不穷。但在安卓逆向领域如何将 AI 的理解能力直接嵌入到我们熟悉的工具链中今天介绍的JADX-AI-MCP就是这样一个革命性的插件它是Zin MCP Suite的一部分通过 MCPModel Context Protocol协议将 JADX 与 Claude/Cursor 等 AI 助手无缝连接实现了“反编译 - AI 代码审计 - 自动重命名/分析”的闭环工作流。️ 什么是 JADX-AI-MCPJADX-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.actortspan{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 .labelTexttspan{fill:black;stroke:none;}#mermaid-svg-89gMDtgKTtIjzofy .loopText,#mermaid-svg-89gMDtgKTtIjzofy .loopTexttspan{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 .noteTexttspan{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/94e52164049d1. 资源下载前往 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 | shWindows:powershell -c irm https://astral.sh/uv/install.ps1 | iex方式二使用 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.jsonmacOS:~/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: stdioCommand:uvArguments:–directory/absolute/path/to/jadx-mcp-serverrunjadx_mcp_server.py5. (进阶) 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(classNamecom.testjava.jack.pingan1.MainActivity)。分析onClick监听器识别出关键调用。返回结果“点击按钮后程序会立即执行 onClick 方法该方法读取用户输入使用自定义的 Base64 算法由Base64New类实现进行加密然后检查加密结果是否等于5rFf7E2K6rqN7Hpiyush7E6S5fJg6rsi5NBf6NGT5rs。”第二步分析加密算法我们需要搞清楚Base64New类到底做了什么。提示词“分析Base64New类详细解释其编码逻辑并检查它使用的字符表是否为标准 Base64 字符表。”AI 执行操作调用get_class_source(classNamecom.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(fFlag: {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和变量值。关于Python学习指南如果你对Python感兴趣想通过学习Python获取更高的薪资那下面这套Python学习资料一定对你有用资料包括Python安装包激活码、Python web开发Python爬虫Python数据分析人工智能、机器学习等学习教程。0基础小白也能听懂、看懂跟着教程走带你从零基础系统性地学好Python一、Python所有方向的学习路线Python所有方向路线就是把Python常用的技术点做整理形成各个领域的知识点汇总它的用处就在于你可以按照上面的知识点去找对应的学习资源保证自己学得较为全面。二、Python学习软件工欲善其事必先利其器。学习Python常用的开发软件都在这里了三、Python操作实例学python就与学数学一样是不能只看书不做题的直接看步骤和答案会让人误以为自己全都掌握了但是碰到生题的时候还是会一筹莫展。因此在学习python的过程中一定要记得多动手写代码教程只需要看一两遍即可。四、Python就业项目实战我们学习Python必然是为了找到高薪的工作或者高报酬的兼职下面是一些公司所能用到的实战项目学完这些相信大家一定可以找到满意的工作。领取方式我会放在下面希望领取了的朋友不要忘了下方名片放心添加*)
AI 辅助安卓逆向:TRAE+JADX-AI-MCP 插件实战
发布时间:2026/7/17 12:42:37
前言随着大模型LLM的爆发编程辅助工具层出不穷。但在安卓逆向领域如何将 AI 的理解能力直接嵌入到我们熟悉的工具链中今天介绍的JADX-AI-MCP就是这样一个革命性的插件它是Zin MCP Suite的一部分通过 MCPModel Context Protocol协议将 JADX 与 Claude/Cursor 等 AI 助手无缝连接实现了“反编译 - AI 代码审计 - 自动重命名/分析”的闭环工作流。️ 什么是 JADX-AI-MCPJADX-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.actortspan{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 .labelTexttspan{fill:black;stroke:none;}#mermaid-svg-89gMDtgKTtIjzofy .loopText,#mermaid-svg-89gMDtgKTtIjzofy .loopTexttspan{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 .noteTexttspan{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/94e52164049d1. 资源下载前往 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 | shWindows:powershell -c irm https://astral.sh/uv/install.ps1 | iex方式二使用 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.jsonmacOS:~/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: stdioCommand:uvArguments:–directory/absolute/path/to/jadx-mcp-serverrunjadx_mcp_server.py5. (进阶) 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(classNamecom.testjava.jack.pingan1.MainActivity)。分析onClick监听器识别出关键调用。返回结果“点击按钮后程序会立即执行 onClick 方法该方法读取用户输入使用自定义的 Base64 算法由Base64New类实现进行加密然后检查加密结果是否等于5rFf7E2K6rqN7Hpiyush7E6S5fJg6rsi5NBf6NGT5rs。”第二步分析加密算法我们需要搞清楚Base64New类到底做了什么。提示词“分析Base64New类详细解释其编码逻辑并检查它使用的字符表是否为标准 Base64 字符表。”AI 执行操作调用get_class_source(classNamecom.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(fFlag: {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和变量值。关于Python学习指南如果你对Python感兴趣想通过学习Python获取更高的薪资那下面这套Python学习资料一定对你有用资料包括Python安装包激活码、Python web开发Python爬虫Python数据分析人工智能、机器学习等学习教程。0基础小白也能听懂、看懂跟着教程走带你从零基础系统性地学好Python一、Python所有方向的学习路线Python所有方向路线就是把Python常用的技术点做整理形成各个领域的知识点汇总它的用处就在于你可以按照上面的知识点去找对应的学习资源保证自己学得较为全面。二、Python学习软件工欲善其事必先利其器。学习Python常用的开发软件都在这里了三、Python操作实例学python就与学数学一样是不能只看书不做题的直接看步骤和答案会让人误以为自己全都掌握了但是碰到生题的时候还是会一筹莫展。因此在学习python的过程中一定要记得多动手写代码教程只需要看一两遍即可。四、Python就业项目实战我们学习Python必然是为了找到高薪的工作或者高报酬的兼职下面是一些公司所能用到的实战项目学完这些相信大家一定可以找到满意的工作。领取方式我会放在下面希望领取了的朋友不要忘了下方名片放心添加*)