鸿蒙hap包的解包及打包流程

本文阅读 9 分钟
首页 资讯 正文

注意:为了保证通用性和准确性,本次解包、打包和签名等工具均使用鸿蒙官方提供的工具。

hap解包

介绍

app_unpacking_tool.jar是鸿蒙提供的解包工具,通常位于 SDK 的 toolchains\lib 目录下;

命令

基本命令格式:

java -jar app_unpacking_tool.jar --mode hap --hap-path ./myapp.hap --out-path ./myapp_unpacked --force true

示例参考:

"F:\Program Files\Huawei\DevEco Studio\jbr\bin\java.exe" -jar "D:\Desktop\apks_sign\hongmeng-jinyue\app_unpacking_tool.jar" --mode hap --hap-path entry-default-signed.hap --out-path entry-default-signed --force true

参数说明:

参数
是否必选
描述
--mode
解包类型,此处固定为 hap
--hap-path
指定要解包的原始 HAP 文件的路径。
--out-path
指定解包后内容存放的目录路径。
--force
如果为 true,当目标输出目录已存在时,会强制覆盖。默认值为 false

上述列出的只是常用参数,如果需要更详细的参数请参考鸿蒙官网文档。

hap打包

介绍

app_packing_tool.jar是鸿蒙提供的打包工具,通常位于 SDK 的 toolchains\lib 目录下;

使用 app_packing_tool.jar 来打包 HAP 包时,命令参数会根据 HAP 包所使用的Stage模型还是 FA模型有所不同。

一般来说通过核心配置文件可以判断当前hap包是FA模型还是Stage模型,比如FA模型的核心配置文件一般命名为config.json

Stage模型的核心配置文件一般命名为module.json5

模型

stage模型

基本命令格式:

java -jar app_packing_tool.jar --mode hap --json-path <module.json路径> --resources-path <资源路径> --ets-path <ets代码路径> --out-path <输出HAP路径> [其他参数] --force true

示例参考:

"F:\Program Files\Huawei\DevEco Studio\jbr\bin\java.exe" -jar "D:\Desktop\apks_sign\hongmeng-jinyue\app_packing_tool.jar" --mode hap --json-path "D:\Desktop\Android_so\entry-default-signed\module.json" --resources-path "D:\Desktop\Android_so\entry-default-signed\resources" --ets-path "D:\Desktop\Android_so\entry-default-signed\ets" --lib-path "D:\Desktop\Android_so\entry-default-signed\libs"  --index-path "D:\Desktop\Android_so\entry-default-signed\resources.index" --pack-info-path "D:\Desktop\Android_so\entry-default-signed\pack.info" --out-path repacked.hap --force true

FA模型

基本命令格式:

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
配置文件路径。Stage 模型为 module.json,FA 模型为 config.json

--resources-path
资源文件(如图片、字符串等)的目录路径。

--ets-path
ArkTS(.ets)源代码的目录路径。
仅Stage模型生效
--dex-path
.dex 文件路径或包含 dex 文件的目录路径。
FA模型常用
--lib-path
native库(.so)文件路径。

--out-path
打包完成后输出的 HAP 文件路径,必须以 .hap 结尾。

--force
如果为 true,当输出 HAP 文件已存在时,会强制覆盖。默认值为 false

上述列出的只是常用参数,打包工具还支持更多参数,例如 --profile-path--index-path--pack-info-path--rpcid-path--js-path 等,实际使用时,请务必根据你解包后的具体文件结构和内容,参考官方文档或工具帮助信息来选择和调整参数。

例如:下列文件夹的内容为hap解包后的结构,那么打包的时候需要用到--ets-path、--lib-path、--resources-path、--json-path、--pack-info-path、--index-path参数,所以具体指定什么参数需要根据解包后的文件才能确定。

图片

hap签名

获取签名信息:

参考华为鸿蒙官方文档去申请创建证书等,链接为:https://developer.huawei.com/consumer/cn/doc/app/agc-help-add-releasecert-0000001946273961

基本命令格式:

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密码>

示例参考:

"F:\Program Files\Huawei\DevEco Studio\jbr\bin\java.exe" -jar "D:\Desktop\apks_sign\hongmeng-jinyue\hap-sign-tool.jar" sign-app -keyAlias "sensetest" -signAlg "SHA256withECDSA" -mode "localSign" -appCertFile "D:\Desktop\apks_sign\hongmeng-jinyue\Debug.cer" -profileFile "D:\Desktop\apks_sign\hongmeng-jinyue\jinyueDebug.p7b" -inFile "D:\Desktop\Android_so\entry-default-signed.hap" -keystoreFile "D:\Desktop\apks_sign\hongmeng-jinyue\debug.p12" -outFile "new-hap-signed.hap" -keyPwd "Sense1!123" -keystorePwd "Sense1!123"

参数说明:

参数
含义与作用
-keyAlias"sensetest"
密钥别名
-signAlg"SHA256withECDSA"
签名算法,指定了生成数字签名时使用的哈希算法和加密算法。
-mode"localSign"
签名模式,localSign 模式表示使用本地的密钥库文件(.p12)进行签名操作
-appCertFile"Debug.cer"
cer应用证书文件路径,包含了公钥等信息,用于验证签名的有效性。
-profileFile"jinyueDebug.p7b"
Provision Profile文件路径,包含了应用的包名、证书、允许安装的设备列表(对于调试证书)等信息。没有这个文件,即使签名了也无法安装到真机上。
-inFile"entry-default-signed.hap"
输入文件路径,指定需要被签名的原始HAP包的文件位置。
-keystoreFile"debug.p12"
密钥库文件路径,包含私钥的密钥库文件(.p12格式),是生成数字签名的核心文件
-outFile"new-hap-signed.hap"
输出文件路径,指定签名完成后生成的新HAP包的保存路径和文件名。
-keyPwd"Sense1!123"
密钥密码,这是访问-keyAlias指定的那个特定密钥对的密码。
-keystorePwd"Sense1!123"
密钥库密码,这是用于打开整个.p12密钥库文件的密码

上述列出的只是常用参数,如果需要更详细的参数请参考鸿蒙官网文档。

hap安装

参考命令:

hdc install new-hap-signed.hap

so库加固

上述流程是hap的完整操作流程,如果需要对so库进行加固,需要在hap解包的流程后加上so库加固流程。

流程变为:hap解包-》对so库进行加固-》hap打包-》hap签名-》hap安装。

命令介绍:

选项
命令行
功能介绍
导入表保护
--imp-protect=
去除程序中的导入函数和变量等敏感信息,防止反编译工具交叉引用分析模块边界
内存校验
--mem-check=
可以在程序加载时校验自身完整性,如果发现程序被篡改,则会退出进程
调试器检测
--detect-dbg=
可以检测当前模块的进程是否被工具调试,被调试则退出阻止运行
移除调试信息
--strip-dbginfo=
将ELF程序中的 .debug 节,静态符号表移除。
压缩
--pack=0
是将程序中的代码、数据等信息进行打包、压缩和加密。目前压缩和鸿蒙系统不兼容,命令行加壳时必须设置为0。
代码混淆
-m
 "函数名1;函数名2"
将函数中原始的指令,通过等价变换、立即数加密、间接跳转等手段转换为难以阅读的随机的指令片段
代码虚拟化
-v
 "函数名1;函数名2"
保护过程中将函数中原始的汇编指令,转换为自定义的虚拟指令,运行时在自定义的虚拟机中执行
输出文件
-o
指保护后的输出文件路径

加固命令,参考如下:

"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

注意:

打包hap时,需提前将将加固后的so库替换到原so文件位置处。


——END——

👇扫码进群,一起畅聊技术,共享前沿资讯!

图片


👇点击关注,🌟星标深盾,了解更多精彩内容!



本文来自投稿,不代表本站立场,如若转载,请注明出处:https://blog.firsource.cn/news/1473.html
与bbin游戏共建新世界!《备用计划:家园》1.0合作模式上线
« 上一篇 09-05
Flutter框架编译Android程序
下一篇 » 09-10