HarmonyOS鸿蒙Next中怎么把代码混淆的比较彻底

HarmonyOS鸿蒙Next中怎么把代码混淆的比较彻底

代码编译为HAR,给外部提供SDK,已经使用了如下配置

-denable-property-obfuscation
-denable-toplevel-obfuscation
-denable-filename-obfuscation
-denable-export-obfuscation
-compact

但是har添加到工程后,打开对应的JS文件,虽然变量名被改变,还是能看到几乎全部的逻辑

怎么能隐藏源码?

5 回复

没有使用 构建字节码格式的har 吗?

默认产物是包含字节码的HAR包,其中包含abc字节码、资源文件、配置文件、readme、changelog声明文件、license证书文件,提升发布到ohpm中心仓产物的安全性。

由于字节码HAR包中包含的是编译后的abc字节码,因此当字节码HAR被其他应用模块(HAP/HSP)依赖时,在执行应用模块的编译构建时,不需要再对依赖的HAR中的代码进行语法检查和编译等操作,相比debug编译的包含源码的HAR和release编译的包含js中间码的HAR,可以有效提升应用模块的编译构建效率。

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-hvigor-build-har-V5#section179161312181613

更多关于HarmonyOS鸿蒙Next中怎么把代码混淆的比较彻底的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在build-profile.json5中配置:

"resourceObfuscation": {
  "enable": true,
  "rules": ["./resource-rules.txt"]
}

resource-rules.txt中定义需混淆的资源路径模式

使用crypto模块动态解密关键字符串:

import { cryptoFramework } from '@kit.CryptoArchivesKit';

function decrypt(data: string): string {
  // AES解密实现
  return decryptedData;
}

const API_KEY = decrypt("3dacb7...");

在HarmonyOS Next中,使用ProGuard进行代码混淆。在工程的build.gradle文件中启用混淆:

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

proguard-rules.pro中添加自定义混淆规则。对鸿蒙特有API需额外保护,如:

-keep class ohos.** { *; }
-keep class ability.** { *; }

使用-dontoptimize-dontshrink可增强混淆效果。混淆后需测试功能完整性。

在HarmonyOS Next中要彻底混淆代码,建议在现有配置基础上增加以下措施:

  1. 启用更高级别的混淆选项:
  • 添加-enable-string-obfuscation混淆字符串常量
  • 使用-obfuscation-level=high设置高级混淆
  1. 配置混淆规则文件: 创建proguard-rules.pro文件,添加:
-keepattributes !Exceptions,!InnerClasses
-assumenosideeffects class ** { *; }
  1. 对HAR包进行额外处理:
  • 使用uglifyJS等工具进行二次压缩
  • 考虑将核心逻辑封装到Native(C++)代码中
  1. 构建配置: 确保在build-profile.json5中设置:
"buildOption": {
  "obfuscation": true,
  "proguardOption": "proguard-rules.pro"
}

这些措施会显著提高代码安全性,但要注意测试混淆后的功能是否正常。

回到顶部