Skip to content

目前框架支持主进程和前端代码加密,提升软件安全。有两种代码加密方案,分别为 字节码加密压缩混淆加密

命令

bash
# 需要先构建,然后才能使用代码加密
ee-bin encrypt

查看:快速开始教程中,构建 部分。

加密配置文件

文件 ./cmd/bin.js

javascript
frontend: {
  // 支持: none - 不加密, confusion - 压缩混淆加密
  type: 'none',
  // 文件匹配
  // ! 符号开头的意思是过滤
  files: [
    './public/dist/**/*.(js|json)',
  ],
  // 需要加密的文件后缀,只支持js
  fileExt: ['.js'],
  // 混淆加密配置
  confusionOptions: {
    // 压缩成一行
    compact: true, 
    // 删除字符串文字并将其放置在一个特殊数组中     
    stringArray: true,
    // 对stringArray的所有字符串文字进行编码,值:'none' | 'base64' | 'rc4'
    stringArrayEncoding: ['none'],
    // 注入死代码,注:影响性能
    deadCodeInjection: false, 
    // 死代码比例
    deadCodeInjectionThreshold: 0.1,  
    // 调用的所有参数都可以提取到不同的对象中
    stringArrayCallsTransform: true,
    // 数字转表达式
    numbersToExpressions: true,
  }
},
electron: {
  // none - 不加密
  // confusion - 压缩混淆加密
  // bytecode - 字节码加密
  // strict - 先混淆加密,然后字节码加密 
  type: 'confusion',
  files: [
    './public/electron/**/*.(js|json)',
  ],
  fileExt: ['.js'],
  // 特殊处理的文件
  specificFiles: ['./public/electron/preload/bridge.js'],
  confusionOptions: {
    compact: true,      
    stringArray: true,
    stringArrayEncoding: ['rc4'],
    deadCodeInjection: false,
    stringArrayCallsTransform: true,
    numbersToExpressions: true,
    target: 'node',
  }      
}

type

  • none 不加密
  • bytecode 字节码加密
  • confusion 压缩混淆加密
  • strict 先混淆加密,然后字节码加密

files

需要加密的文件匹配,功能更强,说明:

javascript
files: [
  'electron/**/*.(js|json)', // 匹配 electron 目录下的 js|json文件
  '!electron/xxx.json' // 过滤 electron/xxx.json 文件
],

confusionOptions

当类型为 confusion 时,此配置项才有效。

方式一:字节码加密 - bytecode

什么是字节码加密?

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

代码要求

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

如:ExampleController 控制器

javascript
# 添加 toString() 方法,返回内容为 类的字符串表示
ExampleController.toString = () => '[class ExampleController]';

# 导出模块
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平台分发版较多,请自行测试

方式二:压缩混淆加密 - confusion

配置

javascript
# cmd/bin.js

confusionOptions: {
  compact: true, // 将代码压缩为1行        
  stringArray: true, // 删除字符串文本并将其放置在特殊数组中
  stringArrayEncoding: ['none'], // 对stringArray编码 'none', 'base64', 'rc4',增加安全性
  stringArrayCallsTransform: true, // 调用的所有参数都可能被提取到不同的对象中
  deadCodeInjection: false, // 是否注入死代码,代码体积变大。
  deadCodeInjectionThreshold: 0.3, // 死代码注入阈值,默认0.3
  numbersToExpressions: true, // 将数字转换为表达式
  target: 'node', // 设置运行环境
}

构建要求

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

注意

如果加密生成的代码无法运行,请多次 执行 npm run encrypt

原因:加密后代码混淆很大,可能触发某些关键字或者字符编码,导致代码无法正常读取。

方式三:压缩混淆加密 strict

先 压缩混淆加密,然后 字节码加密,代码更加安全。

注意

问题同上