1. 程式人生 > >PHP 檔案加密Zend Guard Loader 學習和使用(如何安裝ioncube擴充套件對PHP程式碼加密)

PHP 檔案加密Zend Guard Loader 學習和使用(如何安裝ioncube擴充套件對PHP程式碼加密)

一、大體流程圖

二、PHP 專案檔案加密

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

如何加密請往後看

三、如何使用

第一步:確認當前環境 Amai Phalcon 前,請確認您具備以下兩個條件,如果您的環境不滿足此條件,建議您對系統環境進行重新配置。

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

條件2:必須安裝ZendGuardLoader

第二步:生成機器碼,機器碼是授權檔案的重要組成部分,每一臺伺服器都有一個獨立的機器碼,您只需執行由 我們所提供的機器碼生成工具來獲取您的機器碼即可。

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

(1)Windows 環境

(2)Linux 環境

第三步:申請授權檔案,在郵件中,寫入您的機器碼與您的公司名稱,以郵件形式傳送至[email protected] 進行申請授權檔案。郵件標題以“申請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 環境測試 ============================

安裝要求:

  1、php版本 < 5.6

  2、把加密的php檔案上傳到伺服器上看看效果,提示php檔案採用了Zend Guard加密,需要安裝Zend Loader/ZendOptimizer

  3、Zend Guard Loader 僅支援NTS

  4、修改php.ini檔案

  5、重啟伺服器

詳細步驟:

2、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(),會看到如下資訊:

4、測試程式碼,就以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"

參考文獻:

======================啟用許可認證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"

 

重新整理剛才訪問的網頁檔案,就可以正常訪問了

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

1、加密的程式碼不會優化;

2、加密的檔案14天后過期;

3、如果使用license授權,license 3天后過期。

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

2、一定要是NTS

3、下面使用連個專案對比測試加密效果

【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"

日誌報錯:

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擴充套件檔案新增在那裡了,原來在這個資料夾下面

[email protected]:/home/www# find / -name phalcon.so
/usr/lib/php5/20121212/phalcon.so

我們複製 ZendGuardLoader.so 到/usr/lib/php5/20121212 資料夾下面

[email protected]:/home/www# cp /usr/lib/php5/ZendGuardLoader.so /usr/lib/php5/20121212/ZendGuardLoader.so
[email protected]:/home/www# cd /usr/lib/php5/20121212/
[email protected]:/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沒有報錯

配置檔案載入的資訊

 

相關推薦

PHP 檔案加密Zend Guard Loader 學習使用如何安裝ioncube擴充套件PHP程式碼加密

一、大體流程圖 二、PHP 專案檔案加密  下表列出了Zend產品中的PHP版本及其內部API版本和Zend產品版本。 如何加密請往後看 三、如何使用 第一步:確認當前環境 Amai Pha

Java集合學習筆記通過比較器集合元素排序

/**  * 1.add方法的引數型別為物件,並且是物件的引用  * 2.List元素是有序的,元素可以重複,因為該體系有索引  *   list特有的方法都是和索引相關的操作  *   List的子類物件有:  *   ArrayList--陣列結構--JDK1.2開始-

安卓學習筆記 -- 安裝環境 Android Studio安裝配置、環境搭建詳細步驟及基本使用 Android StudioSDK官方開發工具下載 Android Studio教程從入門到精通 Android開發-之第一個程式:HelloWorld!

1、下載Android Studio安裝配置、環境搭建詳細步驟及基本使用    https://www.cnblogs.com/yanglh6-jyx/p/Android_AS_Configuration.html https://blog.csdn.net/k491022087/ar

PHP檔案上傳-面向物件的方法MVC模式

首先控制器: <?php header("Content-type:text/html;charset=utf8"); require_once("upload.class.php"); //獲取獲取檔案的字尾名 $temp = explode(".",

配置專案構建完成後檔案移動---- Jenkins自動化部署學習筆記

  在前兩篇文章中,跟大家分享了在 Windows 系統上安裝 Jenkins 和使用 Jenkins 進行 Android 專案的編譯打包;相信可能會有人疑問,打包完成之後,我需要將 apk 檔案放入指定位置怎麼辦。   其實,Jenkins 功能很強大,它可以配置在打包完成之後將

PHP檔案的上傳與下載總結已經很詳細了

一、一個簡單的圖片上傳例項 1.1、例項程式碼部分 1.2、測試結果 1.3、move_uploaded_file($tmp_name,$destination)函式的使用:將伺服器上的臨時檔案移動到指定的資料夾下 copy($tmp_name,$destination)函式的使用:將伺服器上的臨

Linux學習ROS安裝1

[email protected]:~$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

Android-Universal-Image-Loader 學習筆記載入圖片原理

public void displayImage(String uri, ImageAware imageAware, DisplayImageOptions options, ImageLoadingListener listener, ImageLoadingProgressListener pro

Android-Universal-Image-Loader 學習筆記 基本配置與使用

package com.nostra13.universalimageloader.core; import android.content.Context; import android.content.res.Resources; import android.util.DisplayMetrics;

Linux系統學習筆記安裝軟體異常處理

Linux系統下怎麼安裝.deb檔案? deb 是 ubuntu 、debian 的格式。 .deb是solaris系統下的安裝包字尾名。安裝方法如下 cd 到安裝包的目錄 dpkg(空格)-i

【前端小小白的學習之路】vue學習記錄vue-cli腳手架構建項目結構

cli 4.0 ebp bpa pack all 點擊 ash install 我們直接從vue的工程化開始入手。 在這裏用git命令行搭建項目環境。(當然直接cmd命令行下也是一樣的) git下載安裝地址:https://www.git-scm.com/downloa

python學習——day12MySQL常用命令,連接pythonalex:http://www.cnblogs.com/wupeiqi/articles/5713330.html

www base drop cal esc username prim ber .com MySQL mysql 常用命令 MySQL創建、刪除數據庫 1 create database alexdb;#創建數據庫 2 3 drop database alexdb;

vue.js學習筆記Vuejs——組件——props數據傳遞

元素 綁定 筆記 即使 大小寫 return span com 簡單 ①組件實例的作用域: 是孤立的,簡單的來說,組件和組件之間,即使有同名屬性,值也不共享。 <div id="app"> <add></add>

珍藏多年的奇門異術----學習筆記設置遠程訪問恢復密碼

tel 密碼破解 之前 dmi 內容 ext ini 啟動過程 res 思科設備配置命令: 同樣存在模式的區分 - 用戶模式 - 用戶試圖 特權模式 - 系統試圖 全局配置模式

python學習day2字符串的一些小魔法

列表 inpu 下劃線 是把 day2 就是 put python學習 IT 1.join(將字符串按照指定的拼接符進行拼接) 1 s = input("請輸入字符串:") 2 s1 = ‘_‘.join(s) 3 print(s1) 這個代碼的含義就是在輸入的字符串之

Git系統從0到1的完整學習歷程第四節(3) Git分支管理

主要跟著https://gitee.com/progit/index.html來學習的,知識點來自這裡,新增自己的理解和標記。 檢視分支 git branch 命令不僅僅能建立和刪除分支,如果不加任何引數,它會給出當前所有分支的清單: $ git branch is

Git系統從0到1的完整學習歷程第四節(2) Git分支操作

主要跟著https://gitee.com/progit/index.html來學習的,知識點來自這裡,新增自己的理解和標記。 分支的新建與合併 現在讓我們來看一個簡單的分支與合併的例子,實際工作中大體也會用到這樣的工作流程: 開發某個網站。 為實現某個新的需求,建立一個

linux系統,CentOS7.2安裝ffmpeg擴充套件PHP用FFmpeg擷取視訊第一幀作為視訊封面,並給圖片新增播放視訊按鈕

最近做公司的專案中,有使用者上傳視訊,後臺這邊接收視訊並上傳,獲取視訊第一幀作為視訊封面的功能,在網上查找了好多資料,並且安裝 了ffmpeg-php的PHP擴充套件,由於版本問題,安裝好幾個版本都不成功,最後放棄安裝擴充套件,後來執行程式碼發現不用安裝那個擴充套件也能實現截圖並上傳的功能,所以要擷

Java學習日常page指令 跳轉指令 包含指令

學習內容 Page指令 ContentType 和 pageEncoding <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

SparkSql學習筆記包含IDEA編寫的原生代碼

Spark SQL and DataFrame 1.為什麼要用Spark Sql 原來我們使用Hive,是將Hive Sql 轉換成Map Reduce 然後提交到叢集上去執行,大大簡化了編寫MapReduce的程式的複雜性,由於MapReduce這種計算模型執行效率比較