成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

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

瀏覽:8日期: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
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
亚洲欧美视频在线观看视频| 亚洲大片av| 黄色免费成人| 国产日本欧洲亚洲| av在线一区二区三区| 欧美一区二区三区视频免费播放| 天天av天天翘天天综合网| 一区二区三区四区五区在线| 亚洲男人的天堂一区二区 | 亚洲三级免费| 最新国产成人在线观看| 亚洲国产欧美日韩| 亚洲乱码精品一二三四区日韩在线 | 午夜精品免费在线观看| 国产精品亚洲综合久久| 夜夜夜精品看看| 午夜在线观看免费一区| 亚洲成人在线观看视频| 亚洲欧美高清| 日本视频一区二区| 欧美日韩中文另类| 国产一区二区三区精品欧美日韩一区二区三区| 欧美日韩国产中文| 成人综合婷婷国产精品久久蜜臀| 精品国产成人在线影院| www.亚洲精品| 国产午夜精品久久久久久免费视| 欧美一区二区三区在线播放| 日本一区二区三区视频视频| 欧美区高清在线| 亚洲欧美一区二区久久| 国产精品日韩久久久| 天堂成人国产精品一区| 久久综合五月| 韩国av一区二区三区四区| 日韩亚洲欧美高清| a美女胸又www黄视频久久| 精品福利一二区| 午夜精品一区二区在线观看| 中文字幕一区免费在线观看| 亚洲精品视频一区二区三区| 亚洲不卡一区二区三区| 欧美日韩精品欧美日韩精品一综合| 国产精品99久久久| www国产成人| 91久久亚洲| 日本欧美在线观看| 日韩欧美成人午夜| 久久99久久久久久久久久久| 日韩一区二区三区免费看 | 好吊视频一区二区三区四区| 日韩毛片精品高清免费| 亚洲一区二区三区午夜| 久久国产成人午夜av影院| 精品国产亚洲一区二区三区在线观看| 午夜欧美精品| 亚洲成人在线网站| 69堂精品视频| 亚洲视频免费| 日本不卡在线视频| 欧美成va人片在线观看| 国自产拍偷拍福利精品免费一 | 精品一区二区久久久| 2022国产精品视频| 在线日韩中文| 日本伊人色综合网| 欧美成人vr18sexvr| 在线精品亚洲一区二区| 奇米精品一区二区三区四区| 精品久久久久久久久久久院品网| 亚洲精品1234| 国内外成人在线| 国产精品三级久久久久三级| 久久精品成人| 成人福利视频在线看| 亚洲综合男人的天堂| 91精选在线观看| 好看不卡的中文字幕| 日本中文字幕一区二区视频| 精品1区2区在线观看| 亚洲深夜影院| 国产成人午夜精品5599| 综合久久综合久久| 欧美日韩三级在线| 一区二区视频欧美| 国产尤物一区二区| 亚洲另类在线一区| 欧美一级在线视频| 国产欧美一区二区色老头 | 亚洲国产精品久久久久秋霞影院| 综合久久久久久| 男男视频亚洲欧美| 久久精品日韩一区二区三区| 免播放器亚洲| 成人免费视频caoporn| 亚洲激情在线播放| 日韩欧美一区二区久久婷婷| 国产日韩综合| 99久久婷婷国产综合精品电影| 亚洲国产一区视频| 欧美不卡一区二区三区四区| 国产精品日韩一区二区| 高清久久久久久| 精品国产伦理网| 色噜噜久久综合| 欧美一区1区三区3区公司| 日韩精品色哟哟| 国产精品免费av| 4438x成人网最大色成网站| 日韩视频一区二区三区在线播放免费观看| 国产二区国产一区在线观看| 图片区小说区区亚洲影院| 久久久电影一区二区三区| 狂野欧美一区| 国内自拍亚洲| 成人高清免费在线播放| 琪琪久久久久日韩精品| 中文字幕免费观看一区| 7878成人国产在线观看| 亚洲中字黄色| 91视频免费观看| 久久99久久久欧美国产| 亚洲电影你懂得| 国产精品美女一区二区| 欧美xxxxxxxx| 欧美日韩久久久| 久久成人在线| 狠狠色综合色区| 不卡av在线网| 国产一区二区三区免费观看| 天天操天天色综合| 亚洲视频在线观看一区| 久久综合久久久久88| 欧美精品一二三| 色屁屁一区二区| 999亚洲国产精| 国产精品草草| 91美女蜜桃在线| 白白色 亚洲乱淫| 成人性色生活片| 国产一区二区三区免费播放| 免费看日韩精品| 午夜免费久久看| 亚洲小少妇裸体bbw| 中文字幕中文在线不卡住| 久久综合久久综合亚洲| 欧美一区二区三区在线观看视频| 一本一本久久a久久精品综合麻豆| 亚洲二区三区四区| 欧美日韩国产亚洲一区| 国产98色在线|日韩| 国产一区二区在线影院| 久久国产综合精品| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲一区自拍偷拍| 亚洲欧美区自拍先锋| 国产精品乱码一区二三区小蝌蚪| 精品久久五月天| 日韩一区二区在线观看视频播放| 欧美日韩一区成人| 日本韩国精品一区二区在线观看| 午夜亚洲性色福利视频| 国产日韩一区二区| 亚洲国产日韩欧美| 伊人影院久久| 欧美日韩视频| 色综合一区二区| 91美女在线视频| 99精品国产视频| 99麻豆久久久国产精品免费优播| 粉嫩欧美一区二区三区高清影视| 国产乱码精品一区二区三区五月婷 | 一区二区免费在线播放| 亚洲欧洲制服丝袜| 亚洲色图欧洲色图婷婷| 亚洲色图.com| 亚洲日本中文字幕区| 亚洲人精品一区| 亚洲欧洲中文日韩久久av乱码| 国产精品国产成人国产三级| 国产精品久久久99| 亚洲免费观看高清完整版在线| 综合分类小说区另类春色亚洲小说欧美 | 欧美日韩卡一卡二| 欧美日本韩国一区二区三区视频 | 国产精品久久午夜夜伦鲁鲁| 国产精品乱人伦| 中文字幕亚洲视频| 亚洲三级免费电影| 亚洲激情成人在线| 亚洲成av人**亚洲成av**| 午夜av一区二区三区| 天堂av在线一区| 美女在线观看视频一区二区| 精品午夜久久福利影院| 成人免费精品视频| 韩国免费一区| 亚洲欧美日韩另类精品一区二区三区| 日本久久一区二区| 欧美一区二区三区日韩|