mcpField
J
JADX-MCP-SERVER (Part of Zin's Reverse Engineering MCP Suite)

JADX-MCP-SERVER (Part of Zin's Reverse Engineering MCP Suite)

本地服务
github.com/zinja-coder安全8151 周前更新

关于 JADX-MCP-SERVER (Part of Zin's Reverse Engineering MCP Suite)

JADX-MCP-SERVER 是 Python MCP 服务,可将 LLM 客户端连接到 JADX-AI-MCP 插件,以实时分析反编译的 Android 应用。它提供代码、清单、资源、交叉引用和调试器数据,并支持部分编辑操作。

主要功能

  1. 01获取反编译类和方法
  2. 02检查清单与应用资源
  3. 03搜索类、方法和引用
  4. 04读取调试器堆栈、线程和变量
  5. 05重命名变量并添加代码注释

适用场景

  1. 01审查反编译的 Android 代码以查找漏洞
  2. 02追踪应用类和方法之间的引用
  3. 03检查 APK 清单和资源文件
  4. 04利用调试器状态理解应用执行过程

MCP 相关

该服务通过 HTTP 调用 JADX-AI-MCP 插件提供查询和修改工具。MCP 客户端可获取实时反编译应用上下文和调试器信息。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

JADX-MCP-SERVER(Zin 逆向工程 MCP 套件的一部分)

⚡ 全自动 MCP 服务,旨在与 JADX-AI-MCP Plugin 通信,使用 Claude 等大模型分析 Android APK——轻松发现漏洞、解析清单并进行逆向工程。

GitHub contributors JADX-AI-MCP GitHub contributors JADX-MCP-SERVER GitHub all releases GitHub release (latest by SemVer) Latest release Java 11+ Python 3.10+ License

⭐ 贡献者

感谢这些优秀人士的贡献 ⭐

README 配图
ljt270864457
README 配图
badmonkey7
README 配图
p0px
README 配图
bx33661
README 配图
Haicaji
README 配图
Mostafa Nazari
README 配图
ChineseAStar
README 配图
cyal1
README 配图
tainn
README 配图
ZERO-A-ONE
README 配图
neoz
README 配图
SamadiPour
README 配图
wuseluosi
README 配图
CainYzb
README 配图
tbodt
README 配图
LilNick0101
README 配图
lwsinclair
README 配图
LYC-Android
README 配图
zbhello
README 配图
1yearning1
README 配图
mhsjzsq
README 配图
darkblack1234
README 配图
Merrg1n
横幅
ReadTheDocs:
  • 我们现已在 Read The Docs 上线:

立即下载:https://github.com/zinja-coder/jadx-ai-mcp/releases

🤖 什么是 JADX-MCP-SERVER?

JADX MCP Server 是一个独立的 Python 服务,可通过 MCP(Model Context Protocol)与修改版的 jadx-gui(参见:jadx-ai-mcp)交互。它让大模型能够实时与反编译后的 Android 应用上下文通信。

🤖 什么是 JADX-AI-MCP?

JADX-AI-MCP 是 JADX 反编译器的一个插件,可直接集成 Model Context Protocol (MCP),为 Claude 等大模型提供实时逆向工程支持。

可以这样理解:“反编译 → 上下文感知代码审查 → AI 建议”——全部实时完成。

高级时序图
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

观看演示!

  • 执行快速分析

https://github.com/user-attachments/assets/b65c3041-fde3-4803-8d99-45ca77dbe30a

  • 快速查找漏洞

https://github.com/user-attachments/assets/c184afae-3713-4bc0-a1d0-546c1f4eb57f

  • 支持多个 AI Agent

https://github.com/user-attachments/assets/6342ea0f-fa8f-44e6-9b3a-4ceb8919a5b0

  • 分析 APK 资源

https://github.com/user-attachments/assets/f42d8072-0e3e-4f03-93ea-121af4e66eb1

  • 使用 JADX 调试 APK 时的 AI 助手

https://github.com/user-attachments/assets/2b0bd9b1-95c1-4f32-9b0c-38b864dd6aec

它由两个工具组合而成:

  1. JADX-AI-MCP
  2. JADX MCP SERVER

Zin MCP 套件

当前 MCP 工具

以下 MCP 工具可用:

默认情况下,返回反编译源码的工具会剥离 Kotlin 编译器元数据(@Metadata / @DebugMetadata,通常占 Kotlin 转储内容的 25-50%);传入 slim=False 可获取 原始转储。剥离元数据不会改变行号,因此 with_line_numbers=True 和 add_comment(line=...) 仍可正常使用。

  • fetch_current_class(slim=True) — 获取所选类的类名和完整源码
  • get_selected_text() — 获取当前选中的文本
  • get_all_classes() — 列出项目中的所有类
  • get_class_source(slim=True) — 获取指定类的完整源码(使用 with_line_numbers=True 为行编号,以便用于 add_comment(line=...))
  • get_method_by_name(slim=True) — 获取方法源码
  • search_method_by_name() — 在各个类中搜索方法
  • search_classes_by_keyword() — 搜索源码中包含特定关键词的类(支持分页)
  • get_methods_of_class() — 列出类中的方法
  • get_fields_of_class() — 列出类中的字段
  • get_smali_of_class() — 获取类的 smali 代码
  • get_main_activity_class(slim=True) — 获取 jadx 中 AndroidManifest.xml 文件提到的主 Activity
  • get_main_application_classes_code(slim=True) — 根据 AndroidManifest.xml 中定义的包名,获取所有主应用类的代码
  • get_main_application_classes_names() — 根据 AndroidManifest.xml 中定义的包名,获取所有主应用类的名称
  • get_android_manifest() — 获取并返回 AndroidManifest.xml 的内容
  • get_manifest_component - 获取指定的清单组件,而非整个清单文件
  • get_strings() : 获取 strings.xml 文件
  • get_all_resource_file_names() : 获取应用中所有资源文件的名称
  • get_resource_file() : 获取资源文件内容
  • rename_variable() : 重命名方法中的变量
  • add_comment() : 为类、方法、字段或单行代码(line=)添加注释;注释会显示在 JADX-GUI 中并随项目保存(对同一目标重新添加注释会更新原注释,空注释则会将其删除)
  • list_comments() : 列出项目中保存的注释,可选择只筛选一个类
  • debug_get_stack_frames() : 获取 jadx 调试器中的堆栈帧
  • debug_get_threads() : 获取 jadx 调试器中的线程信息
  • debug_get_variables() : 获取 jadx 调试器中的变量
  • xrefs_to_class() : 查找对类的所有引用(返回方法级和类级引用,支持分页)
  • xrefs_to_method() : 查找对方法的所有引用(包括与重写相关的方法,支持分页)
  • xrefs_to_field() : 查找对字段的所有引用(返回访问该字段的方法,支持分页)

注意:已在 Claude Desktop 上测试。未来可能会测试对其他大模型的支持。

🗒️ 示例提示词

🔍 基础代码理解

"用一段话解释这个类的作用。"

"总结此方法的职责。"

"这个类中是否存在混淆?"

"列出这个类可能需要的所有 Android 权限。"

🛡️ 漏洞检测

"此方法中是否存在不安全的 API 用法?"

"检查这个类中是否有硬编码的密钥或凭据。"

"此方法在使用用户输入前是否对其进行了清理?"

"这段代码可能引入哪些安全漏洞?"

🛠️ 逆向工程辅助工具

"反混淆并将类和方法重命名为易读的名称。"

"你能推断出这个 smali 方法原本的用途吗?"

"这个类看起来属于哪些库或 SDK?"

📦 静态分析

"列出这个类中所有与网络相关的 API 调用。"

"找出文件 I/O 操作及其潜在风险。"

"此方法是否会泄露设备信息或个人身份信息(PII)?"

🤖 AI 代码修改

"重构此方法以提高可读性。"

"为这段代码添加注释,解释每个步骤。"

"将这个 Java 方法改写为 Python,以便进行分析。"

📄 文档与元数据

"为所有方法生成 Javadoc 风格的注释。"

"这个类可能属于哪个包或应用组件?"

"你能识别出 Android 组件类型吗(Activity、Service 等)?"

🐞 调试器助手

   "Fetch stack frames, varirables and threads from debugger and provide summary"

   "Based the stack frames from debugger, explain the execution flow of the application"

   "Based on the state of variables, is there security threat?"

🛠️ 入门

点击此处查看

演示:在本地执行代码审查以查找漏洞

https://github.com/user-attachments/assets/4cd26715-b5e6-4b4b-95e4-054de6789f42

高级 CLI 选项——了解各标志

这里有两个独立的连接,各自都有自己的主机/端口:

┌─────────────┐    --host / --port     ┌──────────────────┐   --jadx-host / --jadx-port   ┌──────────────────┐
│  LLM Client │ ◄──────────────────►   │  jadx-mcp-server │ ──────────────────────────►   │  JADX-GUI Plugin │
│  (Claude,   │   Where the MCP server │                  │   Where the MCP server looks  │  (jadx-ai-mcp)   │
│   Codex..)  │   LISTENS for clients  │                  │   for the JADX plugin         │                  │
└─────────────┘                        └──────────────────┘                               └──────────────────┘
标志默认值控制项
--http关闭使用 HTTP 传输,而非 stdio
--host127.0.0.1MCP 服务的监听地址(供大模型客户端连接的绑定地址)
--port8651MCP 服务的监听端口
--jadx-host127.0.0.1JADX 插件所在位置(目标 JADX-GUI 所在机器)
--jadx-port8650JADX 插件使用的端口
用法示例

场景 1——所有组件都在同一台机器上(最常见):

# Default: MCP server on localhost:8651, connects to JADX plugin on localhost:8650
uv run jadx_mcp_server.py --http

场景 2——Docker 容器或 WSL(MCP 服务可从主机网络访问):

# MCP server listens on ALL interfaces so the host can reach it
# JADX plugin is still on the same machine
uv run jadx_mcp_server.py --http --host 0.0.0.0

场景 3——JADX-GUI 在另一台机器上运行(例如远程 VM):

# MCP server runs locally, but connects to JADX plugin on a remote machine
uv run jadx_mcp_server.py --http --jadx-host 192.168.1.100

场景 4——完整远程设置(所有组件都在不同机器上):

# MCP server listens on all interfaces on port 9999
# JADX plugin is on a different machine at 192.168.1.100:8652
uv run jadx_mcp_server.py --http --host 0.0.0.0 --port 9999 --jadx-host 192.168.1.100 --jadx-port 8652

注意

⚠️ 安全警告——远程绑定

使用 --host 0.0.0.0(或任何非 localhost 地址)时,MCP 服务会在所有网络接口上通过不带身份验证的纯 HTTP进行监听。这意味着:

  • 网络上的任何人都可以连接并调用所有 MCP 工具
  • 没有 TLS 加密,流量可能会被拦截
  • 攻击者可以利用该服务读取反编译代码、重命名类/方法以及访问调试信息

缓解措施:

  • 仅在可信的隔离网络上绑定到 0.0.0.0(例如 Docker 网桥、本地 VM)
  • 使用防火墙限制对 MCP 端口的访问
  • 可以考虑使用 SSH 隧道:ssh -L 8651:127.0.0.1:8651 remote-host

同样,--jadx-host 使用非 localhost 地址时,MCP 服务会向该主机发送未经身份验证的 HTTP 请求。请确保目标主机可信。

使用任何兼容 OpenAI 的模型驱动服务

支持 MCP 的应用可直接连接。对于其他所有支持 POST /v1/chat/completions 的服务—— OpenRouter、LiteLLM、vLLM、Ollama 的 OpenAI 层、OmniRoute 等——examples/openai_compatible_client.py 是一个参考适配器:它连接到正在运行的 jadx_mcp_server.py --http,将 MCP 工具列表转换为 OpenAI 函数调用工具,并循环执行调用 → 执行 → 反馈,直到模型给出回答。

# terminal 1
uv run jadx_mcp_server.py --http --host 127.0.0.1 --port 9000

# the example needs the openai SDK; the server itself does not
pip install -r examples/requirements.txt

# OpenAI
OPENAI_API_KEY=sk-... python examples/openai_compatible_client.py \
  --prompt "What does com.example.app.MainActivity do?"

# a local gateway (any placeholder key works)
OPENAI_BASE_URL=http://127.0.0.1:11434/v1 OPENAI_API_KEY=ollama OPENAI_MODEL=llama3.1 \
  python examples/openai_compatible_client.py

# show the tool schema the model is offered, without calling a model at all
python examples/openai_compatible_client.py --list-tools

--base-url、--api-key 和 --model(或 OPENAI_BASE_URL / OPENAI_API_KEY / OPENAI_MODEL 环境变量)用于指定任意服务提供商。--max-steps 限制一个问题最多可以进行多少轮工具调用,--max-tool-chars 则会截断单个结果,避免某个大型类的转储撑爆模型的上下文。省略 --prompt 运行,即可进入交互会话。

🛣️ 未来路线图

  • 添加对 apktool 的支持

  • 添加对 hermes 代码(ReactNative Application)的支持

  • 添加 Docker 支持

  • 添加更多实用的 MCP 工具

  • 让 LLM 能够在 JADX 上修改代码

  • 添加提示词模板,让 LLM 能够将 Android APK 文件作为资源访问

  • 构建 MCP 客户端以支持本地 LLM

  • 最终目标:让所有 Android 逆向工程和 APK 修改工具通过单个 MCP 服务连接,尽可能仅凭直觉就能轻松地对 APK 文件进行逆向工程。

贡献者须知

  • 与 JADX-AI-MCP 相关的文件可在此处找到

  • 与 jadx-mcp-server 相关的文件仅在此仓库中。

🙏 致谢

本项目是 JADX 的一个插件。JADX 是一款出色的开源 Android 反编译器,由 @skylot 创建并维护。所有核心反编译逻辑均归其所有。我只是扩展了它,使其支持具备 AI 能力的 MCP 服务。

📎 原始 README(JADX)

此处包含 jadx 的原始 README.md,供参考并致谢。

这个 MCP 服务得益于 JADX-GUI 的可扩展性和出色的 Android 逆向工程社区。

也特别感谢 @aaddrick 为基于 Debian 的 Linux 开发 Claude 桌面版。

最后,感谢 @anthropics 开发 Model Context Protocol,以及 @FastMCP 团队。

还要感谢所有开源维护者和贡献者,是他们开发了让此类项目成为可能的库和依赖项。

已通过审计并获得评估徽章

MseeP.ai 安全评估徽章

感谢 Mseep.net 进行审计并提供评估徽章。

依赖项

本项目使用了以下优秀的库。

📄 许可证

此插件沿用原始 JADX 仓库的 Apache 2.0 License。

⚖️ 法律警告

免责声明

工具 jadx-ai-mcp 和 jadx_mcp_server 仅供教育、研究和道德安全评估之用。本工具按“原样”提供,不附带任何明示或默示的保证。用户须全权负责确保使用这些工具的方式符合所有适用的法律、法规和道德准则。

使用 jadx-ai-mcp 或 jadx_mcp_server 即表示你同意仅在你获准测试的环境中使用,例如你拥有的应用,或已获得明确分析许可的应用。严禁将这些工具用于未经授权的逆向工程、侵犯知识产权或恶意活动。

对于因使用或滥用这些工具而导致的任何损害、数据丢失、法律后果或其他后果,jadx-ai-mcp 和 jadx_mcp_server 的开发者概不负责。用户须对自己的行为及其造成的任何影响承担全部责任。

请负责任地使用。尊重知识产权。遵循道德黑客实践。


🙌 贡献或支持

  • 觉得有用?点个 ⭐️
  • 有想法?提交一个 issue 或 PR
  • 基于此构建了项目?给我发私信或提及我——我会将其添加到 README 中!

为逆向工程和 AI 社区倾情打造 ❤️

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。