0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

HarmonyOS应用代码混淆技术方案

HarmonyOS开发者 来源:HarmonyOS开发者 2025-11-21 16:17 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

概述

代码混淆技术可以增加代码的复杂性和模糊性,从而提高攻击者分析代码的难度。代码混淆有以下几个方面的作用:

1. 保护知识产权:代码混淆防止他人轻易复制和窃取软件代码,增加逆向工程难度。

2. 防止逆向工程:逆向工程是分析软件以了解其工作原理和实现细节的过程。代码混淆可增加逆向工程的难度,保护应用程序免受恶意修改或破坏。

3. 提高安全性:代码混淆减少漏洞和安全风险,增加攻击者利用漏洞的难度。

4. 降低反盗版和欺诈风险:混淆代码可增加攻击者破解软件许可验证系统或修改代码绕过付费机制的难度,从而减少盗版和欺诈。

针对工程源码的混淆可以提高破解难度,缩短类和成员名称,减小应用大小。

混淆开启

从DevEco Studio版本4.0 Beta1开始,hvigor插件提供代码混淆功能。开启混淆的条件如下:

工程为Stage模型

在Release编译模式下

模块build-profile.json5文件中开启混淆配置

"arkOptions":{
"obfuscation":{
 "ruleOptions":{
  "enable":true,
   //...
   }
  }
  },
注意:“enable”默认为“false”,默认不开启代码混淆功能。

满足开启混淆的条件后,选择目标模块,点击 Build -> Make Module 开始编译。

如果工程或模块是Static Library,则该工程或模块是一个HAR。

构建HAR时有以下三种方式:

1. 以Debug模式构建HAR,会直接打包源码,不进行代码混淆。

2. 以Release模式构建HAR,会编译、混淆并压缩代码。

3. 构建字节码格式的HAR。开启混淆时,编译器会先对源码中间文件进行混淆,再生成abc字节码。

图1 DevEco Studio选择release编译模式

f8b2dfd8-c467-11f0-8c8f-92fbcf53809c.png

图2 DevEco Studio指定模块编译

f9127704-c467-11f0-8c8f-92fbcf53809c.png

混淆配置能力

编译选项

若按照上述编译流程开启代码混淆,在 DevEco Studio 5.0.3.600 之前的版本,默认仅混淆参数名和局部变量名。从 DevEco Studio 5.0.3.600 版本起,默认启用四项推荐的混淆选项:-enable-property-obfuscation、-enable-toplevel-obfuscation、-enable-filename-obfuscation 和 -enable-export-obfuscation。开发者可以根据需要进一步修改混淆配置。

混淆配置

在每个模块下都能找到 build-profile.json5 文件,如下图所示。可以在此文件中配置是否开启混淆及混淆配置文件。

图3 编译配置文件

f96f77ce-c467-11f0-8c8f-92fbcf53809c.png

新建工程时,每个模块下都有 obfuscation-rules.txt 文件,用于配置混淆。

图4 混淆配置文件

f9c40442-c467-11f0-8c8f-92fbcf53809c.png

在上图中,obfuscation-rules.txt文件中添加了-enable-property-obfuscation和-enable-toplevel-obfuscation开关,表示已启用属性混淆和顶层作用域名称混淆。

DevEco Studio混淆现有选项及功能描述如下:

fa1b6c8c-c467-11f0-8c8f-92fbcf53809c.png

fa711614-c467-11f0-8c8f-92fbcf53809c.png

混淆选项具体的使用方法和样例代码可以参考代码混淆

混淆优化建议

开发人员混淆工程时,发现缓存文件或SDK中的文件中存在大量未混淆的源码名称。原因包括以下两类:

混淆选项开启较少;开启-enable-property-obfuscation、-enable-toplevel-obfuscation、-enable-export-obfuscation、-enable-filename-obfuscation选项。

源码名称与系统白名单、语言白名单重名;添加后缀避开白名单。

混淆规则合并策略

在编译一个模块时,生效的混淆规则是当前编译模块混淆规则和依赖模块混淆规则的合并结果。具体规则请参考:混淆规则合并策略。

查看混淆结果

开发人员在编译模块的build目录中可找到编译和混淆生成的缓存文件、名称映射表及系统API白名单文件。

源码编译及混淆缓存文件目录:build/[…]/release/模块名。

混淆名称映射表及系统API白名单目录:build/[…]/release/obfuscation。

名称映射表文件:nameCache.json,记录源码名称映射。

系统API白名单文件: systemApiCache.json,记录SDK接口与属性名称。

图5 DevEco Studio编译产物与缓存文件

fac8ed1c-c467-11f0-8c8f-92fbcf53809c.png

调试

代码经过混淆工具处理后,名称会发生更改,这可能导致运行时崩溃堆栈日志难以理解,因为堆栈与源代码不完全一致。如果未保留调试信息,行号及名称更改将导致无法准确定位问题。此外,启用-enable-property-obfuscation、-enable-toplevel-obfuscation等选项后,代码混淆可能会引发运行时崩溃或功能性错误。开发人员需要还原报错堆栈,排查并配置白名单以确保功能正常。

函数调用栈还原

经过混淆的应用程序中代码名称会发生更改,因此报错栈与源码不完全一致,crash时打印的报错栈会难以理解,如何处理请参考报错栈还原。

反混淆工具hstack

hstack需要将Node.js配置到环境变量中,详细使用说明请参考hstack。

使用第三方加固

HarmonyOS提供的代码混淆能力之外,开发者还可以使用第三方安全厂商提供的高级混淆和加固能力。多家安全加固厂商已经启动了HarmonyOS开发,开发者可以根据需求选择这些安全厂商的服务。开发者需要与第三方安全厂商自行沟通合作方式和范围,本文档不做详细说明。

具体的官方与第三方代码混淆能力的关系如下:

fb1fcaba-c467-11f0-8c8f-92fbcf53809c.png

由于HarmonyOS代码签名、应用加密等安全机制的限制,以及应用市场上架审核的纯净安全要求,三方加固厂商提供的安全加固内容必须满足以下六点要求:

1、不允许隐藏敏感系统API的调用,审核人员必须能够清晰地看到应用的特性。

2、不允许混淆非自研的SDK。SDK应由SDK厂商自行进行混淆保护。如果非自研SDK被混淆,将会影响应用市场审核相关SDK的指纹信息。

3、通过第三方安全加固的应用程序,必须确保不包含恶意行为,以免对生态系统造成影响。此要求为约束性条款,不遵守可能导致应用被下架。

4、不允许使用第三方虚拟机,HarmonyOS系统通过代码签名等机制限制动态加载代码,这可能导致应用无法正常运行。

5、不允许对方舟字节码文件进行篡改,此方法可能让应用无法正常运行,以及影响应用市场对应用的纯净安全进行审核。

6、不允许对系统库使用hook技术,此方法影响应用市场对应用的纯净安全进行审核。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 代码
    +关注

    关注

    30

    文章

    4977

    浏览量

    74399
  • HarmonyOS
    +关注

    关注

    80

    文章

    2157

    浏览量

    36299
  • DevEco Studio
    +关注

    关注

    0

    文章

    33

    浏览量

    1559

原文标题:HarmonyOS应用代码混淆技术方案,为你的应用安全保驾护航

文章出处:【微信号:HarmonyOS_Dev,微信公众号:HarmonyOS开发者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    JavaScript压缩、混淆和加密技术原理解析

    前端代码都是公开的,为了提高代码的破解成本、保证JS代码里的一些重要逻辑不被居心叵测的人利用,需要使用一些加密和混淆的防护手段。
    的头像 发表于 12-26 09:41 4868次阅读
    JavaScript压缩、<b class='flag-5'>混淆</b>和加密<b class='flag-5'>技术</b>原理解析

    HDC2021技术分论坛:HarmonyOS代码开发介绍

    的主要特点HarmonyOS代码开发利用可视化“拖拉拽”的开发方式替代传统的编码开发,免去了开发人员手动编写平台相关代码,减轻了非技术开发人员的压力,通过编写少量
    发表于 11-17 18:15

    HDC2021技术分论坛:HarmonyOS代码开发介绍

    、什么是HarmonyOS代码开发?低代码开发,顾名思义,就是用更少的代码量,完成更高效的应用交付。低代码开发让更多的人可以参与到应用程序
    发表于 11-23 17:10

    深度剖析HarmonyOS图形栈测试技术

    需要数据背后的根因。但业界的图形栈测试,绝大部分都只提供应用层面的数据,有一部分可以深入系统层分析,但仍无法触及硬件这一层的测试分析。  HarmonyOS图形栈测试技术,不仅可以深入系统层分析,帮助
    发表于 04-08 11:14

    代码保护之道——混淆的艺术

    第三点是藏叶于林。安全是业务的天然属性,业务是安全的最佳载体。只有结合了业务的安全才是真正的安全,孤立的安全是很容易被攻击者攻破的。将业务代码和安全代码放在一起进行混淆,攻击者要破解的话,不但要摸清安全逻辑,还要了解清楚整个业务
    的头像 发表于 12-13 11:11 5721次阅读
    <b class='flag-5'>代码</b>保护之道——<b class='flag-5'>混淆</b>的艺术

    HarmonyOS开发者日生态最新进展、核心代码解析、创新案例分享

    》的演讲,围绕HarmonyOS分布式能力、AI能力、Java UI/JS UI框架,重点从核心代码解读和技术实现,
    的头像 发表于 04-17 09:57 1839次阅读

    HarmonyOS 测试技术与实践-HarmonyOS 软件测试技术

    2021华为开发者大会HarmonyOS 测试技术与实践-HarmonyOS 软件测试技术
    的头像 发表于 10-23 14:19 2320次阅读
    <b class='flag-5'>HarmonyOS</b> 测试<b class='flag-5'>技术</b>与实践-<b class='flag-5'>HarmonyOS</b> 软件测试<b class='flag-5'>技术</b>栈

    HarmonyOS测试技术与实战-HarmonyOS分布式应用特征与挑战

     HDC 2021华为开发者大会HarmonyOS测试技术与实战-HarmonyOS分布式应用特征与挑战
    的头像 发表于 10-23 14:41 2402次阅读
    <b class='flag-5'>HarmonyOS</b>测试<b class='flag-5'>技术</b>与实战-<b class='flag-5'>HarmonyOS</b>分布式应用特征与挑战

    HarmonyOS测试技术与实战-分布式应用测试解决方案

    HDC 2021华为开发者大会HarmonyOS测试技术与实战-HarmonyOS分布式应用测试解决方案
    的头像 发表于 10-23 14:48 2207次阅读
    <b class='flag-5'>HarmonyOS</b>测试<b class='flag-5'>技术</b>与实战-分布式应用测试解决<b class='flag-5'>方案</b>

    HarmonyOS测试技术与实战-HarmonyOS自研图形栈总结

    HDC 2021华为开发者大会 HarmonyOS测试技术与实战-HarmonyOS自研图形栈总结
    的头像 发表于 10-23 15:47 2307次阅读
    <b class='flag-5'>HarmonyOS</b>测试<b class='flag-5'>技术</b>与实战-<b class='flag-5'>HarmonyOS</b>自研图形栈总结

    什么是HarmonyOS代码开发

    。低代码开发让更多的人可以参与到应用程序开发当中,不仅是具有专业编程能力的程序员,非技术背景的业务人员同样可以构建应用;对于大型企业来讲,低代码开发还可以降低IT团队培训、技术部署的初
    的头像 发表于 11-22 10:50 3245次阅读

    APP混淆实战(Java/so代码混淆)

    Android App Bundle混淆加密加壳加固保护的解决方案(过Google App上架审核)最全Android及资源混淆方法汇总(无需加固节约成本并将APP上架Google Play成功的最佳
    的头像 发表于 06-29 15:42 1698次阅读
    APP<b class='flag-5'>混淆</b>实战(Java/so<b class='flag-5'>代码</b><b class='flag-5'>混淆</b>)

    Flutter应用代码混淆优化防护的常见问题与解决方案

    分析flutter应用很依赖反编译工具转储的dart文件中的信息,可以在开发flutter的过程中开启混淆,能有效防止静态分析。
    的头像 发表于 08-12 11:11 4023次阅读

    java中的代码混淆技术

    今天和大家一起学习下java中的代码混淆技术,后面你也可以让你的代码不再裸露在外了,让人轻易窥视 代码
    的头像 发表于 09-25 11:48 2674次阅读
    java中的<b class='flag-5'>代码</b><b class='flag-5'>混淆</b><b class='flag-5'>技术</b>

    ArkGuard混淆工具使用指南

    ArkGuard是一款源码混淆工具,提供基础混淆功能。当软件发布后,其代码很容易被他人获取分析,通过阅读清晰的变量名、函数名,攻击者或竞争者可以非常轻松地理解代码的逻辑结构、业务核心算
    的头像 发表于 09-28 16:05 1059次阅读
    ArkGuard<b class='flag-5'>混淆</b>工具使用指南