HOWTO · PHP
8 個最佳 PHP 程式碼混淆器
本教程演示了 PHP 中的八個最佳程式碼混淆器。
本頁內容
PHP 混淆會把原始碼改寫成較不易閱讀的形式,讓程式碼更難被檢視,但它無法保證程式碼會一直維持不可讀、防止複製,或提供真正的安全性。下列工具在轉換的內容、鎖定的 PHP 版本,以及授權方式上各有不同。
本文比較八款知名的 PHP 混淆器,讓你能挑選出適合自己專案的工具。
PHP 混淆做得到什麼、做不到什麼
混淆會改寫可正常運作的 PHP 程式碼,讓隨意翻閱的人難以看懂。常見的轉換包括把變數、函式、類別與命名空間重新命名為無意義的識別字、移除註解與縮排,以及扭曲控制流程。其目標是提高理解程式碼所需的心力,而不是讓理解在數學上變得不可能。
由於 PHP 仍必須能夠執行該檔案,混淆後的腳本在原則上永遠可以還原。有決心的讀者可以解讀識別字對照表、用偵錯工具逐步追蹤程式碼,或把混淆後的輸出與原始版本相互比對。因此混淆能勸退趁手的複製行為,但它不是加密,本身無法阻止重用或竊取。若要獲得真正的保護,你還需要授權條款,以及在有需要時採用完全不交付原始碼的伺服器端交付方式。
混淆也不同於三個經常被混為一談的概念。最小化(minification)或壓縮(compaction)只是移除空白與註解,有時還會縮短名稱,藉此減少檔案大小;可讀性降低只是副作用,而非目的。效能最佳化是修改程式碼讓它執行得更快,壓縮做不到這一點。而密碼雜湊或機密保護等安全控制絕不能依賴混淆,因為凡是 PHP 執行環境讀得到的東西,攻擊者終究也讀得到。
還有一點適用於整份清單:以下的功能描述、PHP 版本聲稱與授權說明,反映的是各專案在文件中的記載,而其中有些專案已多年未更新。採用任何工具之前,請先確認其儲存庫的目前狀態。
比較八款 PHP 混淆器
YAK Pro – PHP 混淆器
YAK Pro("Yet Another Killer Product" 的縮寫)是一款開源的 PHP 混淆器,會套用範圍廣泛的轉換:
- 它可以隨機重新排列程式碼語句。
- 它可以刪除縮排與註解等不必要的元素。
- 它使用
goto語句來掩蓋if、else、else if、for、while、do-while與類似的結構。 - 它可以重新命名程式碼中每個重要部分,包括函式、類別、標籤、變數與命名空間。
YAK Pro 可在 GitHub 上取得,並可從這裡下載。
Naneu 的 PHP 混淆器
Naneu 是為 PSR/OOP 風格的 PHP 程式碼所設計。不同於許多依賴 eval() 式混淆的工具,Naneu 會解析 PHP 原始碼,並重新命名類別、方法、變數與類似的程式碼部分。
這個函式庫當初是為了混淆一個私有函式庫的原始碼而撰寫的——該函式庫無法在未受保護的情況下分享。其聲稱的特性如下:
- 它以 PSR/OOP 的 PHP 程式碼庫為目標。
- 根據其文件,它可以混淆為 PHP 5.3、5.4 與 5.5 撰寫的程式碼,而工具本身需要高於 5.4 的 PHP 版本才能執行。這些是過時的版本聲稱;使用前請確認目前的相容性。
Naneu 可在 GitHub 上取得,並可從這裡下載。
Eccenux POBS
Eccenux POBS 會把 PHP 程式碼編譯成較不易閱讀的形式。其文件對這項限制相當坦白:結果並非牢不可破,有心的讀者仍能猜出單一函式在做什麼。
安裝 POBS 很簡單——下載後把檔案解壓縮到網頁伺服器目錄即可。其聲稱的功能如下:
- 可用於大型專案。
- 設定容易,不需要太多準備工作。
Eccenux POBS 可在 GitHub 上取得,並可從這裡下載。
pH-7 Obfuscator
pH-7 Obfuscator 是一款開源工具,目標是保護部署在共享虛擬主機上的程式碼——在這種環境中,主要顧慮是防止原始碼被隨意存取。其聲稱的功能如下:
- 它讓程式碼變得非常難以閱讀。
- 其文件聲稱支援 PHP 5.2 及以上版本——這是一項過時的聲稱,值得對照你的執行環境加以確認。
pH-7 Obfuscator 可在 GitHub 上取得,並可從這裡下載。
Xeoncross PHP Compactor
Xeoncross PHP Compactor 會壓縮並混淆 PHP 程式碼,但它主要是壓縮器,而非深度混淆器。壓縮會移除空白並縮短程式碼;它不會加快 PHP 的執行速度,因此不要抱著效能提升的期待選擇這個工具。
這個工具適合用來透過比較執行一個類別所需的字元數,了解專案的實際大小。
Xeoncross PHP Compactor 可在 GitHub 上取得,並可從這裡下載。
smart-php-obfuscator
smart-php-obfuscator 是由 Weidi Zhang 開發的 PHP 混淆器。其聲稱的功能如下:
- 它是開源的。
- 它力求保持簡單,同時仍能有效攪亂原始碼。
- 其文件聲稱支援 PHP 7.0 及以上版本——同樣是有待確認的過時聲稱。
smart-php-obfuscator 可在 GitHub 上取得,並可從這裡下載。
pmaslak/php-obfuscator
pmaslak/php-obfuscator 可用於商業與非商業用途,運作方式與 YAK Pro 類似。其聲稱的功能如下:
- 它是開源的。
- 它以 MIT 授權釋出,簡化了在專有專案中的採用。
pmaslak/php-obfuscator 可在 GitHub 上取得,並可從這裡下載。
pl4g4/online-php-obfuscator
pl4g4/online-php-obfuscator 是由 pl4g4 開發的線上服務。你上傳一個 PHP 檔案,服務會產生混淆後的版本,你再下載結果。其聲稱的功能如下:
- 它是開源的。
- 它讓你下載自己 PHP 程式碼的混淆版本。
該專案宣稱上傳的檔案會在混淆完成後刪除,但這項保證未經查證。在未獨立確認其處理與保留條款之前,不要將私有或專有原始碼上傳到任何第三方混淆服務——敏感內容請優先使用在本機執行的工具。
為你的專案選擇 PHP 混淆器
根據你的實際限制來挑選工具,而不是選功能清單最長的那個。
- 程式碼庫風格。 對於現代的 PSR/OOP 程式碼庫,Naneu 是圍繞解析後的類別與方法重新命名而設計的。對於較舊或程序式的程式碼,YAK Pro 或 pmaslak/php-obfuscator 會套用範圍更廣的識別字與控制流程變更。
- 授權。 如果商業專案需要明確的寬鬆授權,pmaslak/php-obfuscator 採用 MIT 授權。至於其他工具,請自行查看各儲存庫的授權檔案,因為單單「開源」的標籤並不能界定你的權利。
- PHP 版本。 聲稱的相容範圍——Naneu 針對 PHP 5.3–5.5 目標、pH-7 Obfuscator 針對 5.2+、smart-php-obfuscator 針對 7.0+——來自各專案文件,可能已經過時。採用之前,先在你的正式環境 PHP 版本下,對程式碼的副本執行該工具。
- 本機工具與線上服務。 pl4g4/online-php-obfuscator 是最方便的選項,但需要上傳你的原始碼。除非已查證該服務的資料處理方式,否則請讓專有程式碼留在本機工具上處理。
- 目標。 如果你想降低可讀性,請選擇真正的混淆器,例如 YAK Pro、Naneu 或 pH-7 Obfuscator。如果你想要更小的檔案或量測大小,Xeoncross PHP Compactor 更適合——但它不是安全措施,也不會讓 PHP 變快。
無論你選哪一個,都要把原始碼保留在版本控制中,徹底測試混淆後的輸出——重新命名可能會破壞依賴反射、動態呼叫或命名慣例的程式碼——並把混淆視為與授權並行的其中一種嚇阻手段,而不是程式碼無法被讀取或重用的保證。