要求:ee-core >= 1.2.10
目前框架支持两种代码加密,分别为 字节码加密压缩混淆加密。当然你也可以先混淆加密,再字节码加密。

打包时,过滤源代码

注:未使用加密,请不要过滤 。
打开package.json文件,修改 build.files 数组属性,添加 “!electron/“,如下:

  1. "build": {
  2. ......
  3. "asar": true,
  4. "files": [
  5. "**/*",
  6. "!frontend/", // 过滤前端源码
  7. "!run/",
  8. "!logs/",
  9. "!data/",
  10. "!electron/" // 过滤electron文件夹;如果没有使用加密功能,则不能过滤该文件夹
  11. ],
  12. ......
  13. }

加密配置文件

需要:ee-core >= 1.3.2

文件 ./electron/config/encrypt.js

  1. module.exports = {
  2. type: 'bytecode', // 加密类型:bytecode | confusion
  3. directory: [ // 需要加密的目录
  4. 'electron'
  5. ],
  6. fileExt: ['.js'], // 需要加密的文件后缀,暂时只支持js,后续待扩展
  7. };

type

  • bytecode 字节码加密
  • confusion 压缩混淆加密

    修改加密类型

    推荐升级ee-core,使用上面配置文件的方式

打开package.json文件,修改 scripts.encrypt 脚本属性,如下:

  1. "scripts": {
  2. ......
  3. "encrypt": "ee-core encrypt --type=bytecode",
  4. ......
  5. }

加密后文件位置

加密后,文件在 ./public/electron 里面,请注意业务代码中,文件引入路径。

注:dev环境(或 未使用加密功能的prod环境)使用 ./electron 代码,prod环境使用 ./public/electron代码。

方式一:字节码加密

什么是字节码加密?
字节码是一种源码编译后的中间表示,类似汇编,是虚拟机执行的指令。逆向(反)编译的难度和传统编译型语言差不多。

代码要求:

控制器controller和服务层service代码要求加入toString()方法,用来识别加密后的 .jsc (class)模块。如:ExampleController 控制器

  1. # 添加 toString() 方法,返回内容为 类的字符串表示
  2. ExampleController.toString = () => '[class ExampleController]';
  3. # 导出模块
  4. module.exports = ExampleController;

构建要求:

  • 如果交叉构建的软件运行报错,那么在对应平台构建,操作如下
  • 在windows-32-bit 操作系统上构建:npm run build-w (32位)
  • 在windows-64-bit 操作系统上构建:npm run build-w-64 (64位)
  • 在MacOS-amd 操作系统上构建:npm run build-m
  • 在MacOS-arm 操作系统上构建:npm run build-m-arm64 (m1芯片架构)
  • Linux平台分发版较多,请自行测试

    方式二:压缩混淆加密

    压缩混淆主要是把代码压缩为一行,同时把代码中的变量、函数名等,按照一定规则做简化和替换。

代码要求:无

构建要求:

  • 可在windows-64-bit 操作系统上,同时构建 32位 和 64位应用。
  • 其它如上。