-
-
[原创] xpanda-mcp:鸿蒙 App 逆向分析mcp
-
发表于: 4天前 857
-
大家好!今天和大家分享一个刚刚开源的鸿蒙反编译 MCP (Model Context Protocol) 服务 —— xpanda-mcp。
- GitHub 仓库地址:ff6K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6v1K9f1A6#2L8X3#2G2i4K6u0r3P5s2m8S2L8X3c8S2i4K6u0V1L8h3y4H3
- 底层反编译引擎:基于鸿蒙反编译器 xpanda 扩展构建
为什么需要它?
随着 HarmonyOS 的普及,鸿蒙应用的逆向与安全审计需求日益增加。然而,鸿蒙的 ArkTS 字节码 (ABC) 目前还没有比较普及的反编译MCP工具,以支持AI应用安全审计。
为了解决这个痛点,我把 xpanda 反编译引擎封装成了 MCP 服务。现在,你可以让 Claude Desktop、Cursor、Windsurf 等 AI 助手直接调用反编译引擎,以“上帝视角”自动扫描、索引、反编译以及分析整个鸿蒙 HAP 包的逻辑,甚至让 AI 帮你自动还原调用链!
???? 核心功能特性
- HAP 自动解包与多线程索引:直接给 AI 传入
.hap包路径,后台自动解压、提取.abc并建立全局索引(测试 9000+ 类的包,全量索引只需 2.4 秒)。 - 高保真 Fake JS 还原:将复杂的字节码结构一键还原为人类可读的伪 JavaScript (Fake JS) 代码。
- 启发式交叉引用 (Xrefs):不仅支持强引用的方法/属性追踪,还通过全局扫描 String Pool 建立启发式关系网,彻底解决 ArkTS 动态加载导致的调用图断裂问题。
- 全局搜索引擎:
- 正则符号搜索 (
search_symbol):支持使用正则表达式在全局检索类名、方法名或属性。 - 指令与文本搜索 (
search_text):可全局检索特定的敏感字符串、URL、或者特定字节码指令(如ldlazymodulevar)。
- 正则符号搜索 (
实战演示:工具调用与返回结果展示
当你在 Cursor/Claude 中配置好本服务后,AI 可以自主调用以下工具,下面是真实的返回数据:
1️⃣ 全局正则符号定位:查找 MainAbility
当你想在几万个混淆类中定位入口 Ability 时,AI 会调用 search_symbol:
- 输入参数:
{"namePattern": ".*MainAbility.*", "type": "class"} - 工具返回:
Search Symbol Results (matching '.*MainAbility.*', type: 'class', max 150): - [class] L&phone/src/main/ets/Ability/MainAbility&;
2️⃣ 全局字符串定位:查找敏感日志 WalletLog 的引用
传统的静态分析无法找出谁调用了动态绑定的日志类,而 xpanda-mcp 结合 String Pool 的启发式分析瞬间就能定位:
- 输入参数:
{"query": "WalletLog", "searchIn": "string"} - 工具返回:
Search Text Results (matching 'WalletLog', searchIn: 'string', max 150): - [string] "WalletLog" referenced in L&@wallet/access-card/src/main/ets/a/d/e&1.0.0;->#~@0>#match - [string] "WalletLog" referenced in L&@wallet/access-card/src/main/ets/a/d/e&1.0.0;->#~@0>#process - [string] "WalletLog" referenced in L&@wallet/access-card/src/main/ets/a/d/f9/a76&1.0.0;->#~@0>#aboutToAppear - [string] "WalletLog" referenced in L&@wallet/access-card/src/main/ets/a/d/f9/x65/v82&1.0.0;->#~@0>#checkCardNum - ... (省略部分匹配项)
3️⃣ 指令级特征查找:搜索使用了“动态懒加载”的函数
如果我们想在全局审计中找出哪些地方存在动态模块导入,可以直接通过 search_text 检索底层字节码指令:
- 输入参数:
{"query": "ldlazymodulevar", "searchIn": "code"} - 工具返回:
Search Text Results (matching 'ldlazymodulevar', searchIn: 'code', max 150): - [code] L&@wallet/access-card/src/main/ets/a/d/d74&1.0.0;->#~@0>#doChange (contains query in bytecode) - [code] L&@wallet/access-card/src/main/ets/a/d/e&1.0.0;->#~@0>#match (contains query in bytecode) - [code] L&@wallet/access-card/src/main/ets/a/d/e&1.0.0;->func_main_0 (contains query in bytecode) - ... (找到数十处包含懒加载指令的方法)
之后,你可以直接对 AI 下达指令:
“帮我反编译包含
ldlazymodulevar并且引用了WalletLog的那几个函数,并分析它们是在动态加载什么模块。”
AI 就会自动调用get_method_source并给出完整的逻辑分析,体验非常丝滑!
????️ 快速上手
我们已经打包好了独立的 Fat JAR,不需要复杂的编译流程,只需本地有 Java 环境即可使用。
1. 编译 (或直接在 GitHub Release 下载打包好的 jar)
./gradlew :mcp:jar
编译生成的单文件 JAR 路径为:mcp/build/libs/xpanda-mcp.jar
2. 在 Claude Desktop 中配置
编辑 Claude 的配置文件 claude_desktop_config.json:
{
"mcpServers": {
"xpanda-mcp": {
"command": "java",
"args": [
"-jar",
"/你的绝对路径/xpanda-mcp/mcp/build/libs/xpanda-mcp.jar"
]
}
}
}
重启 Claude Desktop 即可激活 14 个高能鸿蒙分析工具!
项目链接
如果你对鸿蒙安全研究、反编译感兴趣,欢迎来点个 Star 支持一下,也欢迎提 Issue 和 PR 共同完善项目!
GitHub: JiJunmo/xpanda-mcp
[招生]科锐逆向工程师培训(2026年7月3日实地,远程教学同时开班, 第56期)!