标签归档:php

php生成psd缩略图

1.psd文件为Photoshop的文件格式,浏览器不能直接显示,有个需求要将生成psd文件的预览图,Google了几天未找到可用的代码,遂自己研究了下,最终找到了解决方法,先将psd导出为jpg文件,然后再对其生成缩略图,这样就容易多了。

2.需使用到php的一个开源库:imagemagick,安装方法:Google中搜索“ImageMagick php windows 安装”,当然如果你是Linux的话,将Windows替换为Linux即可。

3.安装好了,关键是如何使用,经过几个小时的折腾,最终实现了转换,非常简单:

$mw= NewMagickWand();
MagickReadImage($mw, '123.psd');
MagickResetIterator($mw);
MagickWriteImage($mw,"123.jpg");


PHP调试技术手册发布(1.0.0 pdf)

黑夜路人前段时 间, 本着分享/总结的精神, 计划要总结下PHP常用的调试技术, 就一些问题找到了我..

如今第一版的PHP调试技术手册已经发布.

冠以我名, 我甚感惶恐, 只能一并赞下小黑的nice了~

下载地址: http://heiyeluren-doc.googlecode.com/files/PHP-Debug-Manual-public.pdf

目录:

1 内置API输出调试
1.1 基本调试API
1.1.1 echo (print):
1.1.2 printf
1.1.3 print_r、var_dump(var_export)、debug_zval_dump
1.2 错误控制和日志记录调试
1.2.1 错误选项控制
1.2.2 错误抛出和处理
1.2.3 使用错误抑制符
1.2.4 日志记录
2 浏览器调试
2.1 页面输出调试
2.2 FirePHP  调试
2.2.1 普通变量监测
2.2.2 调用栈监测
2.2.3 监测抛出异常
2.2.4 组显示信息
3 IDE 调试
3.1 基本常用IDE介绍
3.1.1 Vim
3.1.2 Zend Studio
3.1.3 Eclipse
3.1.4 NetBeans
3.2 IDE调试
3.2.1 Zend Studio + Zend Debugger
3.2.2 Eclipse (PDT) + Xdebug
3.2.3 Vim + Xdebug + DBGp
4 PHP 性能调试技术
4.1 基本时间占用监测
4.2 使用  Xdebug 进行性能分析
4.2.1 安装配置:
4.3 APD(Advanced PHP Debugger)
4.3.1 安装配置
4.3.2 使用APD
4.4 使用Xhprof 进行性能分析
4.4.1 Xhprof  的优点:
5 PHP单元测试技术
5.1 PHPUnit

PHP eval gzinflate base64_decode str_rot13加密解密

昨天遇到了一个文件用eval(gzinflate(str_rot13(base64_decode(一串解密的,原以为替换eval为echo看下好了,谁知道,还有N层,一怒之下写了这个脚本,直接转换之。顺便弄个了在线版的,省得需要的朋友直接找我了。

以下为源码:

  1. <?php 
  2. /********************************************************************** 
  3. *PHP eval gzinflate base64_decode str_rot13加密解密脚本 By:Neeao 
  4. *目前只写了针对四种组合的,其他组合的可参考注释自行修改: 
  5. *1.eval(gzinflate(str_rot13(base64_decode( 
  6. *2.eval(gzinflate(base64_decode( 
  7. *3.gzinflate(base64_decode(base64_decode(str_rot13( 
  8. *4.eval(gzinflate(base64_decode(str_rot13( 
  9. *Http://Neeao.com 
  10. *2009-09-28 
  11. ***********************************************************************/ 
  12.  
  13. $filename='code.php';//要解密的文件 
  14. $handle = fopen($filename"r"); 
  15. $contents = fread($handlefilesize ($filename)); 
  16. $contents_arr=explode('NeeaoNeeao',htmlspecialchars(decode($contents))); 
  17. echo "此代码被加密了".$contents_arr[0]."层,内容如下:<br>\n"
  18. echo $contents_arr[1]; 
  19.  
  20. /* 
  21. 解密主函数 
  22. $Str,要解密的文件内容 
  23. */ 
  24. function decode($str,$i=0) 
  25.      
  26.     $content=""
  27.     //eval(gzinflate(str_rot13(base64_decode( 
  28.     //先正则查找是否相关组合加密的,base64编码后的正则是:[A-Za-z0-9\/\+=] 
  29.     if(preg_match("/(eval\(gzinflate\(str_rot13\(base64_decode\(')([A-Za-z0-9\/\+=]*)'/",$str,$x)) 
  30.     {    
  31.         //替换掉没用的字符,获取加密后的密文 
  32.         $content=str_replace("eval(gzinflate(str_rot13(base64_decode('","",$x[0]); 
  33.         $content=str_replace("'","",$content); 
  34.         //变量i是用来判断加密层数的,初始值为0,解密一次,层数加一 
  35.         $i++; 
  36.         //采用相关组合解密 
  37.         $content=gzinflate(str_rot13(base64_decode($content))); 
  38.         //递归判断下是不是已经结束了,没结束继续重复解密 
  39.         $content=decode($content,$i); 
  40.     } 
  41.     //eval(gzinflate(base64_decode( 
  42.     elseif(preg_match("/eval\(gzinflate\(base64_decode\('[A-Za-z0-9\/\+=]*'/",$str,$y)) 
  43.     {    
  44.          
  45.         $content=str_replace("eval(gzinflate(base64_decode('","",$y[0]); 
  46.         $content=str_replace("'","",$content); 
  47.         $i++; 
  48.         $content=gzinflate(base64_decode($content)); 
  49.         $content=decode($content,$i); 
  50.     } 
  51.     //gzinflate(base64_decode(base64_decode(str_rot13( 
  52.     elseif(preg_match("/eval\(gzinflate\(base64_decode\(base64_decode\(str_rot13\('[A-Za-z0-9\/\+=]*'/",$str,$z)) 
  53.     { 
  54.         $content=str_replace("eval(gzinflate(base64_decode(base64_decode(str_rot13('","",$z[0]); 
  55.         $content=str_replace("'","",$content); 
  56.         $i++; 
  57.         $content=gzinflate(base64_decode(base64_decode(str_rot13(($content))))); 
  58.         $content=decode($content,$i); 
  59.     } 
  60.     //eval(gzinflate(base64_decode(str_rot13( 
  61.     elseif(preg_match("/eval\(gzinflate\(base64_decode\(str_rot13\('[A-Za-z0-9\/\+=]*'/",$str,$m)) 
  62.     { 
  63.         $content=str_replace("eval(gzinflate(base64_decode(str_rot13('","",$m[0]); 
  64.         $content=str_replace("'","",$content); 
  65.         $i++; 
  66.         $content=gzinflate(base64_decode(str_rot13(($content)))); 
  67.         $content=decode($content,$i); 
  68.     } 
  69.     else 
  70.     { 
  71.         $content=$i."NeeaoNeeao".$str
  72.     } 
  73.     return $content
  74.      
  75. ?> 

在线版地址:http://neeao.com/tools/decode/index_eval.php

一个PHP webshell检查shell脚本

昨天晚上电脑里翻东西翻出来的,2008/7/17写的。

  1. #!/bin/sh 
  2. #************************************************************ 
  3. #WebShell Check Shell for PHP 
  4. #By:Neeao 
  5. #2008/7/17 v1.0 beta  
  6. #************************************************************ 
  7. HOSTIP=`ifconfig eth0 |grep 'inet addr'|awk '{print $2;}'|cut -d: -f2` 
  8. #STR=`expr index $HOSTIP "192.168"` 
  9. #if [ ${STR} -eq 1 ]  
  10. #        then 
  11. #                HOSTIP=`ifconfig eth1 |grep 'inet addr'|awk '{print $2;}'|cut -d: -f2` 
  12. #fi 
  13. echo $HOSTIP 
  14. LogFile=/tmp/$HOSTIP.log 
  15. rm -rf $LogFile 
  16. date +%Y-%m-%d/%H:%M >> $LogFile  
  17. echo -e "\n" >> $LogFile  
  18. echo " ---------------------------------------------------------------------------------------------------" >> $LogFile  
  19. echo "|Executive Order function:exec(\|system(\|passthru(\|shell_exec(\|popen(\|proc_open(\|pcntl_exec(  |" >> $LogFile  
  20. echo " ---------------------------------------------------------------------------------------------------" >> $LogFile  
  21. echo -e "\n" >> $LogFile 
  22. grep -in 'exec(\|system(\|passthru(\|shell_exec(\|popen(\|proc_open(\|pcntl_exec(' -R * | grep -iv '_exec' >> $LogFile 
  23. echo -e "\n" >> $LogFile 
  24. echo " -------------------------------------------------------------------------------------------" >> $LogFile 
  25. echo "|Deformation of the back door coding:eval(\|base64_decode(\|gzinflate(\|gzuncompress(\|chr( |" >> $LogFile 
  26. echo " --------------------------------------------------------------------------------------------" >> $LogFile 
  27. echo -e "\n" >> $LogFile 
  28. grep -in "eval(\|base64_decode(\|gzinflate(\|gzuncompress(\|chr(" -R * >> $LogFile 
  29. echo -e "\n" >> $LogFile 
  30. echo " -----------------------------------------------------------------------------------------------------------------" >> $LogFile   
  31. echo "|File operations function:dl(\|fopen(\|readfile(\|file(\|file_get_contents(\|opendir(\|chdir(\|fwrite(\|unlink(\|glob(|" >> $LogFile   
  32. echo " -----------------------------------------------------------------------------------------------------------------" >> $LogFile   
  33. echo -e "\n" >> $LogFile 
  34. grep -in "dl(\|fopen(\|readfile(\|file(\|file_get_contents(\|opendir(\|chdir(\|fwrite(\|unlink(\|glob(" -R * >> $LogFile 
  35. echo -e "\n" >> $LogFile 
  36. echo "----------------------------------" >> $LogFile 
  37. echo "|Files inculde bug:include|require|" >> $LogFile 
  38. echo "----------------------------------" >> $LogFile 
  39. echo -e "\n" >> $LogFile 
  40. grep -in "include.*\$.\|require.*\$." -R * >> $LogFile 
  41. echo -e "\n" >> $LogFile 
  42. echo "---------------------------------------------------------" >> $LogFile 
  43. echo "|Risk code Keyword:SQLyog\|phpAdsNew\|huansuan\|fckeditor|" >> $LogFile 
  44. echo "--------------------------------------------------------" >> $LogFile 
  45. echo -e "\n" >> $LogFile 
  46. grep -in "SQLyog\|phpAdsNew\|huansuan\|fckeditor" -R * >> $LogFile 
  47. cd /tmp 
  48. tar -zcvf $HOSTIP.tar.gz $HOSTIP.log 

 

微盾PHP脚本加密专家解密算法

今天工作中某合作商拿过来代码让检查安全,一看代码加密了,比较汗,类似下面代码:

  1. <?php // This file is protected by copyright law & provided under license. Copyright(C) 2005-2009 www.vidun.com, All rights reserved. 
  2. $OOO0O0O00=__FILE__;$OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');$OO00O0000=28;$OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};$OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};$OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};$O0O0000O0='OOO0000O0';eval(($$O0O0000O0('JE9PME9PMDAwMD0kT09PMDAwMDAwezE3fS4kT09PMDAwMDAwezEyfS4kT09PMDAwMDAwezE4fS4kT09PMDAwMDAwezV9LiRPT08wMDAwMDB7MTl9O2lmKCEwKSRPMDAwTzBPMDA9JE9PME9PMDAwMCgkT09PME8wTzAwLCdyYicpOyRPTzBPTzAwME89JE9PTzAwMDAwMHsxN30uJE9PTzAwMDAwMHsyMH0uJE9PTzAwMDAwMHs1fS4kT09PMDAwMDAwezl9LiRPT08wMDAwMDB7MTZ9OyRPTzBPTzAwTzA9JE9PTzAwMDAwMHsxNH0uJE9PTzAwMDAwMHswfS4kT09PMDAwMDAwezIwfS4kT09PMDAwMDAwezB9LiRPT08wMDAwMDB7MjB9OyRPTzBPTzAwME8oJE8wMDBPME8wMCwxMjU5KTskT08wME8wME8wPSgkT09PMDAwME8wKCRPTzBPTzAwTzAoJE9PME9PMDAwTygkTzAwME8wTzAwLDM4MCksJ0VudGVyeW91d2toUkhZS05XT1VUQWFCYkNjRGRGZkdnSWlKakxsTW1QcFFxU3NWdlh4WnowMTIzNDU2Nzg5Ky89JywnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycpKSk7ZXZhbCgkT08wME8wME8wKTs=')));return;?> 
  3. kr9NHenNHenNHe1zfukgFMaXdoyjcUImb19oUAxyb18mRtwmwJ4LT09NHr8XTzEXRJwmwJXPkr9NTzEXHenNHtILT08XT08XHr8XhtONTznNTzEXHr8Pkr8XHenNHr8XHtXLT08XHr8XHeEXhUXmOB50cbk5d3a3D2iUUylRTlfNaaOnCAkJW2YrcrcMO2fkDApQToxYdanXAbyTF1c2BuiDGjExHjH0YTC3KeLqRz0mRtfnWLYrOAcuUrlhU0xYTL9WAakTayaBa1icBMyJC2OlcMfPDBpqdo1Vd3nxFmY0fbc3Gul6HerZHzW1YjF4KUSvkZLphUL7cMYSd3YlhtONHeEXTznNHeEpK2a2CBXPkr9NHenNHenNHtL7eWplC2ivwunPFolVcM8PhTSYtI== 

很明显,是使用了某种PHP代码混淆工具混淆了下,Google一把,原来是使用的微盾PHP脚本加密专家加密的,网上搜了下,没找到免费的解密工具,于是乎,自己就研究了下,写了个解密算法,share下,给遇到同样问题的朋友一个方便。

       另外需要说明的是,我测试,本地解密出来的代码可以阅读的,由于代码混淆过,可能还原出来的有些地方和原代码有出入,有需要可自行修改之。

更新:

2009-09-16

添加了自动获取要截取的字符串长度,更通用了。

  1. <?php 
  2. /*********************************** 
  3. *威盾PHP加密专家解密算法 By:Neeao 
  4. *http://Neeao.com 
  5. *2009-09-10 
  6. ***********************************/ 
  7.  
  8. $filename="play-js.php";//要解密的文件 
  9. $lines = file($filename);//0,1,2行 
  10.  
  11. //第一次base64解密 
  12. $content=""
  13. if(preg_match("/O0O0000O0\('.*'\)/",$lines[1],$y)) 
  14.     $content=str_replace("O0O0000O0('","",$y[0]); 
  15.     $content=str_replace("')","",$content); 
  16.     $content=base64_decode($content); 
  17. //第一次base64解密后的内容中查找密钥 
  18. $decode_key=""
  19. if(preg_match("/\),'.*',/",$content,$k)) 
  20.     $decode_key=str_replace("),'","",$k[0]); 
  21.     $decode_key=str_replace("',","",$decode_key); 
  22. //查找要截取字符串长度 
  23. $str_length=""
  24. if(preg_match("/,\d*\),/",$content,$k)) 
  25.     $str_length=str_replace("),","",$k[0]); 
  26.     $str_length=str_replace(",","",$str_length); 
  27. //截取文件加密后的密文 
  28. $Secret=substr($lines[2],$str_length); 
  29. //echo $Secret; 
  30.  
  31. //直接还原密文输出 
  32. echo "<?php\n".base64_decode(strtr($Secret,$decode_key,'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'))."?>"
  33.  
  34. ?>