PHP源码加密

2015-11-16 08:57

1. urlencode/urldecode方式

 

Php代码  收藏代码
  1. <?php  
  2. function RandAbc($length=""){//返回随机字符串  
  3.     $str="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";  
  4.     return str_shuffle($str);  
  5. }  
  6.   
  7. $filename='foo.php';  
  8.   
  9. $T_k1=RandAbc();//随机密匙1  
  10. $T_k2=RandAbc();//随机密匙2  
  11.   
  12. $vstr=file_get_contents($filename);//要加密的文件  
  13. $v1=base64_encode($vstr);  
  14.   
  15. $c=strtr($v1,$T_k1,$T_k2);//根据密匙替换对应字符。  
  16. $c=$T_k1.$T_k2.$c;  
  17.   
  18. $q1="O00O0O";  
  19. $q2="O0O000";  
  20. $q3="O0OO00";  
  21. $q4="OO0O00";  
  22. $q5="OO0000";  
  23. $q6="O00OO0";  
  24. $s='$'.$q6.'=urldecode("%6E1%7A%62%2F%6D%615%5C%76%740%6928%2D%70%78%75%71%79%2A6%6C%72%6B%64%679%5F%65%68%63%73%77%6F4%2B%6637%6A");$'.$q1.'=$'.$q6.'{3}.$'.$q6.'{6}.$'.$q6.'{33}.$'.$q6.'{30};$'.$q3.'=$'.$q6.'{33}.$'.$q6.'{10}.$'.$q6.'{24}.$'.$q6.'{10}.$'.$q6.'{24};$'.$q4.'=$'.$q3.'{0}.$'.$q6.'{18}.$'.$q6.'{3}.$'.$q3.'{0}.$'.$q3.'{1}.$'.$q6.'{24};$'.$q5.'=$'.$q6.'{7}.$'.$q6.'{13};$'.$q1.'.=$'.$q6.'{22}.$'.$q6.'{36}.$'.$q6.'{29}.$'.$q6.'{26}.$'.$q6.'{30}.$'.$q6.'{32}.$'.$q6.'{35}.$'.$q6.'{26}.$'.$q6.'{30};eval($'.$q1.'("'.base64_encode('$'.$q2.'="'.$c.'";eval(\'?>\'.$'.$q1.'($'.$q3.'($'.$q4.'($'.$q2.',$'.$q5.'*2),$'.$q4.'($'.$q2.',$'.$q5.',$'.$q5.'),$'.$q4.'($'.$q2.',0,$'.$q5.'))));').'"));';  
  25.   
  26. $s='<?php  
  27. '.$s.'  
  28. ?>';  
  29.   
  30. echo $s;  
  31. //生成 加密后的PHP文件  
  32. $fpp1 = fopen('temp'.$filename,'w');  
  33. fwrite($fpp1,$sor die('写文件错误');  

 

 

新建encrypt.php文件,将以上代码复制进该文件,$filename是要加密的php文件

 

原foo.php

Php代码  收藏代码
  1. <?php  
  2.   
  3. echo phpinfo();  

 

加密之后tempfoo.php

Php代码  收藏代码
  1. <?php  
  2. $O00OO0=urldecode("%6E1%7A%62%2F%6D%615%5C%76%740%6928%2D%70%78%75%71%79%2A6%6C%72%6B%64%679%5F%65%68%63%73%77%6F4%2B%6637%6A");$O00O0O=$O00OO0{3}.$O00OO0{6}.$O00OO0{33}.$O00OO0{30};$O0OO00=$O00OO0{33}.$O00OO0{10}.$O00OO0{24}.$O00OO0{10}.$O00OO0{24};$OO0O00=$O0OO00{0}.$O00OO0{18}.$O00OO0{3}.$O0OO00{0}.$O0OO00{1}.$O00OO0{24};$OO0000=$O00OO0{7}.$O00OO0{13};$O00O0O.=$O00OO0{22}.$O00OO0{36}.$O00OO0{29}.$O00OO0{26}.$O00OO0{30}.$O00OO0{32}.$O00OO0{35}.$O00OO0{26}.$O00OO0{30};eval($O00O0O("JE8wTzAwMD0iQlpQQWZ2bWppVVh4Y05rclFUeldKb3REZXVHYnlNU3FzaENwZEZnSUtSVkhZbkxFYXdsT3Z1TUVOcGZCREpoT3pzYWVWcmlIUWJLQ2xBR1RJUldVdFp5ZGdGUHdvbmN4bWtqTFlxWFNNQzlxWXhFc3lQMG91SHNiVEl2cVl4dmRUZnVwb3lhNyI7ZXZhbCgnPz4nLiRPMDBPME8oJE8wT08wMCgkT08wTzAwKCRPME8wMDAsJE9PMDAwMCoyKSwkT08wTzAwKCRPME8wMDAsJE9PMDAwMCwkT08wMDAwKSwkT08wTzAwKCRPME8wMDAsMCwkT08wMDAwKSkpKTs="));  
  3. ?>  

 

2. php_screw方式

 

下载:http://pan.baidu.com/share/link?shareid=180128&uk=704879932

 

安装

1.用tar解压缩 tar -zxvf php_screw-1.5.tar.gz

 

2.进入php_screw-1.5目录开始安装

cd php_screw-1.5

phpize

关于phpize ,它在php5-dev扩展模块中 只要安装php5-dev模块就行了。

./confiugre

 

3.设置自己用来加密的密码

vi my_screw.h

      -- Please change the encryption SEED key (pm9screw_mycryptkey) into the

         values according to what you like.

         The encryption will be harder to break, if you add more values to the

         encryption SEED array. However, the size of the SEED is unrelated to

         the time of the decrypt processing.

      *  If you can read and understand the source code, to modify an original

         encryption logic will be possible. But in general, this should not

         be necessary.

      OPTIONAL: Encrypted scripts get a stamp added to the beginning of the

                file. If you like, you may change this stamp defined by

                PM9SCREW and PM9SCREW_LEN in php_screw.h. PM9SCREW_LEN must

                be less than or equal to the size of PM9SCREW.

4.编译

make

 

5.拷贝modules目录下的php_screw.so文件到/usr/lib/php5/extension目录下

cp modules/php_screw.so /usr/lib/php5/extension/

 

6.编辑php.ini文件

在php.ini文件里,加入如下语句

extension=php_screw.so

 

7.重新启动Apache

/etc/init.d/apache2 restart

 

8.编译加密工具

cd tools

make

 

9.将tools目录下加密用的工具screw拷贝到适当目录

cp screw /usr/bin/

 

经过以上的10步,就已经把php_screw-1.5全部安装完成了。并且现在的php也已经支持解释加密过的php文件了

 

使用

1.现写一个要加密的php文件。

我写了如下的一个用来测试php速度的test.php文件

Php代码  收藏代码
  1. <?  
  2.   
  3. $a=0;  
  4. $t=time();  
  5.   
  6. for($i=0;$i<5000000;$i++){$a=$a*$i;}  
  7.   
  8. $t1=time();  
  9. echo "<p>";  
  10. echo "It used:";  
  11. echo $t1-$t;  
  12. echo "seconds";  
  13.   
  14. ?>  

 

将上面的test.php文件放到/var/www/目录下。通过浏览器访问,将显示出php在大量计算时的速度(粗略估计)

 

2.将我们写的php文件加密

cd /var/www/

screw test.php

 

我们加密后,现在目录下的test.php文件就是我们已经加密的了。而源文件被改名为test.php.screw存放了。

我们现在再测试一下test.php,看看能否正常使用?速度如何?

我比较了一下,加密前后的速度大概一样,基本没有太多的损失。

 

3批处理加密文件

在debian, apache2, php5上测试过对.html文件加密后,能正确解析;

php_screw如何对当前目录下,对目录下包含的文件,以及包含目录下的文件进行整体加密

find ./ -name "*.php" -print|xargs -n1 screw //加密所有的.php文件

find ./ -name "*.screw" -print/xargs -n1 rm //删除所有的.php源文件的备份文件

这样在当前目录下的所有.php文件就全部背加密了

 

参考文章:

http://blog.csdn.net/luochuan/article/details/8474044

http://blog.csdn.net/zqlee1216/article/details/4371477

http://www.cnblogs.com/keheng/articles/2496970.html

^