HarmonyOS鸿蒙Next中ArkGuard混淆工具使用指南

HarmonyOS鸿蒙Next中ArkGuard混淆工具使用指南

简介

       ArkGuard是一款源码混淆工具,提供基础混淆功能。当软件发布后,其代码很容易被他人获取分析,通过阅读清晰的变量名、函数名,攻击者或竞争者可以非常轻松地理解代码的逻辑结构、业务核心算法和关键流程。代码混淆(Obfuscation) 就是一种重要的技术应对手段。它通过像“重命名”这样的方式,将代码中原本有意义的标识符变成简短、无规律的字符,极大地增加了人工阅读和理解代码的难度与成本。

使用指南

      ArkGuard混淆开启指南-ArkGuard源码混淆-ArkTS编译工具链-ArkTS(方舟编程语言)-应用框架 - 华为HarmonyOS开发者 (huawei.com)

混淆加固-构建应用 - 华为HarmonyOS开发者 (huawei.com)

ArkGuard混淆工具

1. 开启混淆开关

     在模块的build-profile.json5中配置

"arkOptions": {
  "obfuscation": {
    "ruleOptions": {
      "enable": true,
      "files": ["./obfuscation-rules.txt"]
    }
  }
}

2. 配置混淆规则:

       从DevEco Studio 5.0.3.600版本开始,新建工程时混淆规则配置文件obfuscation-rules.txt中默认会配置以下四项混淆规则,开发者可根据实际需求进行自定义修改。

-enable-property-obfuscation
-enable-toplevel-obfuscation
-enable-filename-obfuscation
-enable-export-obfuscation

     混淆选项如下所示:

默认混淆(不同版本默认配置不一致) 开启混淆后生效
关闭混淆 -disable-obfuscation
开启属性名称混淆 -enable-property-obfuscation
开启字符串属性名称混淆 -enable-string-property-obfuscation
开启顶层作用域名称混淆 -enable-toplevel-obfuscation
开启导入导出名称混淆 -enable-export-obfuscation
开启文件名混淆 -enable-filename-obfuscation
代码压缩 -compact
声明文件注释删除 -remove-comments
删除console.*语句 -remove-log
名称缓存输出 -print-namecache
名称缓存复用 -apply-namecache
输出未混淆名单 -print-kept-names
缩减语言预置白名单 -extra-options strip-language-default
缩减系统预置白名单 -extra-options strip-system-api-args
保留声明文件参数 -keep-parameter-names
合并依赖模块选项 -enable-lib-obfuscation-options
通过注释在源码中标记白名单 -use-keep-in-source

3. 配置混淆保留选项

     开启混淆后,代码中的方法、属性或路径被混淆。但是在程序运行时,如果访问未混淆的对象时,可能会导致功能不可用。

     保留选项如下所示:

指定保留属性名称 -keep-property-name
指定保留顶层作用域或导入导出元素名称 -keep-global-name
指定保留文件/文件夹名称 -keep-file-name
指定保留注释 -keep-comments
指定保留声明文件中的所有名称 -keep-dts
指定保留源码文件中的所有名称 -keep

4. 指定release编译

     源码混淆仅支持release编译,不支持debug编译。

     点击DevEco Studio界面右上角图标选择构建模式:

     debug模式的构建产物会包含大量调试信息,例如变量名、函数名、行号等。在经过混淆后,这些调试信息将没有意义,甚至报错。

混淆助手工具(ObfuscationHelper)

     一个可以对模块和场景进行扫描,快速识别需要配置的保留选项和白名单字段,一键生成白名单混淆规则文件Hm-recommend-keep-list.txt

1. 开启混淆助手工具

     菜单栏:Tools->ObfuscationHelper

     在模块栏点击鼠标右键:

2. 选择扫描的模块和场景

      可以选择要扫描的模块。如果模块之前已经生成过白名单,则会生成相应的历史记录。选择历史记录后,会在本次扫描后自动关联历史的排查记录,历史排查过的白名单字段将不再被重复排查。

     生成推荐白名单,会在对应模块下生成推荐白名单文件。

3. 手动排查白名单

      使用DevEco Studio 6.0.0 Beta1及以上版本,按以下步骤操作:

      待排查白名单中显示的是扫描出来不能自动生成推荐白名单,需要开发者根据业务进一步排查,识别白名单字段并配置到文件中。

      如果排查后不需要配置白名单,点击待排查,选择已排查,标记该项已经排查。

      如果排查后需要配置白名单,电子添加白名单,在输入框中输入保留选项和白名单字段,点击保存白名单。

      排查完成后,点击生成排查白名单按钮,ObfuscationHelper会在对应模块下生成排查白名单文件Hm-manual-keep-list.txt/Hm-manual-consumer-keep-list.txt,并提示对应的文件路径。同时在工程根目录下生成对应的白名单Excel表格obfuscation-helper-xxx.xlsx。如果勾选合并白名单文件,点击OK,会在工程根目录下生成合并后的白名单文件Hm-merge-manual-keep-list.txt。

     使用DevEco Studio 6.0.0 Beta1以下版本,按类似步骤操作:

     需要手动填写混淆规则和白名单,且不支持关联历史记录。

4. 在混淆配置中添加白名单文件

      方式一:

      在各模块的build-profile.json5中,将Hm-manual-keep-list.txt加入到混淆配置files字段下,将Hm-manual-consumer-keep-list.txt加入到consumerFiles字段下。

      方式二:

      将合并后的文件Hm-merge-manual-keep-list.txt配置在entry模块build-profile.json5的files字段下。

常见问题:

      ①场景:开发者在开启属性混淆情况下,调用系统api接口使用了类型为Record的对象,对象key被混淆导致编译报错

      分析:系统api接口不会被混淆,当key值被混淆后,在系统api侧获取不到原来的key值

      解决方案:将Record类型的key值加入属性白名单

      ②场景:引入三方的har包,如何忽略这个三方har包

      解决方案:在使用这个三方har的模块里配置-keep ./oh_modules/三方库名

      ③其他场景:ArkGuard混淆常见问题-ArkGuard源码混淆-ArkTS编译工具链-ArkTS(方舟编程语言)-应用框架 - 华为HarmonyOS开发者 (huawei.com)


更多关于HarmonyOS鸿蒙Next中ArkGuard混淆工具使用指南的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

ArkGuard是HarmonyOS Next的代码混淆工具,用于保护应用安全。它通过重命名类、方法、字段等元素,增加反编译难度。ArkGuard支持配置混淆规则,开发者可在模块级build-profile.json5文件中启用和自定义混淆策略,包括设置keep规则保留特定代码不被混淆。工具集成在DevEco Studio中,构建Release版本时自动应用混淆。混淆后需验证应用功能是否正常,确保关键逻辑未被错误优化。

更多关于HarmonyOS鸿蒙Next中ArkGuard混淆工具使用指南的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,ArkGuard混淆工具是保护代码安全的关键工具。通过配置build-profile.json5中的arkOptions开启混淆功能,并指定混淆规则文件。DevEco Studio 5.0.3.600及以上版本默认提供四项基础混淆规则:属性混淆、顶层作用域混淆、文件名混淆和导入导出混淆。

混淆助手工具(ObfuscationHelper)可自动扫描模块,生成推荐白名单文件Hm-recommend-keep-list.txt,简化保留选项配置。对于需要保留的代码元素,使用-keep-property-name等选项确保运行时功能正常。注意混淆仅支持release模式编译,debug模式会因调试信息导致问题。

常见问题包括系统API接口调用时的Record类型key混淆,需将其加入属性白名单;三方har包可通过-keep ./oh_modules/库名配置忽略混淆。合理配置混淆规则和保留选项能有效平衡代码安全性和功能完整性。

回到顶部