PHP代码保护--Zend Guard的使用详解


Posted in PHP onJune 03, 2013

Zend Guard的作用,就是用编译处理的方式来保护PHP源代码免于被反编译查看、未经授权的定制修改、未经许可的使用和重新发布等。而且,它是PHP的东家Zend公司开发的,是完全为PHP量身定做的保护神。
下面,请大家就和我一起来学习使用Zend Guard,加密保护我们的PHP源代码吧。


实战:加密PHP源代码
下载:http://www.zend.com/en/products/guard/
接下来让我们准备一个简单的PHP程序test.php,用来测试能否被Zend Guard保护起来。test.php的代码如下:

<?php
 phpinfo(); 
?>

打开Zend Guard,从File(文件)菜单点击,新建一个项目,如图1所示。点击Next进入目录和文件添加界面,因为我们只是测试一个文件,所以点Add File将test.php添加进来,再点击Finish(完成)即可生成项目。


这时,Zend Guard会自动打开新建立的项目,在界面的左边列出项目中的文件,右边列出项目的相关信息。现在,我们就可以将源代码编译了。点击右边Links(链接)中的Encode(编译),界面最下面的Console(控制台)窗口显示“The operation has completed successfully.”,意思为编译已经完成。
现在再去加密后文件保存的目录中,会看到其中也有一个test.php,它是否和原来的test.php一样呢?用编辑软件打开它,可以看到它不再是原来的内容了,如图2所示。注意:自己一定要保存好原始代码,不然丢失了,连你自己也没有办法查看和修改的。


接下来测试一下加密的代码,从浏览器访问加密后的PHP程序,哎呀,出错了,不能运行,并显示如图3所示的信息。原来,使用Zend Guard加密后的PHP程序,还需要一个搭档—Zend Optimizer,才能正常执行并提升效率。可从http://www.zend.com/en/products/guard/下载安装。安装过程中,“Choose the php.ini folder”这一步表示设置系统上PHP的配置文件php.ini的位置,“Choose the Web server's root folder”这一步表示设置Web服务器软件所在的位置。安装完成以后,用记事本打开php.ini,在最后我们会看到类似下面的配置信息:
[Zend]
zend_extension_manager.optimizer_ts="E:\Program Files\Zend\ZendOptimizer-3.3.0\lib\Optimizer-3.3.0"
zend_extension_ts="E:\Program Files\Zend\ZendOptimizer-3.3.0\lib\ZendExtensionManager.dll"
这就表示Zend Optimizer已经安装成功了,我们可以重新启动Web服务器软件,让Zend Optimizer生效即可。注意:如果所使用的服务器已经安装过或者包含了Zend Optimizer,就不用再次安装了。
现在再次从浏览器访问加密后的PHP程序试试,果然可以正常运行了,从显示的信息中,我们可以看到Zend Optimizer的信息


解析Zend Guard加密原理
让我们看看流程,就可以对Zend Guard的保护原理一目了然了。通过Zend Guard将PHP源代码编译为加密代码,然后通过加载了Zend Optimizer的PHP执行即可。分发给别人的程序,是加密后的代码,可以执行,但是没有源代码,别人也就无法查看和修改了。因而,我们可以在程序中加入适当的代码,用来检测系统的当前时间,看是否超过了预先设置的期限,如果超过了,就退出程序不让继续执行。

Zend Guard的工作原理和Java类似,编译后的PHP程序就像编译好的Java二进制代码,需要JVM的支持才能运行,Zend Optimizer可以看作是PHP的虚拟机。Zend Guard与Zend Optimizer相互配合,就能完成编译加密和执行编译后代码的工作。

License管理的方面属于更为深层的使用,可以用来生成许可文件,从而通过选择不同的许可模式来限制程序的使用,例如同时使用的用户数、时间限制、网络分段或者特定的服务器等。有兴趣的读者可以查看Zend Guard自身所带的帮助文件,来了解具体的用法。

PHP 相关文章推荐
搜索引擎技术核心揭密
Oct 09 PHP
php单例模式实现(对象只被创建一次)
Dec 05 PHP
phpmyadmin显示utf8_general_ci中文乱码的问题终级篇
Apr 08 PHP
探讨:parse url解析URL,返回其组成部分
Jun 14 PHP
解析PHP对现有搜索引擎的调用
Jun 25 PHP
PHP+memcache实现消息队列案例分享
May 21 PHP
php实现用于验证所有类型的信用卡类
Mar 24 PHP
PHP中trim()函数简单使用指南
Apr 16 PHP
PHP MPDF中文乱码的解决方式
Dec 08 PHP
php使用parse_str实现查询字符串解析到变量中的方法
Feb 17 PHP
Thinkphp通过一个入口文件如何区分移动端和PC端
Apr 18 PHP
php中钩子(hook)的原理与简单应用demo示例
Sep 03 PHP
ubuntu10.04配置 nginx+php-fpm模式的详解
Jun 03 #PHP
基于php-fpm的配置详解
Jun 03 #PHP
php的POSIX 函数以及进程测试的深入分析
Jun 03 #PHP
基于PHP一些十分严重的缺陷详解
Jun 03 #PHP
spl_autoload_register与autoload的区别详解
Jun 03 #PHP
基于Linux调试工具strace与gdb的常用命令总结
Jun 03 #PHP
linux命令之调试工具strace的深入分析
Jun 03 #PHP
You might like
php+ajax无刷新上传图片实例代码
2015/11/17 PHP
php使用file函数、fseek函数读取大文件效率对比分析
2016/11/04 PHP
PHP实现负载均衡下的session共用功能
2018/04/17 PHP
PHP单例模式模拟Java Bean实现方法示例
2018/12/07 PHP
浅谈laravel框架sql中groupBy之后排序的问题
2019/10/17 PHP
Thinkphp 框架配置操作之动态配置、扩展配置及批量配置实例分析
2020/05/15 PHP
通过PHP实现用户注册后邮箱验证激活
2020/11/10 PHP
js同时按下两个方向键
2007/12/01 Javascript
Extjs学习笔记之八 继承和事件基础
2010/01/08 Javascript
jQuery源码解读之addClass()方法分析
2015/02/20 Javascript
纯JS代码实现气泡效果
2016/05/04 Javascript
jQuery 3.0中存在问题及解决办法
2016/07/15 Javascript
AngularJS在IE下取数据总是缓存问题的解决方法
2016/08/05 Javascript
vue+swiper实现侧滑菜单效果
2017/12/28 Javascript
js登录滑动验证的实现(不滑动无法登陆)
2018/01/03 Javascript
使用puppeteer破解极验的滑动验证码
2018/02/24 Javascript
JavaScript使用小插件实现倒计时的方法讲解
2019/03/11 Javascript
Vue CLI3创建项目部署到Tomcat 使用ngrok映射到外网
2019/05/16 Javascript
在Layui中实现开关按钮的效果实例
2019/09/29 Javascript
JS精确判断数据类型代码实例
2019/12/18 Javascript
在vue中实现echarts随窗体变化
2020/07/27 Javascript
[01:05:56]2018DOTA2亚洲邀请赛3月29日 小组赛A组 Newbee VS VG
2018/03/30 DOTA
[05:40]DOTA2荣耀之路6:Wings最后进攻
2018/05/30 DOTA
老生常谈python之鸭子类和多态
2017/06/13 Python
python selenium登录豆瓣网过程解析
2019/08/10 Python
如何基于Python pygame实现动画跑马灯
2020/11/18 Python
详解如何使用CSS3中的结构伪类选择器和伪元素选择器
2020/01/06 HTML / CSS
曼城官方网上商店:Manchester City
2019/09/10 全球购物
村委会主任先进事迹
2014/01/15 职场文书
中文专业求职信
2014/06/20 职场文书
2014年社区计生工作总结
2014/11/18 职场文书
2014年工作总结及2015工作计划
2014/12/12 职场文书
班级联欢会主持词
2015/07/03 职场文书
工作转正自我鉴定范文
2019/06/21 职场文书
Win11安全功能升级:内置防网络钓鱼功能
2022/04/08 数码科技
使用python绘制分组对比柱状图
2022/04/21 Python