ARTICLE · 1158457
鸿蒙NEXT字节码还原工具:安装包直接还原成 ArkTS 源码

他晓鸿蒙NEXT字节码还原工具:安装包直接还原成 ArkTS 源码
选型纠结 · 三层架构 · 还原能力全盘点 | 实战工具分享
做逆向分析的朋友都知道,看反编译出来的代码,最折磨的不是代码本身,是看代码的工具。
这期聊聊我做的鸿蒙 NEXT 字节码还原工具——它能把鸿蒙的安装包直接还原成 ArkTS 源码。但今天不聊还原算法,聊一个更实际的问题:还原出来的源码,用什么形式给人看?
01 当时最纠结的一件事:源码用什么形式给人看
命令行版本做完之后,我卡在同一个地方:安全分析师拿到结果是要一行一行分析的,光吐一堆文件给他,体验太差,得有个正经的阅读界面。
当时摆在我面前两条路。第一条,传统桌面软件,用 Java 自家的 Swing 或者 JavaFX。
第二条,也是我最后选的:Electron。使用的编辑器是 VS Code 同款,Monaco Editor。它可以语法高亮、代码缩略、Ctrl 加点击跳定义,搜索,这些都是基本配置。不用自己造轮子。这工具的目标用户是安全分析师,很多人在内网、在隔离环境里干活。工具必须拷过去就能跑,不能指望装一堆依赖。所以同一个 jar 包,两种用法。通过图形界面看代码;命令行加参数跑,就是纯命令行工具,直接吐源码,方便接进自动化流程。
02 整个工具拆开,就三层
最底下是还原引擎:吃进去鸿蒙的 .abc 字节码,吐出来 ArkTS 源码。纯 Java 实现,不依赖任何外部工具,同一份输入跑一万遍,输出一个字节都不差——这个确定性本身就可以拿来做健康检查。
中间是拆包层:实际场景里没人给你裸的 .abc 文件,给的都是安装包。这一层负责判型(zip 族 / tar.gz / 裸 abc 三种魔数交叉校验)、拆包、找到里面的字节码。命令行和图形界面共用这一层,逻辑只写一份。
最上面是两个壳:一个壳是命令行,一个壳是浏览器界面,两个壳底下是同一个引擎。同一个 jar 包,双击它就是图形界面看代码;命令行加参数跑,就是纯命令行工具直接吐源码,方便接进自动化流程。一份代码,两拨人都照顾到了。
03 还原能力:不是指令翻译,是把结构拼回去
还原源码不是简单的指令翻译。if else、三元表达式、循环、可选链、async await、try catch——这些语法结构都是真正还原成源码原来的样子,按原来的包结构摆成一棵文件树。
04 界面长什么样:标准 IDE 布局
左边文件树,中间代码,右边信息面板,跟平时写代码的布局一样。文件树里每个 .ets 文件能展开看大纲——有哪些类、哪些方法,点一下直接跳过去。全文搜索支持正则,Ctrl 点击跳定义,还原完打包 zip 下载。关掉的项目还能重开,保存了进度的话,连你上次光标停在哪一行都给你恢复。
下面是一个真实 .hap 包的还原效果——左边是还原出的文件树,右边信息面板直接给出包信息和还原状态:

05 另一种形态:har 包源码直读
有些 .har 包里面根本没有字节码、直接带着源码发布。工具也能识别这种形态,原样抽出来给你看,右上角会明示「源码直读」。能拿到的部分一个不落,拿不到的部分明说:

这就是一个「鸿蒙安装包塞进去,源码给你摆在 VS Code 同款界面里看」的工具。遇到加固的、加密的、奇形怪状的包,宁可明说「这块拿不到」,也绝不编东西糊弄你。
这期视频的完整讲解已发视频号,搜「他晓」就能找到。

备注「他晓」邀请进群![]() | ![]() |
长按识别二维码关注
© 2026 他晓 · All Rights Reserved

