在鸿蒙应用开发的旅程中,HAP包的解包、打包、签名以及加固是开发者们必须掌握的关键技能。这些操作不仅关乎应用的开发与调试,更关乎应用的安全性和稳定性。今天,就让我们一起深入探索这一全流程,帮助大家更好地理解和应用这些技术。
一、HAP解包:开启应用分析的第一步
解包是分析和修改HAP包内容的起点。鸿蒙官方提供了app_unpacking_tool.jar
工具,它通常位于SDK的toolchains\lib
目录下。使用该工具进行解包的基本命令格式如下:
cmd
java -jar app_unpacking_tool.jar --mode hap --hap-path ./myapp.hap --out-path ./myapp_unpacked --force true
--mode
:固定为hap
,表示解包类型。--hap-path
:指定要解包的原始HAP文件路径。--out-path
:指定解包后内容存放的目录路径。--force
:当目标输出目录已存在时,是否强制覆盖。默认值为false
。
通过解包,开发者可以查看和修改HAP包中的资源文件、代码文件等,为后续的开发和调试做好准备。
二、HAP打包:将修改后的文件重新组合
打包是将修改后的文件重新组合成HAP包的过程。鸿蒙官方的app_packing_tool.jar
工具可用于此操作,其命令参数会根据HAP包所使用的Stage模型还是FA模型有所不同。
(一)Stage模型打包
Stage模型的核心配置文件为module.json5
,其打包命令格式如下:
cmd
java -jar app_packing_tool.jar --mode hap --json-path <module.json路径> --resources-path <资源路径> --ets-path <ets代码路径> --out-path <输出HAP路径> [其他参数] --force true
(二)FA模型打包
FA模型的核心配置文件为config.json
,其打包命令格式如下:
cmd
java -jar app_packing_tool.jar --mode hap --json-path <config.json路径> --dex-path <dex路径> --lib-path <native库路径> --resources-path <资源路径> --out-path <输出HAP路径> [其他参数] --force true
--mode
:固定为hap
,表示打包类型。--json-path
:指定配置文件路径。--resources-path
:指定资源文件目录路径。--ets-path
(仅Stage模型生效):指定ArkTS源代码目录路径。--dex-path
(FA模型常用):指定.dex文件路径。--lib-path
:指定native库文件路径。--out-path
:指定输出HAP文件路径,必须以.hap
结尾。--force
:当输出HAP文件已存在时,是否强制覆盖,默认值为false
。
通过打包,开发者可以将修改后的文件重新组合成HAP包,为后续的签名和安装做好准备。
三、HAP签名:确保应用的安全性
签名是确保HAP包安全性和完整性的重要步骤。开发者需要参考华为鸿蒙官方文档申请创建证书等,具体链接为:developer.huawei.com/consumer/cn...。
基本命令格式如下:
cmd
java -jar hap-sign-tool.jar sign-app -keyAlias <别名> -signAlg "SHA256withECDSA" -mode "localSign" -appCertFile <cer证书路径> -profileFile <p7b文件路径> -inFile <hap包路径> -keystoreFile <p12文件路径> -outFile <重签名后的hap包路径> -keyPwd <别名密码> -keystorePwd <p12密码>
-keyAlias
:密钥别名。-signAlg
:签名算法,通常使用SHA256withECDSA
。-mode
:签名模式,localSign
表示使用本地密钥库文件进行签名。-appCertFile
:cer应用证书文件路径。-profileFile
:Provision Profile文件路径。-inFile
:输入文件路径,指定需要被签名的原始HAP包路径。-keystoreFile
:密钥库文件路径。-outFile
:输出文件路径,指定签名完成后生成的新HAP包路径。-keyPwd
:密钥密码。-keystorePwd
:密钥库密码。
通过签名,开发者可以确保HAP包的安全性和完整性,防止被篡改和盗用。
四、HAP安装:将应用部署到设备
完成签名后,即可使用以下命令将HAP包安装到设备上:
cmd
hdc install new-hap-signed.hap
该命令会将签名后的HAP包安装到连接的设备上,供用户使用。
五、so库加固:提升应用的安全性
为了进一步提升HAP包的安全性,对so库进行加固是十分必要的。加固流程位于hap解包后,整体流程为:hap解包 -》对so库进行加固 -》hap打包 -》hap签名 -》hap安装。
加固工具推荐使用Virbox Protector,它提供了多种加固选项,如导入表保护、内存校验、调试器检测、移除调试信息、代码混淆和代码虚拟化等。以下是一个加固命令示例:
cmd
"C:\Program Files\senseshield\Virbox Protector 3\bin\virboxprotector_con.exe" "libc++_shared.so" -m "_ZSt14get_unexpected;_ZSt15get_new_handler" --imp-protect=1 --mem-check=1 --detect-dbg=1 --strip-dbginfo=1 --pack=0 -o protected\libc++_shared.so
--imp-protect
:导入表保护,去除程序中的导入函数和变量等敏感信息。--mem-check
:内存校验,校验程序加载时的完整性。--detect-dbg
:调试器检测,检测当前模块的进程是否被调试。--strip-dbginfo
:移除调试信息,移除ELF程序中的.debug节和静态符号表。--pack
:压缩,目前压缩和鸿蒙系统不兼容,必须设置为0。-m
:代码混淆,将函数中的指令转换为难以阅读的随机指令片段。-o
:指定保护后的输出文件路径。
在打包hap时,需提前将加固后的so库替换到原so文件位置处。
六、总结
通过上述步骤,开发者可以顺利完成鸿蒙HAP包的解包、打包、签名及加固全流程操作。这些操作不仅有助于开发者更好地理解和修改HAP包内容,还能确保应用的安全性和稳定性,为用户提供更加优质的体验。希望本文能为大家在鸿蒙应用开发的道路上提供一些帮助。