• vue 项目代码混淆配置(自定义插件适用)带配置项注释


    vue 项目代码混淆配置(自定义插件适用)带配置项注释

    一、概要
    • 本文章适用 vue-cli3/webpack4 搭建的vue项目,vue-cli2或者 webpack@2@3版本混淆查看这篇webpack2 webpack 3 低版本混淆代码打包
    • 配置完成后只需在文件名或者文件夹名加上 -obfuscate 后缀,打包的时候即可将该js文件或者文件夹下的所有js文件混淆处理
    • 也可用于其他 webpack 构建的项目,步骤差不多
    二、混淆步骤
    1. 引入混淆插件
    • 使用 vue-cli3/4 新建的项目内置的 webpack 是 @4 版本的,所以这里只能使用 @2 版本的混淆插件
    • webpack@5 可以使用最新的混淆插件
    • node_modules/webpack/package.json 中可以查看当前项目的 webpack 版本
    npm i javascript-obfuscator -D
    
    • 1
    2. 添加混淆配置

    vue.config.js中加入如下代码

    //代码混淆
    var JavaScriptObfuscator = require("webpack-obfuscator");
    // 生产环境,测试和正式
    const IS_PROD = ["production", "prod", "uat"].includes(process.env.NODE_ENV);
    module.exports = {
      publicPath: process.env.NODE_ENV === "production" ? "./" : "/",
      productionSourceMap: false,
      configureWebpack: (config) => {
        if (IS_PROD) {
          return {
            plugins: [
              new JavaScriptObfuscator(
                {
                  // 打乱Unicode数组顺序
    		      rotateUnicodeArray: true, 
    		      // 紧凑 从输出混淆代码中删除换行符。
    		      compact: true, 
    		      /* 此选项极大地影响了运行速度降低1.5倍的性能。 启用代码控制流展平。
    		      控制流扁平化是源代码的结构转换,阻碍了程序理解。*/
    		      controlFlowFlattening: true, 
    		      controlFlowFlatteningThreshold: 0.8,
    		      /* 此选项大大增加了混淆代码的大小(最多200%) 此功能将随机的死代码块
    		      (即:不会执行的代码)添加到混淆输出中,从而使得更难以进行反向工程设计。*/
    		      deadCodeInjection: true, 
    		      deadCodeInjectionThreshold: 0.5,
    		      // 调试保护  如果您打开开发者工具,可以冻结您的浏览器。
    		      debugProtection: false, 
    		      /* 如果选中,则会在“控制台”选项卡上使用间隔强制调试模式,这使得使用“开发
    		      人员工具”的其他功能变得更加困难。它是如何工作的?一个调用调试器的特殊代码;
    		      在整个混淆的源代码中反复插入。*/
    		      debugProtectionInterval: false, 
    		      /* 通过用空函数替换它们来禁用console.log,console.info,
    		      console.error和console.warn。这使得调试器的使用更加困难。*/
    		      disableConsoleOutput: true, 
    		      /* 锁定混淆的源代码,使其仅在特定域和/或子域上运行。这使得有人只需复制并粘
    		      贴源代码并在别处运行就变得非常困难。多个域和子域可以将代码锁定到多个域或子域。
    		      例如,要锁定它以使代码仅在www.example.com上运行添加www.example.com,以使其
    		      在example.com的任何子域上运行,请使用.example.com。*/
    		      domainLock: [], 
    		      // 标识符的混淆方式 hexadecimal(十六进制) mangled(短标识符)
    		      identifierNamesGenerator: 'hexadecimal', 
    		      // 此选项使所有全局标识符都具有特定前缀。
    		      identifiersPrefix: '', 
    		      inputFileName: '',
    		      log: false,
    		      // 不要启动 通过声明启用全局变量和函数名称的混淆。
    		      renameGlobals: false, 
    		      /* 禁用模糊处理和生成标识符,这些标识符与传递的RegExp模式匹配。例如,
    		      如果添加^ someName,则混淆器将确保以someName开头的所有变量,函数名和函数参数都
    		      不会被破坏。*/
    		      reservedNames: [], 
    		      /* 禁用字符串文字的转换,字符串文字与传递的RegExp模式匹配。例如,如果添加^ some * string,
    		      则混淆器将确保以某些字符串开头的所有字符串都不会移动到`stringArray`。*/
    		      reservedStrings: [], 
    		      /* 通过固定和随机(在代码混淆时生成)的位置移动数组。这使得将删除的字符串的顺序与
                  其原始位置相匹配变得更加困难。如果原始源代码不小,建议使用此选项,因为辅助函数可
                  以引起注意。*/
    		      rotateStringArray: true, 
    		      /* 默认情况下(seed = 0),每次混淆代码时都会得到一个新结果(即:不同的变量名,
    		      插入stringArray的不同变量等)。如果需要可重复的结果,请将种子设置为特定的整数。*/
    		      seed: 0, 
    		      /* 此选项使输出代码能够抵抗格式化和变量重命名。如果试图在混淆代码上使用JavaScript
    		      美化器,代码将不再起作用,使得理解和修改它变得更加困难。需要紧凑代码设置。*/
    		      selfDefending: true, 
    		      /* 请确保不要上传嵌入了内嵌源代码的混淆源代码,因为它包含原始源代码。源映射可以帮助您调
    		      试混淆的Java Script源代码。如果您希望或需要在生产中进行调试,可以将单独的源映射文件上载
    		      到秘密位置,然后将浏览器指向该位置。*/
    		      sourceMap: false, 
    		      // 这会将源的源映射嵌入到混淆代码的结果中。如果您只想在计算机上进行本地调试,则非常有用。
    		      sourceMapBaseUrl: '', 
    		      sourceMapFileName: '',
    		      sourceMapMode: 'separate',
    		      /* 将stringArray数组移位固定和随机(在代码混淆时生成)的位置。这使得将删除的字符串的顺序
    		      与其原始位置相匹配变得更加困难。如果原始源代码不小,建议使用此选项,因为辅助函数可以引起注意。*/
    		      stringArray: true, 
    		      /* 此选项可能会略微降低脚本速度。使用Base64或RC4对stringArray的所有字符串文字进行编码,
    		      并插入一个特殊的函数,用于在运行时将其解码回来。*/
    		      stringArrayEncoding: ['base64'], 
    		      /* 您可以使用此设置调整字符串文字将插入stringArray的概率(从0到1)。此设置在大型代码库中
    		      很有用,因为对stringArray函数的重复调用会降低代码的速度。*/
    		      stringArrayThreshold: 0.8, 
    		      /* 您可以将混淆代码的目标环境设置为以下之一: Browser 、Browser No Eval 、Node 目前浏览器
    		      和节点的输出是相同的。*/
    		      target: 'browser', 
    		      /* 转换(混淆)对象键。例如,此代码var a = {enabled:true};使用此选项进行模糊处理时,
    		      将隐藏已启用的对象键:var a = {};a [_0x2ae0 [('0x0')] = true;。 
    		      理想情况下与String Array设置一起使用。*/
    		      transformObjectKeys: true, 
    		      /* 将所有字符串转换为其unicode表示形式。例如,字符串“Hello World!”
    		      将被转换为“'\ x48 \ x65 \ x6c \ x6c \ x6f \ x20 \ x57 \ x6f \ x72 \ x6c \ x64 \ x21”。*/
    		      unicodeEscapeSequence: true, 
    		      // ... [See more](https://github.com/javascript-obfuscator/javascript-obfuscator)
    			},
                []
              ),
            ],
          };
        }
      },
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100

    通过以上代码,就完成JavaScriptObfuscator配置了

    3. 执行代码混淆

    build项目时,代码就被混淆过了

  • 相关阅读:
    【重识云原生】第六章容器6.1.7.3节——cgroups数据结构剖析
    力扣刷题:整数反转、 字符串转换整数 (atoi)、回文数
    MySQL数据库 #2
    业务:财会业务知识之借贷记账法
    mysql解压版安装与卸载
    抖音商家找达人带货怎么给链接?抖音带货操作方法分享
    面向Java开发者的ChatGPT提示词工程(4)
    如何在Python爬虫中使用IP代理以避免反爬虫机制
    树的应用 —— 二叉树:二叉树的性质
    【NOI模拟赛】字符串匹配(后缀自动机SAM,莫队,分块)
  • 原文地址:https://blog.csdn.net/gianttj/article/details/132752820