electron-egg electron-egg
首页
  • v4.x
  • v3.x
  • v2.x
插件
  • v4.x
  • v3.x
demo
支持
知识点
案例
交流
  • GitHub (opens new window)
  • Gitee (opens new window)
首页
  • v4.x
  • v3.x
  • v2.x
插件
  • v4.x
  • v3.x
demo
支持
知识点
案例
交流
  • GitHub (opens new window)
  • Gitee (opens new window)
❤️成为赞助商
  • 快速入门

  • 基础功能

  • 生成软件

    • 构建
    • 代码加密
      • 图标修改
    • 升级

    • 跨语言支持

    • 从v3升级v4
    • 更新记录
    • 常见问题
    目录

    代码加密

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

    # 命令

    # 需要先构建,然后才能使用代码加密
    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/06/06, 07:21:49
    构建
    图标修改

    ← 构建 图标修改→

    Theme by Vdoing | Copyright © 2023-2025 哆啦好梦 | 京ICP备15041380号-2
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式
    ×