首页
社区
课程
招聘
[原创] xpanda-mcp:鸿蒙 App 逆向分析mcp
发表于: 2026-6-22 16:00 2388

[原创] xpanda-mcp:鸿蒙 App 逆向分析mcp

2026-6-22 16:00
2388

大家好!今天和大家分享一个刚刚开源的鸿蒙反编译 MCP (Model Context Protocol) 服务 —— xpanda-mcp。


为什么需要它?

随着 HarmonyOS 的普及,鸿蒙应用的逆向与安全审计需求日益增加。然而,鸿蒙的 ArkTS 字节码 (ABC) 目前还没有比较普及的反编译MCP工具,以支持AI应用安全审计。

为了解决这个痛点,我把 xpanda 反编译引擎封装成了 MCP 服务。现在,你可以让 Claude Desktop、Cursor、Windsurf 等 AI 助手直接调用反编译引擎,以“上帝视角”自动扫描、索引、反编译以及分析整个鸿蒙 HAP 包的逻辑,甚至让 AI 帮你自动还原调用链!


???? 核心功能特性

  1. HAP 自动解包与多线程索引:直接给 AI 传入 .hap 包路径,后台自动解压、提取 .abc 并建立全局索引(测试 9000+ 类的包,全量索引只需 2.4 秒)。
  2. 高保真 Fake JS 还原:将复杂的字节码结构一键还原为人类可读的伪 JavaScript (Fake JS) 代码。
  3. 启发式交叉引用 (Xrefs):不仅支持强引用的方法/属性追踪,还通过全局扫描 String Pool 建立启发式关系网,彻底解决 ArkTS 动态加载导致的调用图断裂问题。
  4. 全局搜索引擎:
    • 正则符号搜索 (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年11月13日实地,远程教学同时开班, 第57期)

收藏
点赞 ・3
打赏
分享
最新回复 (4)
雪    币: 21
活跃值: (1239)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2 楼
鸿蒙还是没啥热度啊
2026-8-26 16:34
0
雪    币: 851
活跃值: (943)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3 楼
asmjmp0 鸿蒙还是没啥热度啊
包都拿不到,没热度正常
2026-9-8 11:32
0
雪    币: 21
活跃值: (1239)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4 楼
鸡小葵 包都拿不到,没热度正常
赶紧接入REA蹭一波热度,哈哈哈
2026-10-16 10:52
0
雪    币: 21
活跃值: (1239)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5 楼
608K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6S2M7$3#2B7L8i4l9H3i4K6u0r3P5s2m8S2L8X3c8S2i4K6t1$3L8X3u0K6M7q4)9K6b7W2!0q4y4W2)9&6y4g2!0n7y4q4!0q4y4q4!0n7z5q4!0m8b7g2!0q4z5g2!0m8x3g2!0n7z5g2!0q4y4#2)9&6b7W2!0m8c8g2!0q4y4g2!0n7y4#2!0n7x3W2!0q4y4#2!0n7b7W2)9^5c8W2!0q4y4#2)9&6y4q4!0m8z5s2c8K6i4@1f1&6i4K6R3%4i4K6S2p5i4@1f1#2i4K6R3$3i4K6V1&6i4@1f1@1i4@1u0m8i4K6R3$3i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1@1i4@1t1&6i4K6W2r3i4@1f1$3i4K6V1@1i4@1q4r3i4@1f1$3i4K6S2o6i4K6R3I4L8h3y4H3i4@1f1@1i4@1u0m8i4K6R3$3i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1#2i4@1t1&6i4@1t1$3i4@1f1$3i4K6W2o6i4K6R3&6N6$3g2T1i4@1f1%4i4@1q4n7i4@1q4r3i4@1f1%4i4K6W2m8i4K6R3@1i4@1f1#2i4K6S2r3i4K6S2p5i4@1f1%4i4@1u0o6i4K6V1$3i4@1f1^5i4@1q4r3i4K6V1I4i4@1f1#2i4K6V1&6i4@1p5^5i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1#2i4@1q4q4i4K6S2o6i4@1f1#2i4K6R3#2i4@1p5^5i4@1f1^5i4@1t1%4i4K6V1I4i4@1f1#2i4K6W2o6i4@1p5^5i4@1f1$3i4@1t1#2i4K6S2r3i4@1f1^5i4@1p5%4i4K6R3^5i4@1f1#2i4K6V1&6i4@1p5^5i4@1f1@1i4@1t1^5i4K6S2m8i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1$3i4@1q4o6i4@1p5J5i4@1f1^5i4@1u0r3i4K6S2q4i4@1f1^5i4@1q4r3i4K6V1#2i4@1f1^5i4@1q4r3i4K6V1#2i4@1f1K6i4K6R3H3i4K6R3J5K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6@1k6h3&6U0k6h3&6@1i4K6u0W2K9X3#2H3x3q4)9J5k6i4c8G2M7q4)9J5c8Y4S2H3j5h3&6V1j5g2!0q4x3#2)9^5x3q4)9^5x3W2!0q4y4W2)9&6b7#2)9^5z5g2!0q4y4g2!0m8y4g2!0n7c8q4!0q4y4#2)9&6b7g2)9^5y4q4!0q4y4W2)9^5x3#2!0n7x3#2!0q4y4W2!0n7x3#2)9&6y4g2!0q4y4g2)9^5c8W2!0m8c8W2!0q4y4q4!0n7b7W2!0m8y4g2!0q4y4#2)9&6b7W2!0n7y4q4!0q4y4W2)9^5c8g2!0m8y4g2!0q4y4W2)9^5c8W2)9&6x3s2m8J5i4@1f1@1i4@1t1^5i4K6R3H3i4@1f1^5i4@1t1#2i4@1t1%4i4@1f1#2i4@1q4q4i4K6S2o6i4@1f1#2i4K6V1$3i4K6R3@1i4@1f1K6i4K6R3H3i4K6R3J5
5天前
0
游客
登录 | 注册 方可回帖
返回