ToB企服应用市场:ToB评测及商务社交产业平台

标题: 鸿蒙NEXT开发【应用代码混淆】开发安全 [打印本页]

作者: 西河刘卡车医    时间: 2024-11-11 17:13
标题: 鸿蒙NEXT开发【应用代码混淆】开发安全
概述

代码混淆是一种软件安全技能,旨在增加代码的复杂性和模糊性,从而增加攻击者分析和明白代码的难度。代码混淆有以下几个方面的作用:
针对工程源码的混淆可以提高工程被破解攻击的难度,缩短代码的类和成员的名称,减小应用的大小。
混淆开启

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

  1. "arkOptions": {
  2.   "obfuscation": {
  3.     "ruleOptions": {
  4.       "enable": true  // 配置true,即可开启代码混淆功能
  5.     }
  6.   }
  7. }
复制代码
留意
enable默以为false,默认不开启代码混淆功能。
满足上述开启混淆条件后,选择目标模块点击Build -> Make Module选项开始编译。
如果你的工程大概模块是Static Library,那么该工程或模块是一个HAR。
HAR类型有如下两种构造方式:
DevEco Studio在Debug模式构建HAR,直接将源码打包
DevEco Studio在Release模式构建HAR,会对代码举行编译、混淆及压缩处理
若必要对发布的HAR代码资产举行掩护时,建议在release模式下开启混淆本领。
图1 DevEco Studio选择release编译模式

图2 DevEco Studio指定模块编译

混淆设置本领

编译选项

上述编译过程中混淆开启的是默认设置,仅混淆了局部变量。若想混淆更多名称,必要在模块中的混淆设置文件obfuscation-rules.txt添加混淆选项。
混淆设置

在工程的每个模块下都能找到 build-profile.json5 文件,如下图所示,可以在该文件中设置当前模块是否开启混淆以及开启混淆时按照哪个混淆设置文件举行混淆。
图3 编译设置文件

新建工程时,每个模块下都有obfuscation-rules.txt文件,混淆开启时会加载obfuscation-rules.txt中的设置,完成指定的混淆功能。
图4 混淆设置文件

上图中,obfuscation-rules.txt中添加了-enable-property-obfuscation、-enable-toplevel-obfuscation开关,这代表打开了属性混淆和顶层作用域名称混淆。
DevEco Studio混淆现有选项及功能形貌如下:
混淆自界说选项名称功能简述混淆选项-disable-obfuscation关闭混淆-enable-property-obfuscation属性混淆-enable-toplevel-obfuscation顶层作用域名称混淆-enable-filename-obfuscation文件名混淆-enable-export-obfuscationexport导出名称与属性混淆-compact代码压缩-remove-log删除console.*方法-print-namecache filepath指定路径输出namecache.json文件及内容-apply-namecache filepath复用指定的名称缓存文件-remove-comments删除注释保存选项-keep-property-name保存属性白名单-keep-global-name保存顶层作用域名称白名单-keep-file-name保存文件名白名单-keep-comments保存某个类的JsDoc注释-keep-dts filepath读取指定dts文件中的名称作为白名单 混淆优化建议
开发人员混淆工程,查看缓存文件大概SDK中文件发现大量源码名称未混淆,缘故原由有两类:

混淆规则归并计谋

工程的主模块(一般为entry)会依靠工程中的其他模块,同时也可能依靠一些长途har包,这使得我们在编译工程时难以弄清工程中的每个模块是按什么混淆设置举行混淆的。
现实上,当我们编译整个工程时会加载主模块的obfuscation-rules.txt、依靠的HAR中consumer-rules.txt和长途HAR包的obfuscation.txt三类混淆设置文件,举行规则归并获取此次编译过程的混淆规则。
HAR模块的build-profile.json5中consumerFiles设置了共享混淆设置文件,该文件生效条件:

图5 HAR模块的共享混淆设置文件consumer-rules.txt

图6 长途HAR包中obfuscation.txt文件

归并规则(以下面四个选项为例,别的选项归并规则与其划一):
  1. let `listRules` 表示上面提到的所有混淆规则文件的列表
  2. let finalRule = {
  3.     disableObfuscation: false,
  4.     enablePropertyObfuscation: false,
  5.     keepPropertyName: [],
  6.     printNamecache: string,
  7. }
  8. for each file in `listRules`:
  9.     for each option in file:
  10.         switch(option) {
  11.             case -disable-obfuscation:
  12.                 finalRule.disableObfuscation = true;
  13.                 continue;
  14.             case -enable-property-obfuscation:
  15.                 finalRule.enablePropertyObfuscation = true;
  16.                 continue;
  17.             case -keep-property-name:
  18.                 finalRule.keepPropertyName.push(#{指定的名称});
  19.                 continue;
  20.             case -print-namecache:
  21.                 finalRule.printNamecache = #{指定的路径名};
  22. case -keep-dts:
  23.                 finalRule.keepDts.push(#{指定的路径});
  24.                 continue;
  25.         }
  26.     end-for
  27. end-for
复制代码

查看混淆结果

开发人员可以在编译模块下的build目录中找到编译及混淆天生的缓存文件,以及混淆的名称映射表及体系API白名单文件。

调试

经过混淆工具处理后的代码名称会发生更改,这可能会使运行时crash堆栈日志难以明白,因为堆栈与源代码不完全划一。如果未保存调试信息,就可能会出现因行号及名称更改无法定位题目的情况。别的,开启-enable-property-obfuscation、-enable-toplevel-obfuscation等选项,代码混淆可能会引发运行时crash大概是功能性错误,必要开发人员还原报错堆栈来排查定位哪些名称与属性必要设置白名单来保障功能正常。
函数调用栈还原

步调出现运行时crash会打印报错堆栈,堆栈行号及名称对应于编译及混淆后的缓存文件。开发人员可使用DevEco Studio命令工具Command Line Tools中的hstack插件来还原为源码堆栈。如需支持对应用的堆栈举行还原,必要确保保存足够的信息以举行还原。应用每次编译时都会天生sourceMaps.map,其中存储源代码与编译代码对应位置映射的信息。若开启混淆还会天生nameCache.json文件,其中存储源代码与混淆代码对应名称映射的信息。
DevEco Studio会将sourceMaps.map文件生存在build/default/cache/default/default@CompileArkTS/esmodule/release目录中,将nameCache.json文件生存在build/default/cache/default/default@CompileArkTS/esmodule/release/obfuscation目录中。Hstack插件读取sourceMaps.map文件中的位置映射关系与nameCache.json混淆名称映射关系实现将release应用crash堆栈还原为源码对应堆栈
反混淆工具hstack

hstack必要将Node.js设置到环境变量中
常见题目

使用第三方加固

在HarmonyOS提供的代码混淆本领之外,开发者还可以使用第三方安全厂商提供的高级混淆和加固本领。一些安全加固厂商,已经启动HarmonyOS开发,开发者可以按需使用此类安全厂商提供的服务。这一部分由开发者与三方安全厂商自行沟通合作方式和范围,本文不做具体说明。具体的官方与三方代码混淆本领的关系如下:
特性特性形貌HarmonyOS三方名称混淆混淆类、字段、属性、方法和Native库的名字,包括资源名、资源文件名、 asset 文件和资源 XML 属性。√√控制混淆混淆方法内的控制流以防御自动或手动代码分析,包括虚伪控制流和控制流扁平化。×√指令替换通过将简单的算术和逻辑表达式转换为难以分析的代码来掩护专有公式。×√数据混淆加密敏感字符串,以防止通过实验搜刮的黑客攻击,也用来加密类、 asset 文件、资源文件和 Native 库×√代码虚拟化转换方法实现为随机天生虚拟机的指令序列×√调用隐藏为访问敏感的 APIs 添加反射,比如用于签名校验和密码操作的尺度APIs×√移除日志代码移除 logging 、调试和测试代码,以阻止任何利用此信息的计划×√ 必要留意的是,由于HarmonyOS代码签名、应用加密等安全机制的限制,以及应用市场上架审核纯净安全的要求,三方加固厂商提供的安全加固内容必要满足以下四点要求:
1、不允许隐藏敏感体系API调用,必要让审核人员清晰的看到应用特性;
2、不允许混淆非自研的SDK,SDK应该由SDK厂商自行举行混淆掩护,如果非自研SDK被混淆会影响应用市场审核相关SDK的指纹信息;
3、通过三方安全加固的应用,必要保证被加固的应用步调不能含有恶意行为,克制对生态造成影响,此条要求作为约束性条款,不遵照可能导致应用被下架;
4、不允许使用三方虚拟机,HarmonyOS体系通过代码签名等机制限制动态加载代码,此方法可能让应用无法正常运行。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4