zendphp
ASPCOOL PHP文件的源碼都是明文,這對於某些商業用途來說,並不適合。 因此考慮使用加密的手段保護源碼。 實在不耐煩等待zend出編譯器,而且編譯和加密本質上不是一回事兒。自己動手、開始修改。 一、基本原理 考慮截獲PHP讀取源文件的介面。一開始,我考慮從Apache和PHP之間的介面處 處理,參見apache的src/moles/php4/mod_php4.c (這個是PHP用static方式編譯進apache,make install 後的文件),在send_php()函數中截獲文件指針,採用臨時文件的方式,解密後替換文件指針。這種方 法經過測試實踐,證明是可行的。但是,必須使用兩次文件操作,效率低下,而且對於DSO方式不可採用。 由此,重新考慮截獲PHP讀取文件並裝載至緩存的過程,經過費力的尋找,發現在Zend引擎中zend-scanner.c是做此處理的。開始對此文件修改。 二、實現方法示意 採用libmcrypt作為加 密模塊,現在採用的是DES方法ECB模式加密, 下面是文件加密的源代碼: /* ecb.c-------------------cut here-----------*/ /* encrypt for php source code version 0.99 beta we are using libmcrypt to encrypt codes, please install it first. compile command line: gcc -O6 -lmcrypt -lm -o encryptphp ecb.c please set LD_LIBRARY_PATH before use. GNU left, designed by wangsu , miweicong */ #define MCRYPT_BACKWARDS_COMPATIBLE 1 #define PHP_CACHESIZE 8192 #include < mcrypt.h > #include < stdio.h > #include < stdlib.h > #include < math.h > #include < sys/types.h > #include < sys/stat.h > #include < fcntl.h > main(int argc, char** argv) { int td, i,j,inputfilesize,filelength; char filename[255]; char password[12]; FILE* ifp; int readfd; char *key; void *block_buffer; void *file_buffer; int keysize; int decode=0; int realbufsize=0; struct stat *filestat; if(argc == 3) { strcpy(password,argv[1]); strcpy(filename,argv[2]); } else if(argc == 4 && !strcmp(argv[1],"-d")){ strcpy(password,argv[2]); strcpy(filename,argv[3]); decode=1; printf("Entering decode mode ... n"); } else { printf("Usage: encryptphp [-d] password filenamen"); exit(1); } keysize=mcrypt_get_key_size(DES); key=calloc(1, mcrypt_get_key_size(DES)); gen_key_sha1( key, NULL, 0, keysize, password, strlen(password)); td=init_mcrypt_ecb(DES, key, keysize); if((readfd=open(filename,O_RDONLY,S_IRUSR|S_IWUSR|S_IRGRP))==-1){ printf("FATAL: Can't open file to read"); exit(3); } filestat=malloc(sizeof(stat)); fstat(readfd,filestat); inputfilesize=filestat- >st_size; printf("filesize is %d n",inputfilesize); filelength=inputfilesize; inputfilesize=((int)(floor(inputfilesize/PHP_CACHESIZE))+1)*PHP_CACHESIZE; if((file_buffer=malloc(inputfilesize))==NULL){ printf("FATAL: can't malloc file buffer.n"); exit(2); } if((block_buffer=malloc(PHP_CACHESIZE))==NULL){ printf("FATAL: can't malloc encrypt block buffer.n"); exit(2); } j=0; while(realbufsize=read (readfd,block_buffer, PHP_CACHESIZE)){ printf("."); if(!decode){ if(realbufsize< PHP_CACHESIZE){ for(i=realbufsize;i< PHP_CACHESIZE;i++){ ((char *)block_buffer)[i]=' '; } } mcrypt_ecb (td, block_buffer, PHP_CACHESIZE); } else { mdecrypt_ecb (td, block_buffer, realbufsize); } memcpy(file_buffer+j*PHP_CACHESIZE,block_buffer,PHP_CACHESIZE); j++; } close(readfd); if((ifp=fopen(filename,"wb"))==NULL){ printf("FATAL: file access error.n"); exit(3); } fwrite ( file_buffer, inputfilesize, 1, ifp); free(block_buffer); free(file_buffer); free(filestat); fclose(ifp); printf("n"); return 0; } /*--- end of ecb.c ------------------------------------*/ 因為ECB模式是塊長度確定的塊加密,這里填充了一 些空字元。 然後,修改php代碼中 Zend/zend-scanner.c 如下: (我的php版本是4.01pl2, SUNsparc/solaris 2.7, gcc 2.95;) 文件前加入: #define MCRYPT_BACKWARDS_COMPATIBLE 1 #include < mcrypt.h > 然後,注釋掉大約3510行前後的YY_INPUT的定義。 然後, 修改大約5150行前後的yy_get_next_buffer()函數: 函數頭加上定義: void *tempbuf; char *key; char debugstr[255]; int td,keysize; int x,y; FILE *fp; 然後 ,注釋掉 YY_INPUT( (&yy_current_buffer- >yy_ch_buf[number_to_move]), yy_n_chars, num_to_read ); 這一句。 改為: tempbuf=malloc(num_to_read); if((yy_n_chars=fread(tempbuf,1,num_to_read,yyin))!=0){ /*decode*/ #define password "PHPphp111222" #define debug 0 keysize=mcrypt_get_key_size(DES); key=calloc(1, mcrypt_get_key_size(DES)); gen_key_sha1( key, NULL, 0, keysize, password, strlen(password)); td=init_mcrypt_ecb(DES, key, keysize); mdecrypt_ecb(td, tempbuf, yy_n_chars); memcpy((&yy_current_buffer- >yy_ch_buf[number_to_move]),tempbuf,yy_n_chars); if(debug){ fp=fopen("/tmp/logs","wb"); fwrite("nstartn",7,1,fp); fwrite(tempbuf,1,yy_n_chars,fp); fwrite("nenditn",7,1,fp); fclose(fp); } } free(tempbuf); 然後,編譯php,按正常方法安裝即可,因為我對於libtool不太熟悉,因此我選擇static方式,並在 configure時加入了--with-mcrypt,這樣我就不用自己手工修改Makefile 三、測試及結果 編譯php,apache後,用ecb.c編譯出來的encryptphp加密了幾個文件,分別為< 1K,10K+,和40K+,在處理 40K大小文件時出錯,別的文件均正常。 這是因為塊的ECB加密方式決定了必須使用定長塊,所以,請 諸位同好指點採用何種流加密方式可以兼顧到zend每次讀取8192位元組的緩存處理方式。(其他平台上 zend每次讀取的塊長度可能有所不同) 四、說明 我的機器是SUN Ultra1, solaris 2.7, gcc 2.95 , apache 1.3.12, php 4.01pl2, libmcrypt 2.2.4 我的C水平很差,請大家見諒。這里只是原理說明。 感謝老米飛刀等提供的協助。 源碼遵從GNU,需要注意,libmcrypt提供的某些加密方式不是free的。
② PHP跟zend是什麼關系
PHP 是一門開發語言, zend 是一個適用於 PHP 的開發環境
③ zend php5.6 解密工具有沒有
兵車行(杜甫)
④ zend 相對php有什麼作用。
你說的是Zend
FrameWork吧,
它是建立在PHP基礎上的一個框架,可以讓你方便快捷的搭建自己的網站骨架
他的作用就是把PHP抽象化,組件化和模塊化,讓你不用直接接觸PHP底層的函數或者操作
如果把PHP比作磚頭,那麼Zend就好像是磚頭澆築成的預製件
下面從網上抄一段:
准確地講
Zend
框架究竟是什麼呢?Zend
框架具有以下特徵:
•是基於
PHP
建立的。
•是面向對象的。
•使用
MVC
範例。
•具有開放源碼貢獻者。
•有貢獻者負責保證他們的代碼不是他人的知識產權。
⑤ PHP+MySQL+Zend 是什麼意思
Zend 是"PHP官方機構",由她主持PHP的版本更新,她為 PHP 的發展做了很大的貢獻,Eclipse 中的PHP項目中的PDT插件就是由她主導開發的。她還做了 Zend Debugger ,一個PHP的調試工具,從而實現了PHP的斷點調試和錯誤跟蹤.她還做了Zend Studio ,一個非常強大的PHP集成開發環境.她還做了 Zend Framework ,一個 7M大的PHP框架。她還做了Zend Guard,就是將.PHP文件進行加密,將其中的注釋給抽出來,並將其中的代碼結構打亂,導致其他人看不懂。
而在 PHP+MySQL+Zend 裡面,Zend 可能是指 Zend Framework。這是一個php框架,分MVC三層架構,就和JSP中的Structs一樣。框架為開源,免費,可以去Zend官方網站直接下載. Zend框架是一個比較難學的PHP框架,相比較而言,國人做的另一個PHP框架flea比較好用.
你說的 「簡單看了一下Zend還是收費的」,可能是指 Zend Studio 這個開發工具,這個開發工具的確是要收費的,就像 Visual Studio 2005 一樣,但國人早就把他破解了~~
⑥ PHP中的ZEND框架是做什麼用的
首先Zend是目前為php提供技術和服務支持的公司,該公司專注於php項目的各種解決方案,其中之一是zend framework。
然後ZF(Zend Framework)的優勢:
ZF使用MVC三層架構,完全面向對象編碼。
組件非常豐富,且組件之間耦合很鬆散。簡單說就是,各組件之間的依賴性非常低,基本上每個組件都可以單獨拿出來使用。
ZF是Zend對php面向對象編碼的最佳參考之一。非常靈活,非常強大,非常易於擴展,然而,也非常難入門難上手。
ZF的中文資料相對來說,並不充足,國內使用ZF做框架的網站也不是很多。
對於大型php項目,有一定規模的團隊,有明確項目需求,有明確項目進度規劃的,可以考慮使用ZF,另外,對於非常想學習php 面向對象思想的,ZF是相當推薦的。
相比之下ThinkPHP在國內更受歡迎,另外還有CI框架(CodeIgniter )等
⑦ zend php解密
已解開!
<?php
function qqoq_yyyyy()
{
$a = get_option("qqoq_key");
$f = $_SERVER[PHP_SELF];
if ((qqoq_verify_domain($a) != "hehe") && !stristr($f, "themes.php")) {
add_action("admin_notices", "qqoq_notice");
wp_redirect(admin_url("themes.php?page=admin-s.php"));
}
}
function qqoq_notice()
{
$g .= "<div style='\r\n background-color: #F3383F;\r\n border-radius: 3px 3px 3px 3px;\r\n border-style: solid;\r\n border-width: 2px;\r\n color: #FFFFFF;\r\n margin: 35px 10px 15px;\r\n padding: 10px;\r\n -moz-box-shadow: 0px 0px 4px #bbb; /* FF3.5+ */\r\n -webkit-box-shadow: 0px 0px 4px #bbb; /* Saf3.0+, Chrome */\r\n box-shadow: 0px 0px 4px #bbb; /* Opera 10.5, IE9, Chrome 10+ */\r\n '>";
$g .= "系統檢測到你尚未購買此主題。如若你已購買了本主題請在<a href=\"" . admin_url() . "themes.php?page=admin-s.php\">主題設置</a>->常規設置里輸入你的注冊碼。抑或沒有購買者請到這里購買<a href=\"http://www.qqoq.net\">購買地址</a>。謝謝理解,謝謝支持!";
$g .= "</div>";
echo $g;
}
⑧ 自學php 不參加培訓 哪裡可以獲得Zend PHPChina PCTI 認證
兄弟,挺有毅力、不錯。先找工作吧!如果感覺有必要考證書時再考。
⑨ Zend後的PHP是如何執行的
那個是已經加密、混雜變數名後的PHP的OpCode碼執行過程就是解密,然後用Zend VM運行解密後的OpCode並不是像1L所說的是二進制代碼。
針對最近Zend公司對加密模式調整補充一些東西:如果要讓Zend加密的代碼在PHP 5.3.x上運行,必須選擇針對PHP 5.3加密,舊版本的加密文件不能在PHP 5.3上運行。同時,如果是Windows平台還必須選擇PHP的NTS版本。對應的Zend解密插件是Zend Loader。需要全部手工安裝。獲取ZendLoader.dll之後修改PHP文件增加以下兩行:zend_extension="(ZendLoader.dll的路徑)"
zend_loader.enable=1
而如果要讓Zend加密的代碼在PHP 5.3之前的平台上運行,必須選擇針對舊版PHP加密。針對PHP 5.3加密的代碼是不能在PHP 5.3之前的平台上運行的。同時,如果是Windows平台還必須選擇PHP的TS版本。對應的Zend解密插件是Zend Optimizer。有安裝程序,需要自行安裝。
⑩ php 怎麼用zend加密
可以加密就可以解密。
解密ZEND加密後的PHP文件:
zend加密php文件解密工具Dezender可以做到。
1、下載Dezender.zip
2、解壓到盤裡面,最好不要有中文路徑,比如解壓到 I:Dezender 裡面,修改I:DezenderPHP5PHP5php.ini文件,修改裡面的文件路徑。