首页 > 编程语言 >vue3+vite 代码混淆插件 | JavaScript obfuscator

vue3+vite 代码混淆插件 | JavaScript obfuscator

时间:2023-11-29 12:05:26浏览次数:39  
标签:混淆 插件 obfuscator 代码 JavaScript 源代码 true stringArray

安装插件

yarn add --dev rollup-plugin-javascript-obfuscator

创建obfuscator.js文件,把下面相应代码放入js文件中

import obfuscatorPlugin from 'rollup-plugin-javascript-obfuscator';
export function codeObfuscatorPlugin(isBuild) {
  if (!isBuild) {
    return [];
  }
  const codeObfuscator = {
    ...obfuscatorPlugin({
      rotateUnicodeArray: true, // 必须为true
      compact: true, // 紧凑 从输出混淆代码中删除换行符。
      controlFlowFlattening: true, // 此选项极大地影响了运行速度降低1.5倍的性能。 启用代码控制流展平。控制流扁平化是源代码的结构转换,阻碍了程序理解。
      controlFlowFlatteningThreshold: 0.8,
      deadCodeInjection: true, // 此选项大大增加了混淆代码的大小(最多200%) 此功能将随机的死代码块(即:不会执行的代码)添加到混淆输出中,从而使得更难以进行反向工程设计。
      deadCodeInjectionThreshold: 0.5,
      debugProtection: false, // 调试保护  如果您打开开发者工具,可以冻结您的浏览器。
      debugProtectionInterval: false, // 如果选中,则会在“控制台”选项卡上使用间隔强制调试模式,这使得使用“开发人员工具”的其他功能变得更加困难。它是如何工作的?一个调用调试器的特殊代码;在整个混淆的源代码中反复插入。
      disableConsoleOutput: true, // 通过用空函数替换它们来禁用console.log,console.info,console.error和console.warn。这使得调试器的使用更加困难。
      domainLock: [], // 锁定混淆的源代码,使其仅在特定域和/或子域上运行。这使得有人只需复制并粘贴源代码并在别处运行就变得非常困难。多个域和子域可以将代码锁定到多个域或子域。例如,要锁定它以使代码仅在www.example.com上运行添加www.example.com,以使其在example.com的任何子域上运行,请使用.example.com。
      identifierNamesGenerator: 'hexadecimal', // 标识符的混淆方式 hexadecimal(十六进制) mangled(短标识符)
      identifiersPrefix: '', // 此选项使所有全局标识符都具有特定前缀。
      inputFileName: '',
      log: false,
      renameGlobals: false, // 不要启动 通过声明启用全局变量和函数名称的混淆。
      reservedNames: [], // 禁用模糊处理和生成标识符,这些标识符与传递的RegExp模式匹配。例如,如果添加^ someName,则混淆器将确保以someName开头的所有变量,函数名和函数参数都不会被破坏。
      reservedStrings: [], // 禁用字符串文字的转换,字符串文字与传递的RegExp模式匹配。例如,如果添加^ some * string,则混淆器将确保以某些字符串开头的所有字符串都不会移动到`stringArray`。
      rotateStringArray: true, //
      seed: 0, // 默认情况下(seed = 0),每次混淆代码时都会得到一个新结果(即:不同的变量名,插入stringArray的不同变量等)。如果需要可重复的结果,请将种子设置为特定的整数。
      selfDefending: true, // 此选项使输出代码能够抵抗格式化和变量重命名。如果试图在混淆代码上使用JavaScript美化器,代码将不再起作用,使得理解和修改它变得更加困难。需要紧凑代码设置。
      sourceMap: false, // 请确保不要上传嵌入了内嵌源代码的混淆源代码,因为它包含原始源代码。源映射可以帮助您调试混淆的Java Script源代码。如果您希望或需要在生产中进行调试,可以将单独的源映射文件上载到秘密位置,然后将浏览器指向该位置。
      sourceMapBaseUrl: '', // 这会将源的源映射嵌入到混淆代码的结果中。如果您只想在计算机上进行本地调试,则非常有用。
      sourceMapFileName: '',
      sourceMapMode: 'separate',
      stringArray: true, // 将stringArray数组移位固定和随机(在代码混淆时生成)的位置。这使得将删除的字符串的顺序与其原始位置相匹配变得更加困难。如果原始源代码不小,建议使用此选项,因为辅助函数可以引起注意。
      stringArrayEncoding: ['base64'], // 此选项可能会略微降低脚本速度。使用Base64或RC4对stringArray的所有字符串文字进行编码,并插入一个特殊的函数,用于在运行时将其解码回来。
      stringArrayThreshold: 0.8, // 您可以使用此设置调整字符串文字将插入stringArray的概率(从0到1)。此设置在大型代码库中很有用,因为对stringArray函数的重复调用会降低代码的速度。
      target: 'browser', // 您可以将混淆代码的目标环境设置为以下之一: Browser 、Browser No Eval 、Node 目前浏览器和节点的输出是相同的。
      transformObjectKeys: true, // 转换(混淆)对象键。例如,此代码var a = {enabled:true};使用此选项进行模糊处理时,将隐藏已启用的对象键:var a = {};a [_0x2ae0 [('0x0')] = true;。 理想情况下与String Array设置一起使用。
      unicodeEscapeSequence: true, // 将所有字符串转换为其unicode表示形式。例如,字符串“Hello World!”将被转换为“'\ x48 \ x65 \ x6c \ x6c \ x6f \ x20 \ x57 \ x6f \ x72 \ x6c \ x64 \ x21”。
      // ... [See more](https://github.com/javascript-obfuscator/javascript-obfuscator)
    }),
    apply: 'build',
  };
  console.log(codeObfuscator);
  return codeObfuscator;
}

vite.config.js 添加如下代码

plugins: createVitePlugins(viteEnv, isBuild),

在相应index.js文件中引入

import { codeObfuscatorPlugin } from './obfuscator'; 
export function createVitePlugins(viteEnv, isBuild) {
  const vitePlugins = [
    // have to
    vue(),
    // support name
    vueSetupExtend(),
  ];
  isBuild&&vitePlugins.push(codeObfuscatorPlugin(true));
  return vitePlugins;
}

https://rollupjs.org/introduction/

https://github.com/javascript-obfuscator/javascript-obfuscator


标签:混淆,插件,obfuscator,代码,JavaScript,源代码,true,stringArray
From: https://blog.51cto.com/echohye/8613668

相关文章

  • IntelliJ IDEA 实用插件
    AlibabaJavaCodingGuidelines代码检查工作FreeMybatisplugin快捷生成xml配置文件sqlGenerateAllSetter快捷生成对象属性默认值GrepConsole控制台搜索内容JsonEditor生成json简便方式JunitGenerator生成测试案例MavenHelpermaven结构查看StopCoding工作多长时......
  • JavaScript 的基本规范
    在平常项目开发中,我们遵守一些这样的基本规范,比如说:(1)一个函数作用域中所有的变量声明应该尽量提到函数首部,用一个var声明,不允许出现两个连续的var声明,声明时  如果变量没有值,应该给该变量赋值对应类型的初始值,便于他人阅读代码时,能够一目了然的知道变量对应的类型值。(2)......
  • Apipost也出IDEA插件了?Apipost-Helper!
    IDEA是一款功能强大的集成开发环境(IDE),它可以帮助开发人员更加高效地编写、调试和部署软件应用程序。我们在编写完接口代码后需要进行接口调试等操作,一般需要打开额外的调试工具。今天给大家介绍一款IDEA插件:Apipost-Helper-2.0。代码写完直接编辑器内调试、还支持生成接口文档、接......
  • IDEA插件推荐
    今天给大家推荐一款IDEA插件:Apipost-Helper-2.0,支持三大功能:写完代码IDEA内一键生成API文档;写完代码IDEA内一键调试;生成API目录树,双击即可快速定位API定义的代码…非常好用!而且完全免费!在IDEA编辑器插件中心输入Apipost搜索安装:Apipost-Helper-2.0插件配置使用ApipostIDEA插件......
  • Apipost也出IDEA插件了?Apipost-Helper!
    IDEA是一款功能强大的集成开发环境(IDE),它可以帮助开发人员更加高效地编写、调试和部署软件应用程序。我们在编写完接口代码后需要进行接口调试等操作,一般需要打开额外的调试工具。今天给大家介绍一款IDEA插件:Apipost-Helper-2.0。代码写完直接编辑器内调试、还支持生成接口文档、......
  • IDEA插件推荐
    今天给大家推荐一款IDEA插件:Apipost-Helper-2.0,支持三大功能:写完代码IDEA内一键生成API文档;写完代码IDEA内一键调试;生成API目录树,双击即可快速定位API定义的代码…非常好用!而且完全免费!在IDEA编辑器插件中心输入Apipost搜索安装:Apipost-Helper-2.0 插件配置使用ApipostID......
  • 测试博客园VSCode插件 —— 欧陆战争4
    测试vscode插件上传随笔所有内容都是来自贴吧“欧陆战争4吧”此处为做笔记自用欧陆战争4吧兵种分类英系:大不列颠、瑞士。西系:西班牙、葡萄牙、丹麦。普系:普鲁士、梅克伦堡、奥尔登堡、拿骚、巴伐利亚、布伦瑞克、黑森、符腾堡、巴登、莱茵同盟。(注意萨克森并不是普系兵......
  • JavaScript
    JavaScript是一种高级解释性脚本语言,已得到广泛使用,是Web开发的重要工具。它由NetscapeCommunicationsCorporation、Mozilla基金会和ECMAInternational开发。它易于学习和实施,并允许开发人员增强网页以提供身临其境的用户体验。JavaScript入门非常简单,您只需要一个用......
  • 简直不能相信!这款IDE仅插件10秒写出飞机大战游戏,太神奇了!
    一、写在前面昨天分享了一款可以帮我们写代码的插件CodeGeex,其实能帮我们解决大部分问题,讲道理已经很好了对不对?but,他就是最好的插件吗?肯定不是,这不又让我又发现了一款可以平替的插件TONGYILingma(阿里云出品智能编码助手通义灵码)。可能有同学会问了,那六哥这两个插件选哪个更好些呢......
  • 用了这款插件,零代码基础也能写代码你信吗?
    一、写在前面使用过chatGPT的同学,可能都会有过这样的经历?遇到代码不会的问题,本能的就会去求助chatGPT,然后并根据chatGPT的回答去优化代码。但是,没了的话,chatGPT是不是也帮不上忙了?还是只有我是这样的情况 ̄□ ̄||当然,这也让我偶然发现这个插件,对于我这种代码渣渣来说,真的是有种被带飞的感......