首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

php_screw PHP 原始碼加密擴充套件安裝與使用指南(含 SEED 自訂與編譯)

     編輯:PHP 綜合知識

前言:為何需要原始碼加密?

支持開源不代表反對保護商業邏輯。公司專案、授權機制、核心演算法若需部署至客戶伺服器,原始碼加密能提高逆向工程門檻。Zend Guard 商業授權昂貴且曾被破解,php_screw 是一套輕量、開源、可自訂加密種子的替代方案。

環境需求

  • PHP 5.x(現代專案建議 PHP 7/8,需確認擴充套件相容性)
  • 已啟用 zlib
  • 已安裝 autoconf、automake、gcc 等編譯工具鏈

安裝步驟

  1. 下載原始碼:SourceForge 專案頁
  2. 修改種子:編輯 my_screw.h,修改陣列中的數字(SEED),長度與數值任意,作為加密金鑰。
    注意:加密與解密端 SEED 必須一致。
  3. 編譯 .so 擴充套件:
    $ phpize
    $ ./configure
    $ make
    
    若報 make: *** No targets specified and no makefile found. Stop.,通常是 autoconf 未裝,請先 yum install autoconf 或 apt-get install autoconf。
  4. 安裝擴充套件:將 modules/php_screw.so 複製至 PHP 擴充套件目錄(如 /usr/lib/php/extensions/...),在 php.ini 加入 extension=php_screw.so,重啟 PHP-FPM/Apache。
  5. 編譯加密工具:
    $ cd tools
    $ make
    
    產出 screw 執行檔,放入 $PATH(如 /usr/local/bin)。
  6. 加密檔案:
    $ screw a.php
    Success Crypting(a.php)
    
    原檔會備份為 a.php.screw,a.php 變為加密後內容,執行行為完全一致。

常見坑與解決

include_path 下的加密檔案被當明文讀取

現象:require 'encrypted.php'; 在 include_path 尋找時,PHP 未經過 screw 解密直接讀取亂碼。
解法:

  • 使用絕對路徑 require __DIR__ . '/encrypted.php';
  • 或使用相對路徑 require './sub/encrypted.php';

安全性提醒

  • php_screw 屬於混淆/加密層級,非軍事級加密。足夠阻擋一般竊碼,但無法抵禦專業逆向工程師(可掛載 gdb、修改 SEED 重編譯 .so 等)。
  • 核心機密邏輯建議放在伺服器端 API,僅下發加密授權檢查碼。
  • 定期更換 SEED、升級 PHP 版本、搭配 opcode cache(OPcache)提升效能並增加分析難度。

結語

php_screw 以「編譯期自訂 SEED + 執行期擴充套件解密」機制,提供低門檻、高彈性的原始碼保護。適合中小型商業專案、授權檢查模組、模板引擎核心等場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved