Skip to main content

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要求证书和应用包名要一致,如果不一致,则可能无法签名成功。

操作指引#

界面操作#

  1. 将hap包拖入到加壳工具界面,根据需求选择对应的加密选项,如图所示:

  1. 启用签名,可以填写证书信息,这样加固后的hap将带有签名;
  2. 直接安装加固后的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