代码加密
目前框架支持主进程和前端代码加密,提升软件安全。有两种代码加密方案,分别为 字节码加密 和 压缩混淆加密
# 命令
# 需要先构建,然后才能使用代码加密
ee-bin encrypt
查看:快速开始教程中,构建
部分。
# 加密配置文件
文件 ./cmd/bin.js
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
需要加密的文件匹配,功能更强,说明:
files: [
'electron/**/*.(js|json)', // 匹配 electron 目录下的 js|json文件
'!electron/xxx.json' // 过滤 electron/xxx.json 文件
],
# confusionOptions
当类型为 confusion 时,此配置项才有效。
# 方式一:字节码加密 - bytecode
什么是字节码加密?
字节码是一种源码编译后的中间表示,类似汇编,是虚拟机执行的指令。逆向(反)编译的难度和传统编译型语言差不多。
# 代码要求
控制器controller和服务层service代码要求加入toString()方法,用来识别加密后的 .jsc (class)模块。
如:ExampleController 控制器
# 添加 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
配置
# 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
先 压缩混淆加密,然后 字节码加密,代码更加安全。
注意
问题同上
上次更新: 2025/04/10, 03:07:49