
1. 为什么要在 TRAE 里接 JADX-AI-MCP安卓逆向的日常大部分时间不是花在“看懂一行 Java”而是花在“在几百个混淆类里找到那一行”。JADX 已经能把 dex 还原成可读性不错的 Java但面对 a/b/c 这种类名、满屏的 goto 和字符串拼接人肉翻代码的效率非常低。JADX-AI-MCP 这个插件做的事情就是把 JADX 当前打开的反编译结果通过 MCPModel Context Protocol协议暴露给 AI 客户端让模型能直接调用get_class_source、search_classes_by_keyword、xrefs_to_method这类工具去“读”你的工程而不是你复制粘贴给它。TRAE 作为支持 MCP 的编辑器接入之后你就能在对话里直接说“分析 MainActivity 里点击按钮触发的校验方法”模型会自己去 JADX 里取源码、找交叉引用、给出结论。这篇聚焦 TRAE 通过 MCP 协议接入 JADX-AI-MCP 完成 APK 反编译与 AI 辅助分析的全流程交付 MCP 配置骨架、JADX 侧插件安装与端口验证以及一次反编译后 AI 解读关键类的可复现验证动作。适合已经会用 JADX 打开 APK、想把这套流程自动化的安卓逆向初学者和移动安全方向的同学。整个链路是这样的TRAE 作为 MCP 客户端发起工具调用JADX-MCP-SERVER 这个 Python 服务端接收请求并转发JADX 里的 AI MCP 插件执行实际操作取源码、重命名、查引用结果再原路返回给模型。理解这条链路后面排查问题会轻松很多。2. 前置准备TRAE、JADX 与模型接入先把三样东西备齐JADX带 GUI建议 1.5.0 以上、Python 3.10 环境、TRAE 编辑器。JADX-AI-MCP 分两部分一部分是装进 JADX 的插件 jar另一部分是独立运行的 Python MCP 服务端两者通过本地端口通信缺一不可。模型侧我建议用 TaoToken 统一接入这样 TRAE 里配置一次就能同时用上对话模型和编码模型不用在多个平台之间来回切 Key。TaoToken 的 API 地址是 https://taotoken.net/api 兼容主流协议配置时把 Base URL 填进去即可。如果你只是先验证 MCP 链路通不通用模型对话页面手动发几条指令最直观如果打算长期做逆向和 Agent 编码直接上 Coding Plan 更省心。拿 Key 的入口在控制台的 API Keys 页面新建一个 Key 复制出来注意只显示一次。接入文档里有各客户端的填写示例TRAE 的 MCP 配置和模型配置是分开的两块别混在一起填。注意MCP 服务端和 JADX 插件必须版本匹配插件更新后服务端也要同步更新否则工具列表可能对不上。3. TRAE 的 MCP 配置文件骨架TRAE 的 MCP 配置一般放在用户目录下的配置文件中Windows 常见路径是%APPDATA%\Trae\User\mcp.jsonmacOS 在~/Library/Application Support/Trae/User/mcp.json。如果找不到可以在 TRAE 设置里搜索 MCP点“编辑配置文件”直接跳转。推荐用 uv 管理 Python 依赖环境隔离干净启动也快。先解压jadx-mcp-server-version.zip假设解压到D:\jadx-mcp-server\jadx-mcp-server\配置骨架如下{ mcpServers: { jadx-mcp-server: { command: uv, args: [ --directory, D:\\jadx-mcp-server\\jadx-mcp-server\\, run, jadx_mcp_server.py ] } } }如果你不想装 uv用系统 Python 也行但要先补两个包pip install httpx fastmcp然后换成绝对路径的写法{ mcpServers: { jadx-mcp-server: { command: E:\\Python313\\python.exe, args: [ E:\\jadx-mcp-server\\jadx-mcp-server\\jadx_mcp_server.py ] } } }几个参数说明一下。--directory指向服务端脚本所在目录uv 会在这个目录下解析依赖run后面跟入口脚本名不要写错成jadx-mcp-server.py实际文件名是下划线。路径里的反斜杠在 JSON 里要写成双反斜杠这是最常见的低级错误。服务端默认监听 JADX 的 9999 端口。如果你本机 9999 被占用或者想跑 HTTP 模式远程调用可以加启动参数# 开启 HTTP 模式 uv run jadx_mcp_server.py --http # 指定 JADX 端口默认 9999 uv run jadx_mcp_server.py --jadx-port 8652改端口后JADX 插件侧的端口也要同步改两边对不上就会一直连不上。4. JADX 侧插件安装与端口验证插件安装有两种方式。命令行一键装最省事前提是jadx命令已经在环境变量里jadx plugins --install github:zinja-coder:jadx-ai-mcp如果命令行不熟用 GUI 手动装更直观打开 JADX-GUI进入插件管理界面选择下载好的jadx-ai-mcp-version.jar安装重启 JADX 生效。装完之后要确认插件真的在监听。打开一个 APKJADX 菜单里应该能看到 AI MCP 相关的入口点开后会显示当前监听端口默认就是 9999。验证端口是否通用 curl 打一下curl -s http://127.0.0.1:9999/health返回类似{status:ok}就说明插件侧正常。如果连接被拒绝先确认 JADX 是不是真的打开了 APK——插件只有在有工程加载时才会启动监听空窗口是不监听的。这一步做完链路的前半段就通了JADX 插件在 9999 端口等着MCP 服务端启动后会去连它。回到 TRAE在 MCP 面板里应该能看到jadx-mcp-server处于已连接状态展开能看到get_class_source、search_classes_by_keyword、get_android_manifest、xrefs_to_method等工具列表。工具列表为空基本就是服务端没起来或者路径写错了。5. 一次可复现的 AI 解读验证拿一个 CTF 风格的 APK 来跑通全流程最有说服力。用 JADX 打开 APK等反编译完成然后在 TRAE 对话里发第一条指令请分析 MainActivity找到点击按钮后触发的校验方法。模型会调用get_class_source取 MainActivity 源码识别出 onClick 监听器返回类似这样的结论点击按钮后执行 onClick 方法读取用户输入用自定义的 Base64 算法加密再和某个固定密文比较。这一步的关键是模型真的去 JADX 里取了源码而不是凭空猜——你可以在 TRAE 的工具调用日志里看到get_class_source的入参和返回。接着追问加密细节分析 Base64New 类详细解释其编码逻辑并检查它使用的字符表是否为标准 Base64 字符表。模型会取Base64New的源码对比标准表指出这是换表 Base64并给出自定义字符表。到这一步逆向的核心逻辑已经被 AI 梳理清楚了。最后让它直接写解题脚本根据分析出的自定义 Base64 字符表和 MainActivity 中的密文帮我写一个 Python 脚本还原出 Flag。生成的脚本大致是这样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) flag base64.b64decode(std_cipher).decode(utf-8) print(fFlag: {flag})跑一下就能拿到 Flag。整个过程中你只发了三条自然语言指令取源码、找引用、写脚本全部由模型通过 MCP 工具完成。这就是 JADX-AI-MCP 相比手动复制粘贴的本质区别模型有了“手”能自己去工程里翻东西。顺手还能验证重命名能力发一句把 Base64New 类重命名为 CustomBase64表明它是一个自定义的 Base64 实现。模型会调用rename_classJADX 界面里的引用会自动更新MainActivity 里的代码变成CustomBase64 nb new CustomBase64();可读性立刻上来了。这个动作能成功说明写操作链路也是通的。6. 本篇常见错排查MCP 面板显示未连接。先看服务端进程有没有起来手动在终端跑一遍uv run jadx_mcp_server.py看有没有报错。常见的是依赖没装全补pip install httpx fastmcp即可。如果终端能跑但 TRAE 连不上检查配置文件里的路径是不是绝对路径、反斜杠有没有转义。工具列表为空。服务端起来了但工具没注册多半是 JADX 插件没装好或者 JADX 没打开 APK。插件只有在有工程加载时才监听端口空窗口不生效。用curl http://127.0.0.1:9999/health确认插件侧活着。端口冲突。9999 被别的程序占了服务端启动会报错。改--jadx-port换一个端口同时 JADX 插件侧也要改两边一致才行。模型不调用工具直接瞎编。这是模型侧的问题不是 MCP 的问题。确认 TRAE 里选的模型支持工具调用Base URL 和 Key 填的是 TaoToken 的地址。如果模型不支持 function calling它就只能靠上下文猜结果自然不可靠。取到的源码是空的。通常是类名写错了混淆后的类名大小写敏感。让模型先用search_classes_by_keyword搜关键词定位再取源码比直接猜类名靠谱。重命名后引用没更新。这是 JADX 插件版本和服务端版本不匹配的典型症状把两边都升到最新版再试。排障和接入相关的配置细节接入文档里有更完整的字段说明验证模型能不能正常调工具用模型对话页面发一条简单指令最快如果你打算把逆向分析做成长期跑的 Agent 工作流Coding Plan 在额度和并发上更适合这种高频调用场景。