基于 Yricky/ABCDE 的 OpenHarmony 逆向分析工具链
将 ABCDE 的反编译能力封装为 MCP(Model Context Protocol)服务,让 Claude、Cursor 等 LLM 客户端能够直接分析鸿蒙应用(
.abc/.hap)。
- LLM 原生设计:所有能力以 MCP Tool 形式暴露,输入输出都对 LLM 友好。
- 结构化反编译:移植自 xpanda 的控制流分析算法,输出可读性更强的
if/while/do-while结构,而非线性指令列表。 - 超大方法安全:对输出爆炸的方法实施多层防护(10 MB 服务端硬预算、100 行 LLM 展示上限、尾节点复制限制),截断时仍返回方法签名、前段代码和方法摘要。
- 交叉引用(XRef):支持查找方法的调用者,帮助 LLM 快速追踪调用链。
- HAP 全栈解析:同时支持 ABC 字节码、HAP 包结构、资源索引和混淆映射。
| 能力 | 说明 |
|---|---|
| ABC 字节码解析 | 解析方舟字节码中的类、方法、字段、字面量数组、调试信息等 |
| 结构化反编译 | 将字节码反编译为 JavaScript/TypeScript 风格代码 |
| 方法交叉引用 | 查找指定方法在哪些类/方法中被调用 |
| 字符串搜索 | 按正则搜索 ABC 中的字符串常量 |
| HAP 包解析 | 解析鸿蒙应用安装包,提取 module.json、ABC 文件、资源、混淆映射等 |
| 资源索引解析 | 解析 resources.index,支持按名称/类型搜索资源 |
| MCP 服务 | 通过 stdio JSON-RPC 为 LLM 提供 18 个标准化工具 |
- 语言:Kotlin Multiplatform(核心为 JVM)
- 构建:Gradle Kotlin DSL
- 依赖:kotlinx-serialization-json、BouncyCastle
| JDK 版本 | 支持状态 | 说明 |
|---|---|---|
| JDK 17 / 21 | ✅ 可运行 Gradle | 编译时仍需 JDK 26 toolchain,建议通过 org.gradle.java.installations.paths 配置 |
| JDK 26 | ✅ 推荐 | 当前默认 jvmToolchain(26),与项目编译目标一致 |
| JDK 27+ | ❌ 不支持 | Gradle 9.5 / Kotlin 2.4.0 尚未支持 |
当前配置:Gradle 9.5.1 + Kotlin 2.4.0 + Compose Multiplatform 1.11.1。
- JDK 17+ 可运行 Gradle;编译需要 JDK 26(推荐与本项目
jvmToolchain(26)一致) - 网络连接(首次构建需下载依赖)
./gradlew :modules:mcp:jvmRun./gradlew :modules:mcp:fatJar
java -jar modules/mcp/build/libs/mcp-*-fat.jarfat jar 会包含 abcde、resde、hapde、kotlinx-serialization、coroutines 等所有依赖。
在 .cursor/mcp.json 中添加:
{
"mcpServers": {
"abcde": {
"command": "/path/to/gradlew",
"args": [":modules:mcp:jvmRun"],
"cwd": "/path/to/abcde-mcp"
}
}
}或使用 fat jar:
{
"mcpServers": {
"abcde": {
"command": "java",
"args": ["-jar", "/path/to/abcde-mcp/modules/mcp/build/libs/mcp-0.1.0-main-fat.jar"]
}
}
}| 工具 | 功能 |
|---|---|
open_abc |
打开 ABC 文件,返回版本、类数量等基本信息 |
list_classes |
列出所有类名,支持正则过滤 |
get_class_detail |
获取类详情(父类、字段、方法列表) |
decompile_class |
反编译指定类的所有方法 |
decompile_method |
反编译指定方法 |
search_strings |
搜索字符串常量(正则匹配) |
disassemble_method |
获取方法的字节码反汇编(含参数与注释) |
get_method_info |
获取方法详情(参数名、行号、调试信息) |
get_xrefs_to_method |
查找方法的调用者(交叉引用) |
get_xrefs_to_field |
查找字段的读取者和写入者(交叉引用) |
get_xrefs_to_class |
查找类的实例化位置(交叉引用) |
get_class_hierarchy |
查询类的父类、接口、子类与接口实现者 |
search_in_method |
在方法体内按正则搜索反汇编文本,返回匹配行及上下文 |
| 工具 | 功能 |
|---|---|
open_hap |
解析 HAP 包,列出 ABC 文件和资源统计 |
get_hap_manifest |
获取 module.json 清单内容 |
get_obfuscation_map |
获取混淆映射(obfuscated → original) |
| 工具 | 功能 |
|---|---|
search_resources |
搜索资源(按名称、类型) |
resolve_resource |
解析 $string:app_name 等资源引用 |
# 运行所有反编译测试
./gradlew :modules:abcde:jvmTest --tests "me.yricky.oh.abcd.decompiler.structure.StructuredDecompilerTest.testAllAbcFiles"
# 运行单个文件测试
./gradlew :modules:abcde:jvmTest --tests "me.yricky.oh.abcd.decompiler.structure.StructuredDecompilerTest.testSpecificFile"
# 运行交叉引用测试
./gradlew :modules:abcde:jvmTest --tests "me.yricky.oh.abcd.xref.*"
# 运行 MCP 工具测试
./gradlew :modules:mcp:jvmTestmodules/
├── common/ # 通用基础类型(LEByteBuf 等)
├── abcde/ # 核心 ABC 字节码解析、反汇编、反编译库
├── resde/ # 资源索引解析(.index 文件)
├── hapde/ # HAP 包解析(.hap 文件)
└── mcp/ # MCP 服务模块
| 项目 | 说明 |
|---|---|
| Yricky/ABCDE | 基础 ABC 解析与反编译项目,本项目在其上封装 MCP 服务 |
| asmjmp0/xpanda | 已停止维护的鸿蒙反编译器,本项目的结构化控制流分析算法移植自此处 |
| skylot/jadx | Android 反编译器,本项目的交叉引用索引与缓存设计借鉴了其 UsageInfo / IUsageInfoCache 架构 |
本项目基于 Yricky/ABCDE 构建:
- 原作者:Yricky
- 原项目地址:https://github.com/Yricky/ABCDE
- 开源协议:Apache License 2.0
感谢原作者在 OpenHarmony 逆向领域的开源贡献。