首页
社区
课程
招聘
[原创] xpanda-mcp:鸿蒙 App 逆向分析mcp
发表于: 4天前 857

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

4天前
857

大家好!今天和大家分享一个刚刚开源的鸿蒙反编译 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年7月3日实地,远程教学同时开班, 第56期)!

收藏
免费 0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回