电脑安全

您当前的位置:主页 > 电脑安全 >

修改Zend引擎实现PHP源码加密的原理及实践-网络编

来源:[db:来源]标题:   文件    编辑:电脑技术全能网 时间:2019-09-21 18:25

原标题:修改Zend引擎实现PHP源码加密的原理及实践-网络编
   PHP文件的源码都是明文,这关于某些贸易用处来讲,并不合适。  因而斟酌应用加密的手腕爱护源码。  切实不耐心等候zend出编译器,并且编译和加密实质上不是一回事儿。本人着手、开端修正。1、基础道理  斟酌截获PHP读取源文件的接口。一开端,我斟酌从Apache和PHP 之间的接口处 处置,拜见apache的src/modules/php4/mod_php4.c (这个是PHP用static方法编译进apache,make install 后的文件),在send_php()函数中截获文件指针,采纳常设文件的方法,解密后调换文件指针。这类方式经由测试实际,证实是可行的。然而,必需应用两次文件操纵,效力低下,并且关于DSO方法弗成采纳。 双缘敬老院  由此,从新斟酌截获PHP读取文件并装载至缓存的进程,经由费劲的查找,发觉在Zend引擎中zend-scanner.c是做此处置的。开端对此文件修正。照明工程2、完成方式表示  采纳libmcrypt作为加 密模块,当初采纳的是DES方式ECB形式加密,上面是文件加密的源代码:/* ecb.c-------------------cut here-----------*//* encrypt for php source code version 0.99 betawe are using libmcrypt to encrypt codes, pleaseinstall it first.compile command line:gcc -O6 -lmcrypt -lm -o encryptphp ecb.cplease set LD_LIBRARY_PATH before use.GNU copyleft, 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:

上一篇:正则表达式三-网络编程

下一篇:没有了