背景
防止商用軟體實現邏輯洩露。
工具介紹
yakpro-po 由原生PHP開發,所以安裝的時候,保證環境能執行PHP命令。
安裝 yakpro-po 步驟
找一個可用目錄,這裡按專案推薦目錄為準:/user/local
cd /usr/local
通過 git 拉取 yakpro-po 程式碼
git clone https://github.com/pk-fr/yakpro-po.git
到 yakpro-po 目錄,還需要安裝 PHP-Parser
cd yakpro-po && git clone https://github.com/nikic/PHP-Parser.git
保證 yakpro-po 有可執行許可權
chmod a+x yakpro-po.php
為方便使用,建立軟連線到 bin 目錄
cd /usr/local/bin ln -s /usr/local/yakpro-po/yakpro-po.php yakpro-po
安裝完畢,檢視下是否正常
yakpro-po –help
yakpro-po –help Info: Using [/usr/local/yakpro-po/yakpro-po.cnf] Config File... Info: yakpro-po version = 2.0.13
使用方式
提供了多種方式混淆程式碼,因為本次是針對 Laravel 專案程式碼混淆,所以採用
yakpro-po source_filename -o target_filename
實踐
Laravel 專案直接上面的命令,不帶任何選項,混淆後的程式碼根本跑不起來,因為預設混淆了類名、命令空間、變數等等,所以要手動新增選項來指定混淆選項。
建議使用的選項:
yakpro-po my_app -o obfuscate_my_app --no-obfuscate-function-name --no-obfuscate-class_constant-name --no-obfuscate-class-name --no-obfuscate-interface-name --no-obfuscate-trait-name --no-obfuscate-property-name --no-obfuscate-method-name --no-obfuscate-namespace-name --no-obfuscate-label-name
這裡混淆了:
淆變數名 混淆常量名 混淆 if 語句 淆迴圈語句 淆字串文字 隨機播放語句 單行輸出
混淆前後對比
需要注意的點:不要混淆 模板程式碼
- 先把模板目錄拷貝出來,混淆之後,再還原回去。
- 混淆模板程式碼會用 echo 輸出,造成模板標記直接當成字串輸出。後果就是頁面輸出類似 @if() 這類的效果。
附錄:可用混淆選項
--no-strip-indentation 多行輸出
--strip-indentation 單行輸出
--no-shuffle-statements 不打亂語句
--shuffle-statements 隨機播放語句
--no-obfuscate-string-literal 不混淆字串文字
--obfuscate-string-literal 混淆字串文字
--no-obfuscate-loop-statement 不混淆迴圈語句
--obfuscate-loop-statement 混淆迴圈語句
--no-obfuscate-if-statement 不混淆 if 語句
--obfuscate-if-statement 混淆 if 語句
--no-obfuscate-constant-name 不混淆常量名
--obfuscate-constant-name 混淆常量名
--no-obfuscate-variable-name 不混淆變數名
--obfuscate-variable-name 混淆變數名
--no-obfuscate-function-name 不混淆函式名
--obfuscate-function-name 混淆函式名
--no-obfuscate-class_constant-name 不混淆類常量名
--obfuscate-class_constant-name 混淆類常量名
--no-obfuscate-class-name 不混淆類名
--obfuscate-class-name 混淆類名
--no-obfuscate-interface-name 不混淆介面名稱
--obfuscate-interface-name 混淆介面名稱
--no-obfuscate-trait-name 不混淆特徵名稱
--obfuscate-trait-name 混淆特徵名稱
--no-obfuscate-property-name 不混淆屬性名稱
--obfuscate-property-name 混淆屬性名稱
--no-obfuscate-method-name 不混淆方法名
--obfuscate-method-name 混淆方法名稱
--no-obfuscate-namespace-name 不混淆名稱空間名稱
--obfuscate-namespace-name 混淆名稱空間名稱
--no-obfuscate-label-name 不混淆標籤名稱
--obfuscate-label-name 混淆標籤名稱
本作品採用《CC 協議》,轉載必須註明作者和本文連結