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 环境

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

安装要求:

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

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

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

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

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"

参考文献:

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 版本,很重要的哦

 

 选择安全,配置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 安装测试====================

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

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"

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
<?phpfunction 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代码加密

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/395692.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前向声明

前向声明的定义&#xff1a;有些时候我们可以声明一些类但是并不去定义它&#xff0c;当然这个类的作用也很有限了。 如&#xff1a;class A; 声明一个foo类&#xff0c;这个声明&#xff0c;有时候也叫做前向声明(forward declaration)&#xff0c;在声明完这个foo类之后&…

php寻找文本,PHP文本数据库的搜索方法_php

//php文本数据库的搜索方法searchstr("/".preg_quote($searchstr)."/");//$searchstr是查找的关键字$recordsfile($file);//获取所有的记录数http://www.gaodaima.com/45906.htmlPHP文本数据库的搜索方法_php//$file是查找的数据文件$search_reocrdspreg_g…

react vs 2017_我在React Europe 2017上学到了什么

react vs 2017by Nicolas Cuillery由Nicolas Cuillery 我在React Europe 2017上学到了什么 (What I learned at React Europe 2017) Few days ago, the 3rd edition of the biggest React conference in Europe took place in Paris. No heatwave or transportation strike th…

rem 之js代码获取font-size值(适合移动手机端)

这两天学的是自适应&#xff0c;代码有点乱。而且这几天忙着写实习报告&#xff0c;也没有时间去整理。 但是&#xff0c;这下面代码吧&#xff0c;是可以获取html的font-size值的&#xff0c;然后用来设置相对单位rem的从而达到自适应效果的&#xff1b;看到红色的width了吧&a…

关于C#中委托的一点理解

C#中委托是一种类型。可以这么笼统的理解&#xff1a;int型变量代表一个整型&#xff0c;而委托类型的变量代表一个方法的地址&#xff08;将方法名称传入constructor并实例化该委托变量&#xff09;。 --By Brisk Yu 1 为何要使用委托 我觉得网上关于什么现实生活的举例并不好…

阿里的事前验尸_(不太完全)100天的代码-验尸

阿里的事前验尸by JS由JS (不太完全)100天的代码-验尸 ((Not quite) 100 Days of Code — A Postmortem) At the end of last year, I wrote about my experience coding and making daily commits to GitHub for 30 consecutive days. I also pledged to keep the streak goi…

php超市管理系统论文,超市管理系统的设计与实现

当今社会为信息社会&#xff0c;世界已经进入在计算机信息管理领域中激烈竞争的时代。对于一般的商户而言&#xff0c;杂乱无章地陈放着的商品无疑会耗费他们大量的时间去对其整理并一一分类。他们需要更加便捷的手段去管理他们的商品以节约他们的时间成本以及人工成本。并且就…

只能输入正整数 以及常用的正则表达式

<input typetext idSYS_PAGE_JumpPage nameSYS_PAGE_JumpPage size3 maxlength5 οnkeyupthis.valuethis.value.replace(/[^1-9]/D*$/,"") οndragenter"return false" οnpaste"return !clipboardData.getData(text).match(//D/)"" sty…

jq 自动滑动轮换(向后插入小块)

// JavaScript Documentvar Marquee { arrIdObj : {/*marqueebox : {distance:-95,//移动距离delay:3000,//延迟时间speed:1000//移动时间},minCount:2 */}, //创建对象 startMarquee:function(){ //给参数赋值 if(this.arrIdObj ! null && typeof this.arrIdObj &qu…

bzoj 2178 圆的面积并 —— 辛普森积分

题目&#xff1a;https://www.lydsy.com/JudgeOnline/problem.php?id2178 先看到这篇博客&#xff1a;https://www.cnblogs.com/heisenberg-/p/6740654.html 好像本应算弓形面积、三角形面积之类的&#xff0c;但不会...于是用辛普森积分硬做... 参考了这篇博客&#xff1a;ht…

php获取访问者ip地址汇总,php获取访问者IP地址汇总_PHP

//方法1&#xff1a;$ip $_SERVER["REMOTE_ADDR"];echo $ip;//方法2&#xff1a;代码如下:$user_IP ($_SERVER["HTTP_VIA"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR"];$user_IP ($user_IP) ? $user_IP : $…

Charles抓包工具的使用

2019独角兽企业重金招聘Python工程师标准>>> 感谢唐巧分享的文章&#xff0c;受益匪浅 文章目录 1. 目录及更新说明2. Charles 限时优惠3. 简介4. 安装 Charles5. 将 Charles 设置成系统代理6. Charles 主界面介绍7. 过滤网络请求8. 截取 iPhone 上的网络封包 8.1. …

python每秒20个请求_使用Python每秒百万个请求

python每秒20个请求by Paweł Piotr Przeradowski通过PawełPiotr Przeradowski 使用Python每秒百万个请求 (A million requests per second with Python) Is it possible to hit a million requests per second with Python? Probably not until recently.使用Python每秒可以…

iOS开发——处理1000张图片的内存优化

一、项目需求 在实际项目中&#xff0c;用户在上传图片时&#xff0c;有时会一次性上传大量的图片。在上传图片前&#xff0c;我们要进行一系列操作&#xff0c;比如&#xff1a;旋转图片为正确方向&#xff0c;压缩图片等&#xff0c;这些操作需要将图片加载到内存中&#xff…

jquery ui php,php – 打开带有动态内容的jQuery UI对话框

我有一个关于jQuery UI对话框的问题,并显示数据库中的动态内容.所以我得到了一个web应用程序,我还需要创建一个管理模块来管理所有用户和其他信息.我创建了一个页面,显示列表中的所有用户,在每一行中我也创建了一个编辑按钮.我想这样做,当你按下用户的编辑按钮时,会打开一个对话…

linux shell的单行多行注释

1.单行注释&#xff0c;使用符号# echo "123456"echo "test"#echo "comment“ 2. 多行注释 &#xff08;1&#xff09;使用 :<<! &#xff01; filenametest.txt :<<! fileContentcat $filenamei0 for line in $fileContent dofileList[…

MapReduce Input Split 输入分/切片

MapReduce Input Split&#xff08;输入分/切片&#xff09;详解 public static long getMaxSplitSize(JobContext context) { return context.getConfiguration().getLong(SPLIT_MAXSIZE, Long.MAX_VALUE); } 如果没有设置这maxsize默认是Long.MAX_VALUE public static long …

win7无损扩大c盘空间_无损网络导航的空间模型

win7无损扩大c盘空间by Patryk Adaś通过PatrykAdaś 无损网络导航的空间模型 (A Spacial Model for Lossless Web Navigation) In my last post I described the concept of navigation trails as an evolution of the standard tabbed browsing model.在我的上一篇文章中&am…

php访问者信息,如何通过PHP检索访问者的ISP?

我试图纠正拉姆库马尔的答案,但每当我编辑他们的帖子,我将被暂时禁止,我的修改被忽略。(至于为什么,我不知道,这是我第一次也是唯一一次在这个网站上编辑。)由于网站更改和管理员执行基本的bot检查(检查标题),他的代码不再工作:$IP $_SERVER[REMOTE_ADDR];$User_Agent Mozill…

从《在小吃店遇见凯恩斯》初识经济

最近在看《在小吃店遇见凯恩斯》这本书&#xff0c;算是对经济和经济学的初步认识。 那些概念 1. 经济与经济学 经济&#xff1a;经世济民&#xff0c;经营国家、救赎百姓&#xff0c;发展国家经济进步、促成人人致富。 经济学&#xff1a;研究发展国家经济进步、促成人人致富的…