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解密
3、官方文档:http://www.zend.com/en/products/zend-guard
======================启用许可认证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
<?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=
zend_loader.disable_licensing=
zend_loader.obfuscation_level_support=
重启 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//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-fmp 继续测试,nginx没有报错
配置文件加载的信息
如何安装ioncube扩展对PHP代码加密
PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)的更多相关文章
- 如何安装ioncube扩展对PHP代码加密
禅道专业版本的核心代码都是加密的(前端的html, css, js, 配置,语言项是开源的)的,使用的加密软件是 ioncube,因此要能运行禅道专业版本的软件,先要按照ioncube扩展. 一.下载 ...
- CentOS 安装 Zend Guard Loader
说明:PHP5.3以上的版本不再支持Zend Optimizer,已经被全新的 Zend Guard Loader 取代,下面是安装Zend Guard具体步骤,以下操作均在终端命令行执行 在 Zen ...
- CentOS7.0+Zend Guard Loader for PHP 5.6环境搭建
本文是在centos7.0环境下搭建的, 由于我的php是5.6版本的, 所以需要去下载对应的Zend Guard Loader. 下载地址: http://www.zend.com/en/produ ...
- PHP5.3安装Zend Guard Loader代替Zend Optimizer
Zend Optimizer/3.3.3 解密加代码优化,提高PHP应用程序的执行速度,显著降低服务器的CPU负载. Zend Guard Loader/5.5.0/6.0 解密加代码优化,提 ...
- PHP5.3、PHP5.4下安装ZendOptimizer或Zend Guard Loader的方法
现在很多PHP程序都需要ZendOptimizer环境,但是ZendOptimizer在PHP5.2之后已经被支持,那怎么办,Zend也不会这么做,原来PHP5.3开始ZendOptimizer正式改 ...
- apache2.2+php5.3+mysql5.5+Zend Guard Loader集成包
由前一篇文章 http://www.cnblogs.com/darktime/p/3407980.html 我就配置了一个环境包,免安装的,只需要运行一个.bat的文件文件就算安装成功了 如果你需要用 ...
- PHP加速处理插件 Zend Optimizer,Zend Guard Loader 和 Zend Opcache 区别
PHP 5.3.X 以前版本 为 Zend Optimizer PHP 5.3.X 之后 更名为 Zend Guard Loader 可以帮助php执行加密后的php代码 安装实例以Ubu ...
- Linux(centos)如何安装Zend Optimizer Zend Guard Loader
很多php开源系统都是基于Zend Optimizer的,所以我们需要先安装Zend Optimizer.但在php5.3之后Zend Optimizer被Zend Guard Loader 取代了, ...
- php5.4下配置zend guard loader
前些日子的时候,zend官网下还没有支持PHP5.4的zend guard loader,今天再上去看的时候居然发现了,看来是我好久不关注它的缘故了... zend guard loader 干什么的 ...
随机推荐
- markdown 笔记二
Markdown 语法笔记==============================1,头部欢迎# 欢迎使用flaskBlog ------ flask对于我来说,适合快速开发一些小网页,自己也想整 ...
- Unity导入模型出现 (Avatar Rig Configuration mis-match. Bone length in configuration does not match position in animation)?
昨天遇到这两个模型导入的问题,查了一下资料,自己摸索了一下解决方法..总结一下~ 出现的原因:(问题1)Warning 当模型文件导入以后并且设置Animation Type是Generic的时候,动 ...
- 浅谈我的UI设计之路
时光匆匆,进入UI学习已经快两个月了,这段时间过得很充实,因为有压力才有收获. 还记的刚刚学习手绘的时候,对于这个行业只有一个初步的认识,知道自己喜欢,但是真正学习的时候才发现,我要学习的东西还有很多 ...
- DevOps架构下如何进行微服务性能测试?
一. 微服务架构下的性能测试挑战 微服务与DevOps 微服务是实现DevOps的重要架构 微服务3S原则 DevOps核心点 微服务架构下的业务特点 亿级用户的平台 单服务业务随时扩容 服务之间存在 ...
- 微软职位内部推荐-SW Engineer II for Azure Network
微软近期Open的职位: Software Engineer II The world is moving to cloud computing. Microsoft is betting Windo ...
- springboot 异步调用Async使用方法
引言: 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的:但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在spring 3. ...
- 2017-2018 第一学期201623班《程序设计与数据结构》-第2&3周作业问题总结
一.作业内容 第二周作业 http://www.cnblogs.com/rocedu/p/7484252.html#WEEK02 第三周作业 作业一定按教学进程中的模板提交 本周学习任务 点评结对同学 ...
- YQCB冲刺第二周第七天
今天的任务依旧为界面的美化. 遇到的问题为不熟悉css的使用. 站立会议 任务面板
- 剑指offer:二叉搜索树的后续遍历序列
题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 解题思路: 根据二叉搜索的性质,后序遍历是先搜索 ...
- Daily Scrum - 11/13
时间:3:00pm - 3:30pm 今天小组例会主要是任烁分享他对WP源码的code review,通过分析与讨论我们了解了背单词模块的主要类(主要是词和单词本),取词方式(调用数据库接口),算法( ...