混淆工具javascript-obfuscator使用簡介

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

使用 base64rc4對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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章