代码加密
要求:ee-core: v1.2.10 及以上
目前框架支持两种代码加密,分别为 字节码加密 和 压缩混淆加密
# 命令
# 代码加密
npm run encrypt
# 清除加密的代码
npm run clean
# 合并命令,package.json中修改 start 命令
# 这样每次预发布时,就会生成加密的代码,避免构建时忘记
"start": "ee-bin encrypt && ee-bin start",
# 打包时,过滤源代码
注意
加密,请添加 "!electron/"
未加密,请删除 "!electron/"
打开package.json 或 builder.json文件,修改 build.files 数组属性,添加 "!electron/",如下:
// electron-egg: v3.4.0版本,将构建配置,独立为./electron/config/builder.json 文件
"build": {
......
"asar": true,
"files": [
"**/*",
"!frontend/", // 过滤前端源码
"!run/",
"!logs/",
"!data/",
"!electron/" // 过滤electron文件夹;如果没有使用加密功能,请删除
],
......
}
# 加密配置文件
ee-core: v1.3.2
文件 ./electron/config/bin.js
encrypt: {
type: 'confusion',
files: [
'electron/**/*.(js|json)',
'!electron/config/encrypt.js',
'!electron/config/nodemon.json',
'!electron/config/builder.json',
'!electron/config/bin.json',
],
fileExt: ['.js'],
confusionOptions: {
compact: true,
stringArray: true,
stringArrayEncoding: ['none'],
stringArrayCallsTransform: true,
deadCodeInjection: false,
numbersToExpressions: true,
target: 'node',
}
},
# type
- bytecode 字节码加密
- confusion 压缩混淆加密
- strict 先混淆加密,然后字节码加密
# directory
需要加密的目录,将废弃,用files替代
# files
ee-core: v2.1.0
需要加密的文件匹配,功能更强,说明:
files: [
'electron/**/*.(js|json)', // 匹配 electron 目录下的 js|json文件
'!electron/config/nodemon.json' // 过滤 electron/config/nodemon.json 文件
],
# confusionOptions
- compact [Boolean] - 压缩成一行
- stringArray [Boolean] - 删除字符串文字并将其放置在一个特殊数组中
- stringArrayEncoding [Array] - 对stringArray的所有字符串文字进行编码,值:'none' | 'base64' | 'rc4'
- stringArrayCallsTransform: true, // 调用的所有参数都可能被提取到不同的对象中
- deadCodeInjection [Boolean] - 注入死代码,注:影响性能
- deadCodeInjectionThreshold [number], // 死代码注入阈值,默认0.3
- numbersToExpressions [Boolean], // 将数字转换为表达式
- target [String], // 设置运行环境
# 加密后文件位置
加密后,文件在 ./public/electron 里面,请注意业务代码中,文件引入路径。
注意
dev环境(或 未使用加密功能的prod环境)使用 ./electron 代码;
prod环境使用 ./public/electron 代码。
# 方式一:字节码加密 - 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
ee-core: v1.4.1
配置
# electron/config/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
ee-core: v1.4.0
先 压缩混淆加密,然后 字节码加密,代码更加安全。
注意
问题同上
上次更新: 2025/04/10, 03:07:49