用 PHP Screw 保護你的程式碼
PHP 是一個直譯的程式語言,大家都喜歡 PHP 改後立即執行的優點,但明文未加密的程式碼也有一些壞處,比如寫在 Code 裡的密鑰與密碼等等,全部就被看光光了。
很多 PHP 打造的商業產品,最後佈署部到客戶機器上時,免不了需要將程式碼進行加密。目前商業的加密軟體有 Zend Guard (美年 600$) 與 PHP Encoder (199$),Zend Guard 以前有用過,算是很穩定的產品,如果程式好好寫,極少發生加密後執行結果不如預期的情況。Zend Guard 原理我猜測是編譯為 opcode,然後進行加密,執行時透過 PHP Extension 進行動態解密,由於解密完已經是可以執行的 PHP opcode,因此有官方宣稱的加速效果。PHP Encoder 我就沒有用過,也無從推論。
今天要介紹 PHP-Screw 這個很簡單的加密機制,做法與一樣是必須編譯出擁有專屬解密功能的 Extension,然後加密過的 PHP 檔案就可以透過 PHP Extension 進行解密與執行。看了 Source Code 其實實現的方法很簡單,就是透過 zencode/zdecode 進行編碼與解碼,編碼後的資料會在前方加入「PM9SCREW」字串,用來判斷 PHP 檔案是否需要解碼。
PHP Screw 安裝
直接從 GitHub Clone 一份最新的 PHP Screw Source Code,如下:
git clone https://github.com/Luavis/php-screw
第一個動作就是要修改密碼檔 (my_screw.h),之後我們會根據這個密碼檔編譯出專屬的 PHP Extension .so 檔,所以想要拿自己編譯的 Extension 去執行不同密碼加密的 PHP 是不會成功的!
cd php-screw
vim my_screw.h
編輯檔案中 pm9screw_mycryptkey 這個陣列,可以更改數字或加減元素,檔案內容如下:
short pm9screw_mycryptkey[] = { 11152, 368, 192, 1281, 62};
修改後存檔,編譯之前記得安裝 php5-dev, php-config, gcc 套件,接著執行以下命令:
phpize
./configure --with-php-config= which php-config
make
執行畫面如下:
編譯好的 so 檔會放在 module 目錄下,把它掛到 php.ini 即可。
接著我們還需要編譯專屬的加密程式,切換到 tools 目錄下直接 make 即可:
cd tools
make
編譯好後會產生 screw 執行檔,透過這個執行檔可以直接加密 PHP 程式,加密後原本的明文會多了 .screw 副檔名,如下:
此外一提,之前在 APC 上就有網友討論如何進行編譯與執行分離的方式,有興趣的朋友可以參考 鳥哥的文章 與「 使用APC来保护PHP代码 」這篇文章。但是 APC 後來的對於 PHP 新版本的支援度不足,像是 PHP 5.6 就不會運作,大大們都建議改用 Opcache。其實在 PHP 7 所使用的 Opcache 中,可以在 Source Code 看到 opcache.file_cache 這樣的暗黑(Document 無記載)參數,可惜在 PHP 5.6 的 Opcache 版本中沒有這個 file_cache 功能。利用 file_cache 確實可以實現 Opcode 編譯與執行分離,大陸很多 文章 都有討論到作法。
如果真的要在 PHP 5.6 自行實現 Opcode 編譯與執行分離,要把 PHP 7 Opcache File Cache Feature 移到 PHP 5.6 是有難度的,畢竟底層的 Zend API 更動了很多,只好殘念收場,免費的先用 PHP Screw 擋一下,防君子不防小人.......下次再見!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

文章讨论了PHP 5.3中引入的PHP中的晚期静态结合(LSB),从而允许静态方法的运行时分辨率调用以获得更灵活的继承。 LSB的实用应用和潜在的触摸

使用PHP的cURL库发送JSON数据在PHP开发中,经常需要与外部API进行交互,其中一种常见的方式是使用cURL库发送POST�...

SOLID原则在PHP开发中的应用包括:1.单一职责原则(SRP):每个类只负责一个功能。2.开闭原则(OCP):通过扩展而非修改实现变化。3.里氏替换原则(LSP):子类可替换基类而不影响程序正确性。4.接口隔离原则(ISP):使用细粒度接口避免依赖不使用的方法。5.依赖倒置原则(DIP):高低层次模块都依赖于抽象,通过依赖注入实现。

深入解读ReactPHP的非阻塞特性ReactPHP的一段官方介绍引起了不少开发者的疑问:“ReactPHPisnon-blockingbydefault....
