日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

vue項目配置 webpack-obfuscator 進行代碼加密混淆的實現(xiàn)

瀏覽:24日期:2022-10-04 17:32:24
背景

公司代碼提供給第三方使用,為了不完全泄露源碼,需要對給出的代碼進行加密混淆,前端代碼雖然無法做到完全加密混淆,但是通過使用 webpack-obfuscator 通過增加隨機廢代碼段、字符編碼轉義等方法可以使構建代碼完全混淆,達到無法恢復源碼甚至無法閱讀的目的。

安裝

vue項目配置 webpack-obfuscator 進行代碼加密混淆的實現(xiàn)

webpack-obfuscator https://www.npmjs.com/package/webpack-obfuscator

npm install --save-dev webpack-obfuscator

配置

// webpack.config.jsconst JavaScriptObfuscator = require(’webpack-obfuscator’);module.exports = { entry: { ’abc’: ’./test/input/index.js’, ’cde’: ’./test/input/index1.js’ }, output: { path: ’dist’, filename: ’[name].js’ }, plugins: [ new JavaScriptObfuscator({ rotateUnicodeArray: true // 數(shù)組內(nèi)是需要排除的文件 }, [’abc.js’]) ]};

vue cli 項目配置:

// vue.config.jsconst path = require(’path’);var JavaScriptObfuscator = require(’webpack-obfuscator’);module.exports = { publicPath: process.env.NODE_ENV === ’production’ ? ’./’ : ’/’, productionSourceMap: false, configureWebpack: { plugins: [ new JavaScriptObfuscator({ rotateStringArray: true, }, []) ] }, pwa: {}, pages: {}}

若只想在打包時加密混淆,本地運行時不混淆,可以進行以下的配置:

configureWebpack: (process.env.NODE_ENV === ’production’) ? { plugins: [ new JavaScriptObfuscator({ // ... }, []) ] } : {},

vue cli 2.x 配置在 webpack.prod.conf.js 中

構建

npm run build構建文件對比

1. 原始文件

// test.jsfunction abc() { for (let i = 0; i < 10; i++) { console.log(`第${i}個,你好,hello`) }}abc()

2. webpack 默認工具uglifyjs-webpack-plugin

webpackJsonp([2],{lVK7:function(o,l){!function(){for(var o=0;o<10;o++)console.log('第'+o+'個,你好,hello')}()}},['lVK7']);

3. webpack-obfuscator 無參數(shù)時

new JavaScriptObfuscator({}, [])

var _0x1f6e=['個,你好,hello','lVK7','log'];!function(n,o){!function(o){for(;--o;)n.push(n.shift())}(++o)}(_0x1f6e,323);var _0x3655=function(n,o){return _0x1f6e[n-=0]};webpackJsonp([2],{lVK7:function(n,o){!function(){for(var n=0;n<10;n++)console[_0x3655('0x0')]('第'+n+_0x3655('0x1'))}()}},[_0x3655('0x2')]);

4. webpack-obfuscator 高度混淆

低性能:性能比沒有模糊處理慢 50-100%

new JavaScriptObfuscator({ // 壓縮代碼 compact: true, // 是否啟用控制流扁平化(降低1.5倍的運行速度) controlFlowFlattening: true, // 應用概率;在較大的代碼庫中,建議降低此值,因為大量的控制流轉換可能會增加代碼的大小并降低代碼的速度。 controlFlowFlatteningThreshold: 1, // 隨機的死代碼塊(增加了混淆代碼的大小) deadCodeInjection: true, // 死代碼塊的影響概率 deadCodeInjectionThreshold: 1, // 此選項幾乎不可能使用開發(fā)者工具的控制臺選項卡 debugProtection: true, // 如果選中,則會在“控制臺”選項卡上使用間隔強制調(diào)試模式,從而更難使用“開發(fā)人員工具”的其他功能。 debugProtectionInterval: true, // 通過用空函數(shù)替換它們來禁用console.log,console.info,console.error和console.warn。這使得調(diào)試器的使用更加困難。 disableConsoleOutput: true, // 標識符的混淆方式 hexadecimal(十六進制) mangled(短標識符) identifierNamesGenerator: ’hexadecimal’, log: false, // 是否啟用全局變量和函數(shù)名稱的混淆 renameGlobals: false, // 通過固定和隨機(在代碼混淆時生成)的位置移動數(shù)組。這使得將刪除的字符串的順序與其原始位置相匹配變得更加困難。如果原始源代碼不小,建議使用此選項,因為輔助函數(shù)可以引起注意。 rotateStringArray: true, // 混淆后的代碼,不能使用代碼美化,同時需要配置 cpmpat:true; selfDefending: true, // 刪除字符串文字并將它們放在一個特殊的數(shù)組中 stringArray: true, stringArrayEncoding: ’rc4’, stringArrayThreshold: 1, // 允許啟用/禁用字符串轉換為unicode轉義序列。Unicode轉義序列大大增加了代碼大小,并且可以輕松地將字符串恢復為原始視圖。建議僅對小型源代碼啟用此選項。 transformObjectKeys: true, unicodeEscapeSequence: false}, []),

構建后文件大小: 29,999 字節(jié)(29.2 KB)

var _0xa0d1=['w7Bzw6oKw6E=','wrwIUcOVw4M=','w4bChi3DtcOQ','wpLDtsK5w4LDpA==','OUlQwp1z','woEqw4XCtsOe','YR3DrkDCiA==','woAjwq/Ci8KQ','dDNzw5bDgA==',// ...('0x201','xatR')]=function(x){return x()},x[_0x34e6('0x202','vdcx')](_0x2c01f8)},4e3);

3. webpack-obfuscator 中等混淆

最佳性能:性能比沒有模糊處理慢 30-35%

new JavaScriptObfuscator({ // 壓縮代碼 compact: true, // 是否啟用控制流扁平化(降低1.5倍的運行速度) controlFlowFlattening: true, // 應用概率;在較大的代碼庫中,建議降低此值,因為大量的控制流轉換可能會增加代碼的大小并降低代碼的速度。 controlFlowFlatteningThreshold: 0.75, // 隨機的死代碼塊(增加了混淆代碼的大小) deadCodeInjection: true, // 死代碼塊的影響概率 deadCodeInjectionThreshold: 0.4, // 此選項幾乎不可能使用開發(fā)者工具的控制臺選項卡 debugProtection: false, // 如果選中,則會在“控制臺”選項卡上使用間隔強制調(diào)試模式,從而更難使用“開發(fā)人員工具”的其他功能。 debugProtectionInterval: false, // 通過用空函數(shù)替換它們來禁用console.log,console.info,console.error和console.warn。這使得調(diào)試器的使用更加困難。 disableConsoleOutput: true, // 標識符的混淆方式 hexadecimal(十六進制) mangled(短標識符) identifierNamesGenerator: ’hexadecimal’, log: false, // 是否啟用全局變量和函數(shù)名稱的混淆 renameGlobals: false, // 通過固定和隨機(在代碼混淆時生成)的位置移動數(shù)組。這使得將刪除的字符串的順序與其原始位置相匹配變得更加困難。如果原始源代碼不小,建議使用此選項,因為輔助函數(shù)可以引起注意。 rotateStringArray: true, // 混淆后的代碼,不能使用代碼美化,同時需要配置 cpmpat:true; selfDefending: true, // 刪除字符串文字并將它們放在一個特殊的數(shù)組中 stringArray: true, stringArrayEncoding: ’base64’, stringArrayThreshold: 0.75, transformObjectKeys: true, // 允許啟用/禁用字符串轉換為unicode轉義序列。Unicode轉義序列大大增加了代碼大小,并且可以輕松地將字符串恢復為原始視圖。建議僅對小型源代碼啟用此選項。 unicodeEscapeSequence: false}, []),

構建后文件大小:7066字節(jié)(6.90kb)

var _0x1a25=['UmFzT1U=','RkVIc0o=','VUt2eW4=','Q29IS0g=','V1NSZ0k=','d3RNT2w=','dlV6cUw=','RlpzZWg=','QnpzSlE=','cXBqQ1k=','YXBwbHk=','bFZLNw==','Y3p1Ymo=','TFZlQXE=','Y2NKWlY=','cmV0dXJuIChmdW5jdGlvbigpIA==',// ...(b[_0x4bcb('0x2a')]('第'+c,b[_0x4bcb('0x2b')]))}})}},[_0x4bcb('0x2f')]);

4. webpack-obfuscator 低混淆

高性能: 性能稍微慢于沒有混淆

new JavaScriptObfuscator({ // 壓縮代碼 compact: true, // 是否啟用控制流扁平化(降低1.5倍的運行速度) controlFlowFlattening: false, // 隨機的死代碼塊(增加了混淆代碼的大小) deadCodeInjection: false, // 此選項幾乎不可能使用開發(fā)者工具的控制臺選項卡 debugProtection: false, // 如果選中,則會在“控制臺”選項卡上使用間隔強制調(diào)試模式,從而更難使用“開發(fā)人員工具”的其他功能。 debugProtectionInterval: false, // 通過用空函數(shù)替換它們來禁用console.log,console.info,console.error和console.warn。這使得調(diào)試器的使用更加困難。 disableConsoleOutput: true, // 標識符的混淆方式 hexadecimal(十六進制) mangled(短標識符) identifierNamesGenerator: ’hexadecimal’, log: false, // 是否啟用全局變量和函數(shù)名稱的混淆 renameGlobals: false, // 通過固定和隨機(在代碼混淆時生成)的位置移動數(shù)組。這使得將刪除的字符串的順序與其原始位置相匹配變得更加困難。如果原始源代碼不小,建議使用此選項,因為輔助函數(shù)可以引起注意。 rotateStringArray: true, // 混淆后的代碼,不能使用代碼美化,同時需要配置 cpmpat:true; selfDefending: true, // 刪除字符串文字并將它們放在一個特殊的數(shù)組中 stringArray: true, stringArrayEncoding: false, stringArrayThreshold: 0.75, // 允許啟用/禁用字符串轉換為unicode轉義序列。Unicode轉義序列大大增加了代碼大小,并且可以輕松地將字符串恢復為原始視圖。建議僅對小型源代碼啟用此選項。 unicodeEscapeSequence: false}, []),

構建后文件大小: 2,424 字節(jié)(2.36 KB)

var _0x37a6=['exception','trace','console','個,你好,hello','lVK7','apply','return (function() ',’{}.constructor('return this')( )’,'log','warn','debug','info','error'];!function(n,e){var o=function(e){for(;--e;)n.push(n.shift())};// ...[_0xe1fd('0x3')]('第'+n+_0xe1fd('0xb'))}()}},[_0xe1fd('0xc')]);

對比表格

文件名稱 文件大小 正常構建 無參數(shù) 高度混淆 中度混淆 低度混淆 test.js 117字節(jié) 177字節(jié) 363字節(jié) 29.2 KB(29,999 字節(jié)) 6.90KB(7066字節(jié)) 2.36 KB(2,424 字節(jié)) jquery.js 111 KB (113,852 字節(jié)) 85.0 KB (87,064 字節(jié)) 115 KB (117,770 字節(jié)) 1.24 MB (1,304,998 字節(jié)) 401 KB (411,543 字節(jié)) 117 KB (120,243 字節(jié))

主要屬性

{ // 壓縮,無換行 compact: true, // 是否啟用控制流扁平化(降低1.5倍的運行速度) controlFlowFlattening: false, // 應用概率;在較大的代碼庫中,建議降低此值,因為大量的控制流轉換可能會增加代碼的大小并降低代碼的速度。 controlFlowFlatteningThreshold: 0.75, // 隨機的死代碼塊(增加了混淆代碼的大小) deadCodeInjection: false, // 死代碼塊的影響概率 deadCodeInjectionThreshold: 0.4, // 此選項幾乎不可能使用開發(fā)者工具的控制臺選項卡 debugProtection: false, // 如果選中,則會在“控制臺”選項卡上使用間隔強制調(diào)試模式,從而更難使用“開發(fā)人員工具”的其他功能。 debugProtectionInterval: false, // 通過用空函數(shù)替換它們來禁用console.log,console.info,console.error和console.warn。這使得調(diào)試器的使用更加困難。 disableConsoleOutput: false, //鎖定混淆的源代碼,使其僅在特定域和/或子域上運行。這使得某人只需復制并粘貼您的源代碼并在其他地方運行就變得非常困難。 domainLock: [], //標識符的混淆方式 hexadecimal(十六進制) mangled(短標識符) identifierNamesGenerator: ’hexadecimal’, //全局標識符添加特定前綴,在混淆同一頁面上加載的多個文件時使用此選項。此選項有助于避免這些文件的全局標識符之間發(fā)生沖突。為每個文件使用不同的前綴 identifiersPrefix: ’’, inputFileName: ’’, // 允許將信息記錄到控制臺。 log: false, // 是否啟用全局變量和函數(shù)名稱的混淆 renameGlobals: false, // 禁用模糊處理和生成標識符 reservedNames: [], // 禁用字符串文字的轉換 reservedStrings: [], // 通過固定和隨機(在代碼混淆時生成)的位置移動數(shù)組。這使得將刪除的字符串的順序與其原始位置相匹配變得更加困難。如果原始源代碼不小,建議使用此選項,因為輔助函數(shù)可以引起注意。 rotateStringArray: true, // 混淆后的代碼,不能使用代碼美化,同時需要配置 cpmpat:true; seed: 0, selfDefending: false, sourceMap: false, sourceMapBaseUrl: ’’, sourceMapFileName: ’’, sourceMapMode: ’separate’, // 刪除字符串文字并將它們放在一個特殊的數(shù)組中 stringArray: true, // 編碼的所有字符串文字stringArray使用base64或rc4并插入即用其解碼回在運行時的特殊代碼。true(boolean):stringArray使用編碼值base64;false(boolean):不編碼stringArray值;’base64’(string):stringArray使用編碼值base64;’rc4’(string):stringArray使用編碼值rc4。大約慢30-50%base64,但更難獲得初始值。建議禁用unicodeEscapeSequence帶rc4編碼的選項以防止非常大的混淆代碼。 stringArrayEncoding: false, // 調(diào)整字符串文字將插入stringArray的概率 stringArrayThreshold: 0.75, // 您可以將混淆代碼的目標環(huán)境設置為以下之一:Browser;Browser No Eval;Node target: ’browser’, // 是否啟用混淆對象鍵 transformObjectKeys: false, // 允許啟用/禁用字符串轉換為unicode轉義序列。Unicode轉義序列大大增加了代碼大小,并且可以輕松地將字符串恢復為原始視圖。建議僅對小型源代碼啟用此選項。 unicodeEscapeSequence: false}

注意

安裝 webpack-obfuscator 時要注意webpack-obfuscator的版本要與本地項目 webpack 版本相匹配,我用的是webpack-obfuscator@0.18.0 項目 webpack 是 4.x 版本。(4.x版 本 webpack 使用最新版 webpack-obfuscator@3.3.0 會報錯無法使用,webpack 杳升級到 5.x 版本)。 excludes數(shù)組 的兼容 multimatch包語法,例如支持 [’js/chunk-vendors.**.js’]、 [’excluded_bundle_name.js’, ’**_bundle_name.js’] 或 ’excluded_bundle_name.js’等。

文章地址:https://www.cnblogs.com/dragonir/p/14445767.html 作者:dragonir

相關文章參考:

js代碼混淆

webpack-obfuscator https://blog.csdn.net/qq_31126175/article/details/86526237

到此這篇關于vue項目配置 webpack-obfuscator 進行代碼加密混淆的文章就介紹到這了,更多相關vue webpack-obfuscator 代碼混淆內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
石原莉奈在线亚洲三区| 免费成人在线影院| 日韩久久精品| 日韩av一区二区在线影视| 韩国一区二区三区视频| 在线观看亚洲精品福利片| 三级小说欧洲区亚洲区| 欧美精品国产白浆久久久久| 久久激情中文| 高清精品久久| 国产日韩欧美在线播放不卡| 亚洲高清影视| 欧美二三四区| 久久精品欧洲| 日本a级不卡| 在线天堂中文资源最新版| 中文字幕一区二区精品区| 久久一区亚洲| 国产欧美一区二区三区精品观看 | 国产精品第一| 亚洲精品在线a| 在线看片日韩| 鲁大师成人一区二区三区| 蜜桃成人精品| а√在线中文在线新版| 视频一区日韩精品| 日韩综合小视频| 欧美精品中文| 久久精品资源| 久久精品国产精品亚洲毛片| 国产免费播放一区二区| 久久天堂影院| 日韩在线不卡| 午夜久久99| 免费日韩av| 日韩中文字幕一区二区高清99| 欧美日韩国产一区精品一区| 在线亚洲观看| 日韩av黄色在线| 麻豆一区二区在线| 国产精品久久久久毛片大屁完整版| 国产欧美在线| 久久美女性网| 石原莉奈在线亚洲二区| 欧美三级第一页| 成人羞羞在线观看网站| 伊人久久亚洲影院| 国产欧美日韩精品一区二区三区| 国产va免费精品观看精品视频| 最近高清中文在线字幕在线观看1| 美女精品视频在线| 性欧美69xoxoxoxo| 欧美一级一区| 日韩在线免费| 日韩毛片网站| 国产精品美女午夜爽爽| 日本精品影院| 久久国产麻豆精品| 精品一区在线| 国产精品主播在线观看| 久久蜜桃精品| 国产精品久久久久久久久久白浆| 成人午夜在线| 在线精品视频一区| 日韩精品dvd| 国产亚洲一卡2卡3卡4卡新区| 黑森林国产精品av| 国产精品午夜av| 免费成人性网站| 日韩精品诱惑一区?区三区| 欧美在线综合| 亚洲91久久| 精品精品久久| 国产乱人伦精品一区| 蜜桃视频第一区免费观看| 亚洲伦乱视频| 福利一区在线| 欧美成人一二区| 日韩激情啪啪| 亚洲精品精选| 玖玖玖国产精品| 中文在线一区| 日韩欧美二区| 久久久久观看| 日韩超碰人人爽人人做人人添| 99久久精品国产亚洲精品| 福利一区二区三区视频在线观看| 国产精品mm| 精品视频免费| 国产一区丝袜| 中国字幕a在线看韩国电影| 久久精品国产999大香线蕉| 日韩视频1区| 国产欧美一区二区色老头| 精品网站999| 日产午夜精品一线二线三线| 欧美手机在线| 麻豆精品av| 国产欧美一区二区精品久久久| 日本免费一区二区视频| 国产日韩欧美三级| 日韩三区免费| 亚洲人成网77777色在线播放 | 国内精品伊人| 久久天堂av| 亚洲精品成人一区| a国产在线视频| 亚洲综合日韩| 欧美a在线观看| 欧美日韩激情| 欧美日一区二区在线观看| 亚洲不卡系列| 一区二区亚洲视频| 国产suv精品一区二区四区视频| 狠狠久久婷婷| 久久91视频| 亚洲免费观看高清完整版在线观| 另类小说一区二区三区| 尤物精品在线| 视频在线不卡免费观看| 最新亚洲国产| 国产精品久久久久久av公交车| 久久亚洲在线| 美女毛片一区二区三区四区最新中文字幕亚洲 | 97精品一区二区| 日本大胆欧美人术艺术动态| 久久久久黄色| 国产日韩欧美中文在线| 免费日韩精品中文字幕视频在线| 国产精品13p| 国产日韩亚洲欧美精品| 99国产精品久久久久久久 | 久久久蜜桃一区二区人| 91精品蜜臀一区二区三区在线 | 99久久亚洲精品蜜臀| 色婷婷成人网| 国产精品mm| 麻豆视频在线观看免费网站黄| 亚洲精品国产嫩草在线观看| 欧美不卡在线| 亚洲精品麻豆| 91亚洲国产成人久久精品| 午夜影院欧美| 亚洲免费福利一区| 精品国产亚洲一区二区三区| 欧美精品一二| 91精品国产自产观看在线 | 久久国产乱子精品免费女| 国产精品一区免费在线| 97在线精品| 亚洲女同一区| 国产精品66| 久久九九精品| 国产精品资源| 99视频+国产日韩欧美| 国产欧美一区二区三区国产幕精品| 91一区二区三区四区| 久久亚洲色图| 日韩精品一区二区三区免费观看| 日韩欧美2区| 久久久久久夜| 日韩二区三区四区| 激情综合自拍| 日韩av在线播放网址| 日韩黄色av| 男人的天堂久久精品| 成人小电影网站| 国产色噜噜噜91在线精品| 99视频精品免费观看| 国产精品成久久久久| 日韩极品在线观看| 99日韩精品| 久久精品成人| 在线手机中文字幕| 国产精品免费99久久久| 国产亚洲在线观看| 亚洲网站视频| 欧洲精品一区二区三区| 成人在线免费观看91| 精品一区电影| 国产成人在线中文字幕| 精品亚洲成人| 精品国产乱码久久久| 免费亚洲一区| 黄色网一区二区| 精品无人区麻豆乱码久久久| 麻豆成人91精品二区三区| 国产精品久一| 日韩高清欧美激情| 日韩avvvv在线播放| 中文字幕日本一区二区| 亚洲欧美日韩国产一区| 亚洲激情av| 男女激情视频一区| 日韩精选在线| 久久精品一本| 久久久久亚洲| 国产精品美女久久久| 在线精品视频一区| 国产亚洲观看|