Zend Guard的作用,就是用編譯處理的方式來(lái)保護(hù)PHP源代碼免于被反編譯查看、未經(jīng)授權(quán)的定制修改、未經(jīng)許可的使用和重新發(fā)布等。而且,它是PHP的東家Zend公司開(kāi)發(fā)的,是完全為PHP量身定做的保護(hù)神。
下面,請(qǐng)大家就和我一起來(lái)學(xué)習(xí)使用Zend Guard,加密保護(hù)我們的PHP源代碼吧。
實(shí)戰(zhàn):加密PHP源代碼
下載:http://www.zend.com/en/products/guard/
接下來(lái)讓我們準(zhǔn)備一個(gè)簡(jiǎn)單的PHP程序test.php,用來(lái)測(cè)試能否被Zend Guard保護(hù)起來(lái)。test.php的代碼如下:
復(fù)制代碼 代碼如下:
<?php
phpinfo();
?>
打開(kāi)Zend Guard,從File(文件)菜單點(diǎn)擊,新建一個(gè)項(xiàng)目,如圖1所示。點(diǎn)擊Next進(jìn)入目錄和文件添加界面,因?yàn)槲覀冎皇菧y(cè)試一個(gè)文件,所以點(diǎn)Add File將test.php添加進(jìn)來(lái),再點(diǎn)擊Finish(完成)即可生成項(xiàng)目。
這時(shí),Zend Guard會(huì)自動(dòng)打開(kāi)新建立的項(xiàng)目,在界面的左邊列出項(xiàng)目中的文件,右邊列出項(xiàng)目的相關(guān)信息。現(xiàn)在,我們就可以將源代碼編譯了。點(diǎn)擊右邊Links(鏈接)中的Encode(編譯),界面最下面的Console(控制臺(tái))窗口顯示“The operation has completed successfully.”,意思為編譯已經(jīng)完成。
現(xiàn)在再去加密后文件保存的目錄中,會(huì)看到其中也有一個(gè)test.php,它是否和原來(lái)的test.php一樣呢?用編輯軟件打開(kāi)它,可以看到它不再是原來(lái)的內(nèi)容了,如圖2所示。注意:自己一定要保存好原始代碼,不然丟失了,連你自己也沒(méi)有辦法查看和修改的。
接下來(lái)測(cè)試一下加密的代碼,從瀏覽器訪問(wèn)加密后的PHP程序,哎呀,出錯(cuò)了,不能運(yùn)行,并顯示如圖3所示的信息。原來(lái),使用Zend Guard加密后的PHP程序,還需要一個(gè)搭檔—Zend Optimizer,才能正常執(zhí)行并提升效率。可從http://www.zend.com/en/products/guard/下載安裝。安裝過(guò)程中,“Choose the php.ini folder”這一步表示設(shè)置系統(tǒng)上PHP的配置文件php.ini的位置,“Choose the Web server's root folder”這一步表示設(shè)置Web服務(wù)器軟件所在的位置。安裝完成以后,用記事本打開(kāi)php.ini,在最后我們會(huì)看到類似下面的配置信息:
[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已經(jīng)安裝成功了,我們可以重新啟動(dòng)Web服務(wù)器軟件,讓Zend Optimizer生效即可。注意:如果所使用的服務(wù)器已經(jīng)安裝過(guò)或者包含了Zend Optimizer,就不用再次安裝了。
現(xiàn)在再次從瀏覽器訪問(wèn)加密后的PHP程序試試,果然可以正常運(yùn)行了,從顯示的信息中,我們可以看到Zend Optimizer的信息
解析Zend Guard加密原理
讓我們看看流程,就可以對(duì)Zend Guard的保護(hù)原理一目了然了。通過(guò)Zend Guard將PHP源代碼編譯為加密代碼,然后通過(guò)加載了Zend Optimizer的PHP執(zhí)行即可。分發(fā)給別人的程序,是加密后的代碼,可以執(zhí)行,但是沒(méi)有源代碼,別人也就無(wú)法查看和修改了。因而,我們可以在程序中加入適當(dāng)?shù)拇a,用來(lái)檢測(cè)系統(tǒng)的當(dāng)前時(shí)間,看是否超過(guò)了預(yù)先設(shè)置的期限,如果超過(guò)了,就退出程序不讓繼續(xù)執(zhí)行。
Zend Guard的工作原理和Java類似,編譯后的PHP程序就像編譯好的Java二進(jìn)制代碼,需要JVM的支持才能運(yùn)行,Zend Optimizer可以看作是PHP的虛擬機(jī)。Zend Guard與Zend Optimizer相互配合,就能完成編譯加密和執(zhí)行編譯后代碼的工作。
License管理的方面屬于更為深層的使用,可以用來(lái)生成許可文件,從而通過(guò)選擇不同的許可模式來(lái)限制程序的使用,例如同時(shí)使用的用戶數(shù)、時(shí)間限制、網(wǎng)絡(luò)分段或者特定的服務(wù)器等。有興趣的讀者可以查看Zend Guard自身所帶的幫助文件,來(lái)了解具體的用法。