javascript-obfuscator是一個免費的JavaScript代碼混淆工具,它功能強大,可以把你的源代碼變得“面目全非”,完全沒有可讀性。還具有部分防調試功能,給JavaScript代碼多一層保護。
安裝
它支持很多流行的前端打包工具,如Webpack、Gulp、Grunt等都有相應的插件。本文爲保持簡單,以單獨的命令行版本示例。
以Windows環境爲例,首先安裝Node.js環境,然後在命令行中輸入
npm install javascript-obfuscator -g
安裝完成後,javascript-obfuscator就是一個獨立的可執行命令了。
javascript-obfuscator -v
可以查看版本號,檢測安裝是否成功。
使用
最簡單的用法是
javascript-obfuscator a.js
上面命令表示,使用默認配置對 a.js
執行混淆,結果輸出到默認文件 a-obfuscated.js
。
也可以根據需求修改配置,從而調整混淆強度。主要有以下幾個重要參數。
controlFlowFlattening
默認 false
。設爲 true
,表示開啓代碼控制流展平,這是源代碼的一種結構轉換,使代碼增大且變得難以理解。
controlFlowFlatteningThreshold
和 controlFlowFlattening
配合,表示代碼控制流展平的概率,此設置對於大代碼影響較大,大量的控制流轉換會減慢代碼速度並增加代碼大小。
controlFlowFlatteningThreshold
的值範圍是從0到1,如果爲0等同於 controlFlowFlattening
爲false。
deadCodeInjection
默認false。設爲true,表示將添加隨機廢代碼到被混淆代碼中。
該選項會顯著增加代碼大小(高達200%)
deadCodeInjectionThreshold
設置廢代碼注入的百分比。值範圍是從0到1,如果爲0等同於 deadCodeInjection
爲false。
此選項強制啓用stringArray選項。
stringArray
刪除字符串文字並將其放置在特殊數組中。例如,var m=“Hello World”中的字符串“Hello World”,將被替換爲var m=x12c456[0x1];
stringArrayEncoding
使用 base64
或 rc4
對stringArray影響的所有字符串文本進行編碼,並插入用於在運行時對其進行解碼的特殊代碼。
此選項會減慢腳本的速度。
stringArrayThreshold
此設置調整將字符串文本插入stringArray的概率(從0到1)。
示例
一箇中等混淆強度的配置選項如下,它會使性能降低約30-50%,代碼體積增加約300%。
{
"compact": true,
"controlFlowFlattening": true,
"controlFlowFlatteningThreshold": 0.75,
"deadCodeInjection": true,
"deadCodeInjectionThreshold": 0.4,
"debugProtection": false,
"debugProtectionInterval": false,
"disableConsoleOutput": true,
"identifierNamesGenerator": "hexadecimal",
"log": false,
"renameGlobals": false,
"rotateStringArray": true,
"selfDefending": true,
"stringArray": true,
"stringArrayEncoding": "base64",
"stringArrayThreshold": 0.75,
"unicodeEscapeSequence": false
}
將上述配置選項,保存爲文件 test.json
,並指定輸出結果到 b.js
,輸入
javascript-obfuscator a.js --config test.json --output b.js
上面命令表示, javascript-obfuscator
將會使用test.json
指定的配置,對 a.js
執行混淆,結果輸出到 b.js
。