webpack代碼混淆

作者:桑榆
QQ:934440653
有問題,評論留言,或qq聯繫

安裝

npm install --save-dev webpack-obfuscator

屬性

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

1. 低混淆,高性能(官方文檔)

性能稍微慢於沒有混淆

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

2. 中等混淆,最佳性能(官方文檔)

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

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

3.高度混淆,低性能(官方文檔)

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

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

4. 排除js編譯,或排除文件夾內所有js

1.排除單個js
注意這裏的main2.js 是排除這個文件,也就是說這個文件不混淆,其他文件混淆


const JavaScriptObfuscator = require('webpack-obfuscator');

module.exports = {
    entry: {
        'mian1': './index1.js',
        'main2': './index2.js'
    },
    output: {
        path: 'dist',
        filename: '[name].js' 
    },
    plugins: [
        new JavaScriptObfuscator({
            rotateUnicodeArray: true
        }, ['main2.js'])
    ]
};

發佈了11 篇原創文章 · 獲贊 7 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章