PHP 文件加密Zend Guard Loader 學習和使用(如何安裝ioncube擴展對PHP代碼加密)

1、大致流程圖php

2、PHP 項目文件加密html

 下表列出了Zend產品中的PHP版本及其內部API版本和Zend產品版本。mysql

如何加密請日後看linux

3、如何使用

第一步:確認當前環境 Amai Phalcon 前,請確認您具有如下兩個條件,若是您的環境不知足此條件,建議您對系統環境進行從新配置。nginx

條件1:PHP版本在5.5.X以上(必須爲NTS)web

條件2:必須安裝ZendGuardLoaderredis

第二步:生成機器碼,機器碼是受權文件的重要組成部分,每一臺服務器都有一個獨立的機器碼,您只需運行由 咱們所提供的機器碼生成工具來獲取您的機器碼便可。sql

注: 每一臺服務器的機器碼都是獨立的,若是您 是須要將 ECstore 部署在多臺服務器上, 您須要生成多個機器碼 在windows/linux終端運行hardware.sh,獲取機器碼如圖:thinkphp

(1)Windows 環境json

(2)Linux 環境

第三步:申請受權文件,在郵件中,寫入您的機器碼與您的公司名稱,以郵件形式發送至overcome.wan@gmial.com 進行申請受權文件。郵件標題以「申請ego license受權文件」註明

第四步:獲取受權文件及部署

  1. 若是您提供的信息有效,您將會以郵件形式獲取到您的license受權文件:「license.zl」 把該文件放入在ecstore安裝目錄下  

  2. 編輯php.ini文件,搜索‘zend_loader.license_path’  

  3. 加上zend_loader.license_path=‘Phalcon Web 安裝目錄/license.zl’  

  4. 重啓web server  

  5. 經過瀏覽器打開您的網店地址,這就表示您的 license 受權文件安 裝成功,可繼續進行安裝  

  6. 完成後記:若是您的研發人員須要在本地進行開發,咱們爲您提供針對研發人員本地開發的 license文件:「developer.zl」,開人人員無需進行申請,直接部署在本身的電腦上開發便可。

  本地開發license文件位置:Phalcon 目錄下developer.zl

 第五步:很遺憾,PHP 的Phalcon框架暫時不支持加密,一下爲官方郵件(該郵件爲20170512官方回覆)

 

===========Windows 環境測試 ============================

安裝要求:

  一、php版本 < 5.6

  二、把加密的php文件上傳到服務器上看看效果,提示php文件採用了Zend Guard加密,須要安裝Zend Loader/ZendOptimizer

  三、Zend Guard Loader 僅支持NTS

  四、修改php.ini文件

  五、重啓服務器

詳細步驟:

一、下載Zend Guard Loader (Runtime for PHP 5.5 or 5.6),在這裏我選擇Windows版本:http://www.zend.com/en/products/loader/downloads#Windows

二、phpStudy 安裝,將下載好後解壓壓縮包zend-loader-php5.6-windows-x86_update1.zip ,找到目錄下的 ZendLoader.dll 文件,將它放到你的php目錄下ext下,再編輯php.ini文件,添加一段代碼(如):

在這裏編輯:E:\phpStudy\php\php-5.6.27-nts\php.ini

[Zend.loader] zend_loader.enable=1 zend_loader.disable_licensing=1 zend_loader.obfuscation_level_support=3 zend_loader.license_path="" zend_extension="E:\phpStudy\php\php-5.6.27-nts\ext\ZendLoader.dll"

選擇一個php5.6 的非安全線程去啓動

運行phpinfo(),會看到以下信息:

三、下載ZendGuard-7.0.0-win32.win32.x86.msi,http://www.zend.com/en/products/guard/direct,關於如何加密文件和項目:【PHP】用Zend加密PHP源碼/保護你的源代碼圖文教程

四、測試代碼,就以ThinkPhp5.0 的官方代碼爲案例進行測試

  加密前的代碼文件:thinkphp_5_full

  加密後的代碼文件:thinkphp_5_full_encode

使用Visual Studio Code 分別打開加密前和加密後的代碼項目:thinkphp_5_full

經過瀏覽器訪問頁面效果:

thinkphp_5_full_encode

能夠看出已被加密成二進制文件了,不能打開,經過瀏覽器訪問則是正常的

注意:把加密後的代碼放在項目目錄中,如使用了ZendGuard加密的PHP代碼的網站,而沒有安裝Zend Guard Loader,就會出現下圖錯誤(Zend Guard Run-time support missing!):

 安裝遇到的坑

分析緣由:因爲我安裝的php 版本爲TS ,意思就是安全線程,Windows版的PHP從版本5.2.1開始有Thread Safe和NoneThread Safe之分。

【1】Thread Safe是線程安全,執行時會進行線程(Thread)安全檢查,以防止有新要求就啓動新線程的CGI執行方式而耗盡系統資源。

【2】Non Thread Safe是非線程安全,在執行時不進行線程(Thread)安全檢查。

Thread Safety : enable 是不能安裝 ZendLoader.dll 的(Installing Zend Guard Loader for any PHP-NTS distribution)不安線程成才能夠的

許可認證爲空 

修改配置參數:(禁用修改成不由用),重啓服務器便可

zend_loader.disable_licensing=1 修改成:zend_loader.disable_licensing=0

完整配置:

[Zend.loader] zend_loader.enable=1 zend_loader.disable_licensing=0 zend_loader.obfuscation_level_support=3 zend_loader.license_path="E:\phpStudy\php\php-5.6.27-nts\WWW/tp52.zl" zend_extension="E:\phpStudy\php\php-5.6.27-nts\ext\ZendLoader.dll"

參考文獻:

一、如何對PHP文件進行加密——ZendGuard加密與ZendLoader解密 

二、ecstore 受權文件的安裝

三、官方文檔:http://www.zend.com/en/products/zend-guard 

四、官方安裝 Zend Guard Loader

五、註冊Zend Guard 

六、Zend Guard功能

七、圖解PHP使用Zend Guard 6.0加密方法教程

======================啓用許可認證license======================

須要先生成一個 license.zl,而後把該文件配置到php.ini 文件中

 選擇正確的PHP 版本,很重要的哦

 

 選擇安全,配置license,注意:第四步的 名稱和編碼的要同樣哦(ThinkPHP-Encode-License)

 

最後生成的加密文件(二進制文件)

複製該文件到項目目錄下去

瀏覽器訪問:

說明:以上提示表示沒有配置 license路徑,因而提示php警告,這時候咱們查看配置文件php.ini

[Zend.loader] zend_loader.enable=1 zend_loader.disable_licensing=0 zend_loader.obfuscation_level_support=3 zend_loader.license_path="E:\phpStudy\WWW/Product_TP5.zl" zend_extension="E:\phpStudy\php\php-5.6.27-nts\ext\ZendLoader.dll"

也就是以上紅色部分文件加載的文件不是方纔生成的文件,修改成如下配置(剛纔生成的文件),重啓服務器

zend_loader.license_path="E:\phpStudy\WWW/ThinkPHP-Encode-License.zl"

 

刷新剛纔訪問的網頁文件,就能夠正常訪問了

在這裏用的是試用版,有一下問題

一、加密的代碼不會優化;

二、加密的文件14天后過時;

三、若是使用license受權,license 3天后過時。

 

============== Linux 安裝測試====================

一、如何安裝PHP,查看個人另一篇博客:http://www.cnblogs.com/tinywan/p/6647587.html /

二、必定要是NTS

三、下面使用連個項目對比測試加密效果

【1】項目名稱:thinkphp_5_full  Nginx配置端口號:8080

nginx.conf配置文件:

    # thinkphp_5_full
 server { listen 8080; server_name 127.0.0.1; set $root_path /home/www/thinkphp_5_full/public; root $root_path; index index.php index.html; location / { if (!-e $request_filename) { rewrite ^(.*)$  /index.php?s=/$1 last; break; } } location ~ \.php$ { try_files $uri =404;
            fastcgi_pass   unix:/var/run/php5-fpm.sock;
            fastcgi_index  index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }

經過瀏覽器訪問8080端口,訪問正常

 

 

【2】項目名稱:ThinkPHP-Encode-License 端口號:8088  配置文件:nginx.conf

    # ThinkPHP-Encode-License
 server { listen 8088; server_name 127.0.0.1; set $root_path /home/www/ThinkPHP-Encode-License/public; root $root_path; index index.php index.html; location / { if (!-e $request_filename) { rewrite ^(.*)$  /index.php?s=/$1 last; break; } } location ~ \.php$ { try_files $uri =404;
            fastcgi_pass   unix:/var/run/php5-fpm.sock;
            fastcgi_index  index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }

瀏覽器訪問8088端口,訪問已被加密不能夠訪問

 

編輯配置文件:vim /etc/php5/fpm/php.ini

[Zend.loader] zend_loader.enable=1 zend_loader.disable_licensing=0 zend_loader.obfuscation_level_support=3 zend_loader.license_path="/home/www/ThinkPHP-Encode-License.zl" zend_extension="/home/www/zend-loader-php5.5-linux-x86_64/ZendGuardLoader.so"

phpinfo() 查看是否安裝成功

安裝成功後仍是不可以訪問:

Nginx 錯誤日式

2017/05/23 10:34:59 [error] 5503#0: *9 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Incompatible file format:  The encoded file has format major ID 7,
whereas the Loader expects 6 in /home/www/ThinkPHP-Encode-License/public/index.php on line 0" while reading response header from upstream,

爲何這樣子來!PHP加密時候的版本問題嗎啊?昨天是5.6 呀,今天在Linux 的是5.5 呀。怎麼可使用昨天的來調試這個來,,,,無語.............. 新建個工程:ThinkPHP-Encode-License-5.5

這時候先切換到windows ,同時改變php 版本爲5.5,咱們寫個test.php 文件進行測試

訪問項目仍是一個吊樣啊!不行啊!大哥

你是加載錯誤的許可認證嗎?一看配置文件,空的呀!原始切換文件就是什麼都沒有了

擴展都沒安裝,怎麼可鞥?

 去官方在下載個5.5 版本的倒騰下 

[Zend.loader] zend_loader.enable=1 zend_loader.disable_licensing=0 zend_loader.obfuscation_level_support=3 zend_loader.license_path="E:\phpStudy\WWW/ThinkPHP-Encode-License-5.5.zl" zend_extension="E:\phpStudy\php\php-5.5.38\ext\ZendLoader.dll"

google 一番 看到這個表 https://support.zend.com/hc/en-us/articles/217058968

日誌報錯:

astCGI sent in stderr: "PHP message: PHP Fatal error:  Incompatible file format:  The encoded file has format major ID 7, whereas the Loader expects

 看來是這個加密工具版本的爲題了:Zend Guard 7 (64-bit) ,仔細琢磨,原來我一直加密使用的PHP版本是php5.6 版本,這個前面已經說過了的,如圖所示:

在這裏咱們在從新加密一次。記得此次必定要選php5.5 版本(linux 安裝的php 版本爲5.5.9)

最後生成的文件上傳到Nginx服務器目錄,修改配置文件

(1)vim /usr/local/nginx/conf/nginx.conf

set $root_path /home/www/ThinkPHP-Encode-License-5.5/public; root $root_path;

(2)vim /etc/php5/fpm/php.ini

[Zend.loader] zend_extension="/home/www/ZendGuardLoader.so" zend_extension="/home/www/opcache.so" zend_loader.enable=1 zend_loader.disable_licensing=0 zend_loader.obfuscation_level_support=3 zend_loader.license_path="/home/www/ThinkPHP-Encode-License-5.5.zl"

重啓php5-fpm 和Nginx,打開頁面查看,已經OK

 

 在這裏爲了測試,給一個錯誤的許可認證文件 ThinkPHP-Encode-License-5.5-error.zl

zend_loader.license_path="/home/www/ThinkPHP-Encode-License-5.5-error.zl"

能夠看出Nginx直接報錯

 

錯誤日誌:

[error] 7091#0: *1 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 58.101.3.167, server: 127.0.0.1, 
request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:",

從新配置回原來正確的許可認證,則能夠正常訪問啦

注: 每一臺服務器的機器碼都是獨立的,若是您 是須要將 ECstore 部署在多臺服務器上, 您須要生成多個機器碼 在windows/linux終端運行hardware.sh,獲取機器碼如圖:

腳本文件:hardware.sh

#!/usr/bin/env php
<?php function command_hardware() { if(function_exists('zend_loader_enabled') && zend_loader_enabled()) { foreach (zend_get_id() as $hardware) { echo $hardware, "\n"; } } else { echo 'zend guard loader not installed or not enabled!'; exit; } } command_hardware();

Linux 下面 ,在這裏爲cli 模式,因此別忘記給cli 模式的配置文件也安裝ZendLoader 擴展庫,不然報錯:zend guard loader not installed or not enabled!

windows 下面

PHP CLI 命令行 運行加密文件可能出現的問題

加密主機號

***************針對Linux 環境 Phalcon框架擴展和Zend Guard Loader 擴展衝突的問題*******

以上測試PHP配置文件是沒有安裝Phalcon擴展,一點安裝Phalcon擴展,啓動Nginx則會直接報錯

配置 vim /etc/php5/fpm/php.ini 添加一下內容:

[Zend.loader] zend_extension="/usr/lib/php5/ZendGuardLoader.so" zend_extension="/usr/lib/php5/20121212/opcache.so" zend_loader.enable=1 zend_loader.disable_licensing=1 zend_loader.obfuscation_level_support=3

重啓 php-fmp 出現一下錯誤頁面信息

 

Nginx錯誤日誌:"GET /info.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:"

註釋掉上面/etc/php5/fpm/php.ini 的內容,重啓php-fmp 繼續測試,能夠正常顯示

 總結:若是安裝Phalcon 擴展則在 /etc/php5/fpm/php.ini 添加 zend_extension 擴展則會出現問題

 以上都是本身踩的坑啊!

-----------------------正式開始》》》》》》》》》》》》》》》》

咱們看看Phalcon擴展文件添加在那裏了,原來在這個文件夾下面

root@iZ238xopqw6Z:/home/www# find / -name phalcon.so /usr/lib/php5/20121212/phalcon.so

咱們複製 ZendGuardLoader.so 到/usr/lib/php5/20121212 文件夾下面

root@iZ238xopqw6Z:/home/www# cp /usr/lib/php5/ZendGuardLoader.so /usr/lib/php5/20121212/ZendGuardLoader.so root@iZ238xopqw6Z:/home/www# cd /usr/lib/php5/20121212/ root@iZ238xopqw6Z:/usr/lib/php5/20121212# ls curl.so gd.so json.so ldap.so mysqli.so mysql.so opcache.so pdo_mysql.so pdo.so phalcon.so readline.so redis.so ZendGuardLoader.so

固然了這是php5.5.9 和php7不同了,老規矩,新建文件vim /etc/php5/mods-available/zend-loader.ini 添加如下內容

cd /etc/php5/mods-available 

vim zend-loader.ini

[zend.loader] zend_extension=ZendGuardLoader.so zend_loader.enable=1 zend_loader.disable_licensing=0 zend_loader.obfuscation_level_support=2 zend_loader.license_path="/home/www/thinkphp_5-encode-5.5.zl"

切換到目錄/etc/php5/fpm/conf.d 作一個軟鏈接文件(sudo ln -s 源文件 目標文件)

ln -s ../../mods-available/zend-loader.ini 02-zend-loader.ini

重啓php-fmp 繼續測試,nginx沒有報錯

配置文件加載的信息

 

 

 

如何安裝ioncube擴展對PHP代碼加密

相關文章
相關標籤/搜索