鸿蒙HAP包解包、打包、签名与加固全攻略

在鸿蒙应用开发的旅程中,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包内容,还能确保应用的安全性和稳定性,为用户提供更加优质的体验。希望本文能为大家在鸿蒙应用开发的道路上提供一些帮助。

相关推荐
wanhengidc4 小时前
云手机就是虚拟机吗?
运维·网络·安全·智能手机
W-GEO5 小时前
前端安全攻防:XSS, CSRF 等常见威胁的防范与检测指南
前端·安全·xss
华强笔记5 小时前
KGDB(Kernel GNU Debugger)工具使用方法详解
网络·安全·gnu
愿时间能学会宽恕5 小时前
SpringBoot后端开发常用工具详细介绍——SpringSecurity认证用户保证安全
spring boot·后端·安全
Highcharts.js15 小时前
Highcharts 数据源安全最佳实践:保障数据安全,助力可视化可信部署
安全·highcharts
Suckerbin16 小时前
LAMPSecurity: CTF5靶场渗透
笔记·安全·web安全·网络安全
水兵没月16 小时前
解决Win11 安全中心删掉存在隐患的工具
安全
码农101号17 小时前
运维安全04 - iptable的介绍以及使用
安全
行思理21 小时前
linux 安全与防护,全方向讲解
linux·安全·github