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

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

vue項目配置 webpack-obfuscator 進行代碼加密混淆的實現

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

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

安裝

vue項目配置 webpack-obfuscator 進行代碼加密混淆的實現

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 // 數組內是需要排除的文件 }, [’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 無參數時

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

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

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

構建后文件大小: 2,424 字節(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')]);

對比表格

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

主要屬性

{ // 壓縮,無換行 compact: true, // 是否啟用控制流扁平化(降低1.5倍的運行速度) controlFlowFlattening: false, // 應用概率;在較大的代碼庫中,建議降低此值,因為大量的控制流轉換可能會增加代碼的大小并降低代碼的速度。 controlFlowFlatteningThreshold: 0.75, // 隨機的死代碼塊(增加了混淆代碼的大小) deadCodeInjection: false, // 死代碼塊的影響概率 deadCodeInjectionThreshold: 0.4, // 此選項幾乎不可能使用開發者工具的控制臺選項卡 debugProtection: false, // 如果選中,則會在“控制臺”選項卡上使用間隔強制調試模式,從而更難使用“開發人員工具”的其他功能。 debugProtectionInterval: false, // 通過用空函數替換它們來禁用console.log,console.info,console.error和console.warn。這使得調試器的使用更加困難。 disableConsoleOutput: false, //鎖定混淆的源代碼,使其僅在特定域和/或子域上運行。這使得某人只需復制并粘貼您的源代碼并在其他地方運行就變得非常困難。 domainLock: [], //標識符的混淆方式 hexadecimal(十六進制) mangled(短標識符) identifierNamesGenerator: ’hexadecimal’, //全局標識符添加特定前綴,在混淆同一頁面上加載的多個文件時使用此選項。此選項有助于避免這些文件的全局標識符之間發生沖突。為每個文件使用不同的前綴 identifiersPrefix: ’’, inputFileName: ’’, // 允許將信息記錄到控制臺。 log: false, // 是否啟用全局變量和函數名稱的混淆 renameGlobals: false, // 禁用模糊處理和生成標識符 reservedNames: [], // 禁用字符串文字的轉換 reservedStrings: [], // 通過固定和隨機(在代碼混淆時生成)的位置移動數組。這使得將刪除的字符串的順序與其原始位置相匹配變得更加困難。如果原始源代碼不小,建議使用此選項,因為輔助函數可以引起注意。 rotateStringArray: true, // 混淆后的代碼,不能使用代碼美化,同時需要配置 cpmpat:true; seed: 0, selfDefending: false, sourceMap: false, sourceMapBaseUrl: ’’, sourceMapFileName: ’’, sourceMapMode: ’separate’, // 刪除字符串文字并將它們放在一個特殊的數組中 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, // 調整字符串文字將插入stringArray的概率 stringArrayThreshold: 0.75, // 您可以將混淆代碼的目標環境設置為以下之一: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數組 的兼容 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 代碼混淆內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久久久久久久丰满| 欧美日韩亚洲一区二区三区在线| 日韩精品三级| 亚洲一二av| 综合色就爱涩涩涩综合婷婷| 免费中文字幕日韩欧美| 亚洲欧美日韩国产一区| 亚洲欧美日韩高清在线| 久久精品动漫| 人在线成免费视频| yellow在线观看网址| 在线看片国产福利你懂的| caoporn视频在线| 成人羞羞在线观看网站| 亚洲特级毛片| 亚洲深夜影院| 亚洲人www| 欧美日韩一区自拍| 久草精品视频| 欧美三级网址| 免费视频亚洲| 日韩视频一区| 亚洲精品一级| 久久99青青| 国产中文欧美日韩在线| 日韩久久精品网| 国产一区二区三区自拍| 国产一区二区高清| 婷婷视频一区二区三区| 国产精品欧美三级在线观看| 丁香婷婷久久| 激情综合网五月| 蜜桃一区二区三区在线| 91精品美女| 国产拍在线视频| 99国产精品久久久久久久成人热| 日韩精品a在线观看91| 麻豆精品在线观看| 成人精品天堂一区二区三区| 欧美va亚洲va日韩∨a综合色| 在线精品一区| 精品久久美女| 国产婷婷精品| 麻豆精品在线播放| 午夜免费一区| 国产精品日本一区二区三区在线| 久久久成人网| 欧美亚洲网站| 欧美va天堂在线| 国产欧美二区| 女人天堂亚洲aⅴ在线观看| 日本视频一区二区| 香蕉成人av| 亚洲精品看片| 精品国产a一区二区三区v免费| 亚洲福利精品| 热久久久久久| 久久久噜噜噜| 国产精品男女| 午夜电影亚洲| 国产精品chinese| 亚洲大全视频| 国产极品嫩模在线观看91精品| 不卡一区2区| 国产精品永久| 91久久午夜| 福利视频一区| 日韩综合一区二区三区| 久久精品亚洲欧美日韩精品中文字幕| 快she精品国产999| 国产精品久久观看| 亚洲精品高潮| 国产综合亚洲精品一区二| 亚洲大全视频| 国产粉嫩在线观看| 久久av偷拍| 亚洲精品动态| 欧美精品一区二区久久| 国产精品一区二区免费福利视频| 夜久久久久久| 亚洲黄色免费av| 国产精品一区二区三区av| 国产精品毛片| 少妇久久久久| 国产精品亲子伦av一区二区三区| 夜夜嗨网站十八久久 | 综合欧美精品| 久久精品国产68国产精品亚洲| 国产精品久久久网站| 美女91精品| 日本久久精品| 国产精品久久久一区二区| 亚洲精品视频一二三区| 一本一道久久a久久精品蜜桃| 中文一区一区三区高中清不卡免费| 91亚洲精品在看在线观看高清| 99国产精品久久久久久久| 国产一区二区三区黄网站| 91嫩草精品| 免费在线看一区| 久久一级电影| 日韩综合精品| 欧美激情另类| 国产一区二区三区黄网站| 国产精品**亚洲精品| 青草综合视频| 日本亚洲欧美天堂免费| 美女久久网站| 999在线观看精品免费不卡网站| 欧洲av不卡| 激情综合五月| 九九九精品视频| 国产亚洲一区二区三区啪| 麻豆91精品| 性色av一区二区怡红| 亚洲精华国产欧美| 狠狠干成人综合网| 婷婷亚洲综合| 99视频精品全部免费在线视频| 欧洲一区二区三区精品| 国产精品不卡| 高清一区二区三区| 成人国产精选| 欧美成人a交片免费看| 日韩欧美另类一区二区| 黄色在线网站噜噜噜| 国产91欧美| 精品国产亚洲一区二区三区大结局| 久久不见久久见中文字幕免费| 免费视频一区二区三区在线观看 | 中文字幕一区二区三区四区久久 | 欧美aa一级| 亚洲二区在线| 国产视频一区免费看| 视频一区中文字幕| 男人的天堂亚洲一区| 日韩影片在线观看| 国产精品一区二区中文字幕| 久久亚州av| 色天使综合视频| 亚洲色诱最新| 日韩欧美美女在线观看| 国产日韩免费| 老司机免费视频一区二区三区| 日本激情一区| 欧美福利在线| 免费美女久久99| 国产剧情在线观看一区| 成人午夜网址| 亚洲成人国产| 黄色成人在线网址| 亚洲伊人精品酒店| 国产精品丝袜在线播放| 欧美成人精品三级网站| 香蕉视频成人在线观看| 国产日本精品| 一区二区精品伦理...| 国模 一区 二区 三区| 爽好多水快深点欧美视频| 久久精品999| 色偷偷色偷偷色偷偷在线视频| 在线观看免费一区二区| 日韩国产一区二| 精品少妇一区| 亚洲国产日韩欧美在线| 婷婷亚洲成人| 日韩.com| 免费成人av在线播放| 美女视频免费精品| 99久久久久久中文字幕一区| 综合激情网...| 国产一区二区精品福利地址| 欧美日韩国产欧| 国产精品jk白丝蜜臀av小说| 久久精品导航| 久久精品 人人爱| 午夜av成人| 18国产精品| 不卡在线一区二区| 国产精品日韩精品中文字幕| 四虎884aa成人精品最新| 中文字幕日本一区二区| 精品丝袜久久| 麻豆9191精品国产| 韩国一区二区三区视频| 日韩中文字幕区一区有砖一区| 欧美激情在线精品一区二区三区| 久久婷婷久久| 国产伦精品一区二区三区视频| 久久中文视频| 国产精品一区二区免费福利视频 | 欧美gv在线| 日韩高清不卡一区| 成人羞羞视频播放网站| 日韩精品午夜视频| 亚洲女同中文字幕| 精品美女视频 | 欧美日韩国产传媒| 麻豆国产一区| 久久www成人_看片免费不卡|