Harmony 应用保护最佳实践
Harmony应用介绍#
Harmony应用是华为公司开发的再Harmony操作系统上的应用程序,一个完整的HarmonyOS应用(APP)可以由一个或多个HAP包组成。
HAP中包含了实现某个特定功能模块所需的所有文件,如代码、资源、配置文件和库,它的基本结构如下:
| 路径/文件 | 关键作用 |
|---|---|
ets/ | 存放编译后的ArkTS/JS代码(.abc字节码文件)。 |
resources/ | 包含图片、字符串、布局文件等资源文件。 |
libs/ | 存放C/C++编译的动态库(.so文件)。 |
module.json | 定义HAP包的组件、权限、设备类型等模块配置清单。 |
安全性问题#
hap包中的.abc文件包含核心逻辑,虽然被编译为字节码,但随着市面上的反编译工具(比如jadx等)逐渐成熟,仍有被反编译和逆向分析的风险。
功能介绍#
基础功能#
代码对象名称混淆#
对 hap 中的 abc 字节码文件里的对象、方法和类名进行混淆,将其修改为无意义的字符串名称,可以无法直观的找到类名的调用关系,防止名称暴漏。
原程序反编译效果,如图所示:

保护后程序反编译效果,如图所示:

调试器检测#
调试是逆向分析时的重要手段,可以在庞大的二进制指令中迅速定位到相关的逻辑。
调测调试器,可以检测当前模块的进程是否被 DevEco Studio等工具调试,被调试则退出阻止运行。

签名设置#
若勾选启用签名,签名证书选择和DevEco Studio编译hap时的证书一致,则程序保护生成的hap默认已签名;
若不勾选启用签名,则程序保护生成的hap默认不签名,需自行在对加固后的hap手动签名。
| 证书信息 | 描述 |
|---|---|
| Keystore 路径(*.p12) | 选择密钥库文件,文件后缀为.p12。 |
| Keystore 密码 | 输入密钥库密码 |
| 密钥别名 | 输入密钥的别名信息 |
| 别名密码 | 输入密钥的密码 |
| Profile文件(*.p7b) | 选择申请的发布Profile文件,文件后缀为.p7b。 |
| 证书路径(*.cer) | 选择申请的发布数字证书文件,文件后缀为.cer |
注意:
1)可以在HarmonyOS官网上进行申请证书;
2)Hamrony要求证书和应用包名要一致,如果不一致,则可能无法签名成功。
操作指引#
界面操作#
- 将hap包拖入到加壳工具界面,根据需求选择对应的加密选项,如图所示:

- 启用签名,可以填写证书信息,这样加固后的hap将带有签名;
- 直接安装加固后的hap即可运行。
命令行操作#
命令行工具#
Virbox Protector 的命令行工具 virboxprotector_con 的默认路径位于:
Windows:C:\Program Files\senseshield\Virbox Protector 3\bin
Linux:/usr/share/virboxprotector/bin
macOS:/Applications/Virbox Protector 3.app/Contents/MacOS/bin使用配置文件保护
使用工具界面进行保护,在被保护的程序旁边会生成 .ssp 文件,然后调用virboxprotector_con:
virboxprotector_con <input_file> -o <output_file>virboxprotector_con 会自动查找 <input_file>.ssp 作为配置文件开始保护。
无配置文件保护
如果没有配置文件,virboxprotector_con --help=hap可查看参数选项,参考命令行选项。
以上两种方式任选其一即可。
命令行选项#
加密选项
| 选项 | 参数 | 默认选项 |
|---|---|---|
| 代码对象名称混淆 | --name-obfuscation= | 0 |
| 调试器检测 | --anti-debugging= | 0 |
举例
对hap保护,勾选代码对象名称混淆、调试器检测选项,不启用签名,命令参考如下:virboxprotector_con test.hap --name-obfuscation=1 --anti-debugging=1 -o protector/test.hap签名选项
| 选项 | 参数 |
|---|---|
| 启用签名 | --sign= |
| Keystore 路径(*.p12) | --ks= |
| Keystore 密码 | --ks-pw= |
| 密钥别名 | --key-alias= |
| 别名密码 | --key-pw= |
| Profile文件(*.p7b) | --profile= |
| 证书路径(*.cer) | --certfile= |
举例
对hap保护,勾选代码对象名称混淆、调试器检测选项,启用签名,命令参考如下:virboxprotector_con test.hap --name-obfuscation=1 --anti-debugging=1 --sign=1 --ks=debug.p12 --ks-pw=123456 --key-alias=sense --key-pw=123456 --profile=Debug.p7b --certfile=debug.csr -o protector/test.hap