- 论坛徽章:
- 0
|
(源自:杨志刚博客 http://yangzhigang.blog.chinaunix.net http://yangzhigang.cublog.cn) 前言: 本文为我用php_screw模块对php文件进行加密的测试过程记录,供参考。
说明: php_screw,支持所有POSIX系统(Unix/Linux/Linux Like),不支持Windows系统。
Php_screw官网: http://sourceforge.net/projects/php-screw/
操作: 1)在开源项目网站下载最新版本:php_screw_1.5。 # cd /usr/local/src # wget http://downloads.sourceforge.net/project/php-screw/php-screw/1.5/php_screw-1.5.tar.gz # ll php_screw-1.5.tar.gz -rw-r--r-- 1 root root 7307 Oct 17 2007 php_screw-1.5.tar.gz
2)解压 # tar -zxvf php_screw-1.5.tar.gz 3) 配置、编译 # cd php_screw-1.5 # phpize # phpize Configuring for: PHP Api Version: 20041225 Zend Module Api No: 20050922 Zend Extension Api No: 220051025 # ./configure # make ---------------------------------------------------------------------- Libraries have been installed in: /usr/local/src/php_screw-1.5/modules
4) 加载php_screw.so 在正常执行make后,在源码的modules目录下,生成php_screw.so文件。 # pwd /usr/local/src/php_screw-1.5/modules # cd modules/ # ls php_screw.la php_screw.so php_screw.so就是用来解析加密后PHP源码的。编译screw过程中会用到my_screw.h文件,所以要保证编译php_screw.so和screw时使用的my_screw.h文件一致。
将php_screw.so文件copy到php的模块目录下(也就是phpinfo()里extension_dir所指的目录,或是在php.ini中找到extension_dir =)。 # grep "extension_dir" /etc/php.ini extension_dir = "/usr/lib/php/modules" # cp php_screw.so /usr/lib/php/modules/
之后,编辑php.ini文件,添加: extension=php_screw.so
重新启动apache,查看phpinfo()里面就有php_screw的相关信息。
5)生成加密可执行文件 进行源码目录tools下,执行: # cd tools # make gcc -o screw screw.c zencode.c -lz # ll -rw-r--r-- 1 root root 105 Oct 14 2007 Makefile -rwxr-xr-x 1 root root 8618 Dec 23 03:33 screw -rw-rw-rw- 1 root root 1541 Oct 14 2007 screw.c -rw-rw-rw- 1 root root 1772 Oct 14 2007 zencode.c
6) 更改可执行路径 将screw文件copy到$PATH变量的目录下(如/usr/local/bin,/usr/bin,/sbin等),确保在任意路径可以直接执行screw命令。 # cp screw /usr/bin
7) 加密测试,验证 测试加密phpinfo.php文件(<?php phpinfo(); ?>) # screw phpinfo.php Success Crypting(phpinfo.php) # ll -rw-r--r-- 1 root root 36 Dec 23 03:46 phpinfo.php -rw-r--r-- 1 root root 20 Dec 23 03:46 phpinfo.php.screw 生成了加密码后的文件phpinfo.php,原文件被copy成phpinfo.php.screw。用cat查看phpinfo.php,已经不能查看文件内容,显示为乱码。 通过Web访问,以及用命令方式执行加密后的phpinfo.php文件,显示一切正常。 screw每次只能加密一个文件,如果要批量加密,自己可以写个shell脚本来完成。
附录说明: 1)可以通过源软件包中的README.en文件,了解更多一点的php_screw信息,如: 3. Requirement(环境需求) (1) PHP5.x NOTICE: PHP must be compiled with the "--with-zlib" option. Check that PHP has zlib compiled in it with the PHP script: "<? gzopen(); ?>" If PHP knows about the function you can happily proceed. 该版本软件包要求PHP5.x 环境,并要求zlib支持(通过执行脚本<? gzopen(); ?>来检查)。 (2) UNIX like OS (LINUX, FreeBSD, etc. are included) 4. Installation.(安装方法)
2)php_screw.h文件 # cat php_screw.h #define PM9SCREW "\tPM9SCREW\t" #define PM9SCREW_LEN 10
char *zdecode(char *inbuf, int inbuf_len, int *resultbuf_len); char *zencode(char *inbuf, int inbuf_len, int *resultbuf_len); 如果不改这个文件,加密后的文件内容开头就会有 PM9SCREW ,很容易被人知道是用screw模块加密的,虽然目前网上没发现解密算法,但以后就不一定。 通过编辑这个文件可以用来隐藏加密算法。 要注意的是:第一行定义的字串和第二行定义的长度要对应。
3)my_screw.h文件 # cat my_screw.h short pm9screw_mycryptkey[] = { 11152, 368, 192, 1281, 62 }; 自定义加密种子文件,通过编辑my_screw.h,修改文件里面的数组文件,可以用数字添加该数组的长度。数组越长,加密越可靠。而且该数组的长度不会影响加密以及PHP程序执行的速度.测试发现不要大于5位数,大了就会解密解析有问题。
4)关于phpize php官方的说明: http://php.net/manual/en/install.pecl.phpize.php phpize是用来扩展php扩展模块的,通过phpize可以建立php的外挂模块,比如想在原来编译好的php中加入新的扩展模块,可以使用phpize。 如本文要在安装好的php中扩展安装php_screw.so模块,就要用phpize。
|
|