PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

时间:2023-03-08 23:02:30
PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

一、大体流程图

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

二、PHP 项目文件加密

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

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

如何加密请往后看

三、如何使用

第一步:确认当前环境 Amai Phalcon 前,请确认您具备以下两个条件,如果您的环境不满足此条件,建议您对系统环境进行重新配置。

条件1:PHP版本在5.5.X以上(必须为NTS)

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

条件2:必须安装ZendGuardLoader

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

第二步:生成机器码,机器码是授权文件的重要组成部分,每一台服务器都有一个独立的机器码,您只需运行由 我们所提供的机器码生成工具来获取您的机器码即可。

注: 每一台服务器的机器码都是独立的,如果您 是需要将 ECstore 部署在多台服务器上, 您需要生成多个机器码 在windows/linux终端运行hardware.sh,获取机器码如图:

(1)Windows 环境

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

(2)Linux 环境

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

第三步:申请授权文件,在邮件中,写入您的机器码与您的公司名称,以邮件形式发送至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官方回复)

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

===========Windows 环境测试 ============================

安装要求:

  1、php版本 < 5.6

  2、把加密的php文件上传到服务器上看看效果,提示php文件采用了Zend Guard加密,需要安装Zend Loader/ZendOptimizer

  3、Zend Guard Loader 仅支持NTS

  4、修改php.ini文件

  5、重启服务器

详细步骤:

1、下载Zend Guard Loader (Runtime for PHP 5.5 or 5.6),在这里我选择Windows版本:http://www.zend.com/en/products/loader/downloads#Windows

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 的非安全线程去启动

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

运行phpinfo(),会看到如下信息:

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

3、下载ZendGuard-7.0.0-win32.win32.x86.msi,http://www.zend.com/en/products/guard/direct,关于如何加密文件和项目:【PHP】用Zend加密PHP源码/保护你的源代码图文教程

4、测试代码,就以ThinkPhp5.0 的官方代码为案例进行测试

  加密前的代码文件:thinkphp_5_full

  加密后的代码文件:thinkphp_5_full_encode

使用Visual Studio Code 分别打开加密前和加密后的代码项目:thinkphp_5_full

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

通过浏览器访问页面效果:

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

thinkphp_5_full_encode

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

可以看出已被加密成二进制文件了,不能打开,通过浏览器访问则是正常的

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

注意:把加密后的代码放在项目目录中,如使用了ZendGuard加密的PHP代码的网站,而没有安装Zend Guard Loader,就会出现下图错误(Zend Guard Run-time support missing!):

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

安装遇到的坑

分析原因:由于我安装的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)不安线程成才可以的

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

许可认证为空

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

修改配置参数:(禁用修改为不禁用),重启服务器即可

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 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

参考文献:

1、如何对PHP文件进行加密——ZendGuard加密与ZendLoader解密

2、ecstore 授权文件的安装

3、官方文档:http://www.zend.com/en/products/zend-guard

4、官方安装 Zend Guard Loader

5、注册Zend Guard

6、Zend Guard功能

7、图解PHP使用Zend Guard 6.0加密方法教程

======================启用许可认证license======================

需要先生成一个 license.zl,然后把该文件配置到php.ini 文件中

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

选择正确的PHP 版本,很重要的哦

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

选择安全,配置license,注意:第四步的 名称和编码的要一样哦(ThinkPHP-Encode-License)

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

最后生成的加密文件(二进制文件)

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

复制该文件到项目目录下去

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

浏览器访问:

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

说明:以上提示表示没有配置 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"

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

刷新刚才访问的网页文件,就可以正常访问了

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

在这里用的是试用版,有一下问题

1、加密的代码不会优化;

2、加密的文件14天后过期;

3、如果使用license授权,license 3天后过期。

============== Linux 安装测试====================

1、如何安装PHP,查看我的另外一篇博客:http://www.cnblogs.com/tinywan/p/6647587.html/

2、一定要是NTS

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

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端口,访问正常

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

【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端口,访问已被加密不可以访问

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

编辑配置文件: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() 查看是否安装成功

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

安装成功后还是不能够访问:

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

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

这时候先切换到windows ,同时改变php 版本为5.5,我们写个test.php 文件进行测试

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

访问项目还是一个吊样啊!不行啊!大哥

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

你是加载错误的许可认证吗?一看配置文件,空的呀!原始切换文件就是什么都没有了

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

扩展都没安装,怎么可鞥?

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对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

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

日志报错:

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 版本,这个前面已经说过了的,如图所示:

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

在这里我们在重新加密一次。记得这次一定要选php5.5 版本(linux 安装的php 版本为5.5.9)

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

最后生成的文件上传到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

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

在这里为了测试,给一个错误的许可认证文件 ThinkPHP-Encode-License-5.5-error.zl

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

可以看出Nginx直接报错

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

错误日志:

[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!

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

windows 下面

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

PHP CLI 命令行 运行加密文件可能出现的问题

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

加密主机号

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

***************针对Linux 环境 Phalcon框架扩展和Zend Guard Loader 扩展冲突的问题*******

以上测试PHP配置文件是没有安装Phalcon扩展,一点安装Phalcon扩展,启动Nginx则会直接报错

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

配置 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=
zend_loader.disable_licensing=
zend_loader.obfuscation_level_support=

重启 php-fmp 出现一下错误页面信息

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

Nginx错误日志:"GET /info.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:"

注释掉上面/etc/php5/fpm/php.ini 的内容,重启php-fmp 继续测试,可以正常显示

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

总结:如果安装Phalcon 扩展则在 /etc/php5/fpm/php.ini 添加 zend_extension 扩展则会出现问题

以上都是自己踩的坑啊!

-----------------------正式开始》》》》》》》》》》》》》》》》

我们看看Phalcon扩展文件添加在那里了,原来在这个文件夹下面

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

我们复制 ZendGuardLoader.so 到/usr/lib/php5/20121212 文件夹下面

root@iZ238xopqw6Z:/home/www# cp /usr/lib/php5/ZendGuardLoader.so /usr/lib/php5//ZendGuardLoader.so
root@iZ238xopqw6Z:/home/www# cd /usr/lib/php5//
root@iZ238xopqw6Z:/usr/lib/php5/# 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=
zend_loader.disable_licensing=
zend_loader.obfuscation_level_support=
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 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

重启php-fmp 继续测试,nginx没有报错

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

配置文件加载的信息

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

如何安装ioncube扩展对PHP代码加密