免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2058 | 回复: 0
打印 上一主题 下一主题

记录测试PHP加密:php_screw [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-22 08:54 |只看该作者 |倒序浏览
(源自:杨志刚博客 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。

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP