# 应用加密

> 注意
>
> 应用加密特性可以有效提高应用代码文件逆向分析的难度，但应用代码防逆向是一个持续攻防对抗的过程，如对代码文件保护有更高的要求，需要结合其他安全加固措施，进一步提高逆向分析应用的难度。

## 能力简介

为了保护应用代码安全，保护开发者的核心资产，HarmonyOS提供了端到端的应用代码保护机制，该机制以系统安全为基础，构建内核级应用生命周期内的代码安全保护能力。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/f6/v3/ShgQDL58RLiZHg31sCcvFg/zh-cn_image_0000002778932137.png?HW-CC-KV=V1&HW-CC-Date=20260929T121704Z&HW-CC-Expire=31536000000&HW-CC-Sign=1AA32BDE92D3880BF4B5E324B5A764BAAD28F721E4DBBBAB0E3A98FB58DC94A0)

开发者向应用市场提交上架申请，上传应用包后可[选择是否加密](https://developer.huawei.com/consumer/cn/doc/app/agc-help-release-app-choose-pkg-0000002278981434)。

选择加密的应用，在经过应用市场审核后，应用市场会对上架应用做代码加密。应用在设备上安装时，安装文件落盘后仍是处于受保护状态，有效的保护应用程序；当应用程序启动时按需解密。

系统级应用加密具有如下优点：

* 内核级的安全保护，应用端到端加密，应用启动后再按需解密执行。

* 系统级的解密优化，相对于传统加壳等加固方式对性能的影响更小。

## 支持的国家/地区

中国境内（香港特别行政区、澳门特别行政区、中国台湾除外）

## 加密影响

1. 加密后的应用在程序启动和运行过程中可能会小幅度增加性能开销。

2. 加密后的应用相比于不加密的应用体积更大，可能会小幅度增加下载和安装时间。

> 注意
>
> 应用加密后的影响已经进行过系统级的优化，在部分优化后的版本上应用加密前后的性能与包体大小几乎无变化。

## 保护效果

应用加密保护的对象为应用包体中的关键资产（例如.abc文件），原始的代码文件可能被反编译，受保护后的代码文件安全性会有很大地提升，提高逆向分析的难度。

## 使用步骤

应用加密特性在应用上架时加密，应用运行时按需解密。安全增强的同时，确保开发者、消费者无感的安全体验，避免应用开发者适配工作，保障用户无感的纯净安全体验。
> 注意
>
> 当前ArkTS卡片服务对应的widgets.abc文件暂不支持加密服务。

应用加密在不同阶段中的步骤如下：

* 开发阶段：开发者无感知。

* 上架阶段：开发者选取待发布的软件包并上传后，可选择设置分发的软件包是否加密，选择加密后即被加密。

  操作步骤可参考：发布HarmonyOS应用-[选取待发布的软件包](https://developer.huawei.com/consumer/cn/doc/app/agc-help-release-app-choose-pkg-0000002278981434)。
* 分发阶段：应用将被应用市场加密分发，防止安装包被获取后逆向分析。

* 安装阶段：安装阶段仍有保护。

* 运行阶段：应用运行时按需解密应用代码。

## 常见问题

* **Q1：使用官方提供的代码加密能力后，应用代码是否需要其它的代码保护措施吗？**

  A1：应用加密特性可以有效提高应用代码文件逆向分析的难度，但应用代码防逆向是一个持续攻防对抗的过程，如对代码文件保护有更高的要求，需要结合其他安全加固措施，进一步提高逆向分析应用的难度。比如使能混淆能力、使能三方安全加固能力等。
* **Q2：如果不使用代码加密能力，还能采取什么手段来保护应用代码资产？**

  A2：使能混淆能力、使能三方安全加固能力等，请参考[应用资产保护设计-保护应用代码场景](https://developer.huawei.com/consumer/cn/doc/best-practices-V5/bpta-app-asset-protection-design-V5#section24320461547)。
* **Q3：代码加密会对应用包产生什么影响？**

  A3：加密后的应用在程序启动和运行过程中可能会小幅度增加性能开销；加密后的应用相比于不加密的应用体积更大，可能会小幅度增加下载和安装时间。

