DevToolPal
繁

JavaScript 混淆器

透過重新命名變數、隱藏字串和打散邏輯讓 JavaScript 難以閱讀,同時保持執行結果不變。

本機處理,不會上傳

選項

混淆強度

強度越高隱藏得越多,但程式碼會變得更大、執行更慢。

輸入

0 字元 · 0 B

輸出

0 字元 · 0 B

功能簡介

JavaScript 混淆器會改寫指令碼,讓它執行起來完全相同,但人很難閱讀和照抄。變數和函式名稱會變成 _0x3f2a 這種無意義的識別字,字串常值會移到經過編碼的查找表中;強度較高時,控制流程還會被打亂並混入無用程式碼。

它適用於以純 JavaScript 發布、又不希望被一字不改地複製的瀏覽器遊戲、示範、小工具和授權檢查。

使用方法

  1. 貼上你的 JavaScript,或開啟一個 .js 檔案。
  2. 選擇 混淆強度:
    • 低:重新命名區域名稱,並把字串移到查找陣列中。輸出仍然快速且相當精簡。
    • 中:加入字串編碼、控制流程扁平化和一些無用程式碼。
    • 高:所有手段全力套用。結果可能大上好幾倍,執行也明顯變慢。
  3. 只有在指令碼外部沒有任何地方參照其頂層函式或變數時,才開啟 重新命名全域名稱。
  4. 如果希望結果分成多行,請關閉 輸出為單行。
  5. 複製或下載混淆後的程式碼,部署前先測試。

範例

範例定義了一個 greet 函式和一個造訪計數器。以低強度混淆後,程式碼變成一行十六進位名稱,但執行後仍會印出 Hello, Ada! You have visited 1 time(s).

混淆與壓縮的差別

壓縮(例如 JavaScript 與 CSS 壓縮工具所做的)會移除空白並縮短名稱,讓檔案更小、下載更快。混淆在大小上則正好相反:它刻意加入間接層,讓程式碼更難理解。許多專案會壓縮所有檔案,只對少數含有值得保護之邏輯的檔案做混淆。

限制

混淆無法保護機密。瀏覽器能執行的東西,使用者最終都能檢視,所以 API 金鑰和必須保密的商業規則請留在伺服器上。高強度設定也會拖慢程式碼,請避免用在頻繁執行的迴圈和對效能敏感的頁面中。

常見問題

› 混淆會改變程式碼的行為嗎?

不會。混淆後的指令碼行為與原本相同,只有形式改變。請務必用混淆後的建置版本執行測試,因為會檢查自身原始碼或函式名稱的程式碼可能會表現不同。

› 混淆後的程式碼可以還原嗎?

無法完全還原,但有決心又有時間的人仍然能弄清楚它在做什麼。請把混淆當作阻擋隨手複製的減速丘,絕不要拿它來隱藏 API 金鑰之類的機密。

› 什麼時候該開啟「重新命名全域名稱」?

只有在指令碼完全獨立時才開啟。重新命名全域名稱後,HTML 屬性、其他指令碼或測試中以名稱呼叫你頂層函式的地方都會壞掉。

› 我的程式碼會被上傳嗎?

不會。混淆是在你的瀏覽器中,以開源的 javascript-obfuscator 函式庫執行。