php写了一个清除网页木马的小程序。

最近有好几个站被挂马,删除比较麻烦。因为挂马的人经常变换样式。
但是还是有规律可寻,就想到用正则办法匹配。效果还是不错的。

主要原理是历遍目录(包括子目录),正则表达。



下载: replace.php
  1. <?
  2.  /***************************************************************************
  3. * replace.php
  4. * -------------------------
  5. * begin : 2007年12月13日
  6. * copyright : (C) 2002-2007 The ReQi.com
  7. * email : maxflg@yahoo.com
  8. * qq : 1881191
  9. * msn : ibar@163.com
  10. * last modify on : 2007-12-13 16:10
  11. *
  12. * $Id: replace.php,v 1.0.0.0 2007-12-13 16:15 Syber Exp $
  13. *
  14. ***************************************************************************/
  15.  
  16.  /***************************************************************************
  17. *
  18. * This program is free software; you can redistribute it and/or modify
  19. * it under the terms of the GNU General Public License as published by
  20. * the Free Software Foundation; either version 2 of the License, or
  21. * (at your option) any later version.
  22. *
  23. ***************************************************************************/
  24.  
  25.  /***************************************************************************
  26. *
  27. * Thanks my love,my all,my darling.
  28. *
  29. ***************************************************************************/
  30.  
  31.  //设置工作目录。一般服务器空间都作了权限设置,所以工作目录在本域下。
  32.  $fdir = dirname(__FILE__);
  33.  
  34.  //历遍目录在网站找了一个function,顺手拿来用。当然,人家的版权也要保留嘛!
  35.  
  36.  //初始化文件列表
  37.  $file_a = array();
  38.  
  39.  function rFile($p)
  40.  {
  41.  //在window xp 下测试通过
  42.  //http://www.zc36.com
  43.  //czc136@hotmail.com
  44.  global $file_a;
  45.  
  46.  //打开文件
  47.  $handle = opendir($p);
  48.  $dir_a = array();
  49.  
  50.  //读取目录
  51.  while ($file = readdir($handle))
  52.  {
  53.  // '.' & '..'目录剔除
  54.  if ($file != "." && $file != "..")
  55.  {
  56.  $tmp = $p . "\\" . $file;
  57.  if (is_dir($tmp))
  58.  {
  59.  //如果是目录,附加到目录列表等待
  60.  $dir_a[count($dir_a)] = $tmp;
  61.  }
  62.  elseif (is_file($tmp))
  63.  {
  64.  //文件则附加到文件列表
  65.  $file_a[count($file_a)] = $tmp;
  66.  }
  67.  }
  68.  }
  69.  closedir($handle);
  70.  foreach($dir_a as $v)
  71.  {
  72.  //递归处理其他目录。
  73.  rFile($v);
  74.  }
  75.  }
  76.  
  77.  //正则表达式。匹配框架,中间内容包含src=** 并且有特定字符。
  78.  $search = array ("'<iframe[^>]*?src=(\'|\")?(http://)?aa\.[^>]*?\>.*?</iframe>'si");
  79.  
  80.  $replace = array ("");
  81.  
  82.  rFile($fdir . "/bbs/");//调用,要遍历的目录
  83.  foreach($file_a as $v)
  84.  {
  85.  $fp = fopen($v, "r+");
  86.  $str = fread($fp, filesize($v));//dirname(__FILE__)."/visure.txt"));//
  87.  fclose($fp);
  88.  
  89.  //把所有木马框架取消。并删除前后空行。删除空行的作用就是因为很多php程序,会有header输出头。在输出之前,不允许浏览器有任何输出。否则会报错。
  90.  $text = preg_replace ($search, $replace, trim($str));
  91.  $fp = fopen($v, "w+");
  92.  fwrite($fp, $text);
  93.  fclose($fp);
  94.  
  95.  //显示处理过程。
  96.  echo ++$i . "File(s) replace complete!<BR>";
  97.  }
  98.  
  99.  //测试代码
  100.  /*
  101. $fp = fopen(dirname(__FILE__) . '/visure.txt', "r+");
  102. $str = fread($fp, filesize(dirname(__FILE__) . "/visure.txt"));//$v));
  103. fclose($fp);
  104. $text = trim(preg_replace ($search, $replace, $str));
  105. echo $text;//++$i . "File(s) replace complete!<BR>";//
  106. */
  107.  ?>
引用通告地址: 点击获取引用地址
标签: 正则表达式 木马 框架
评论: 0 | 引用: 1 | 阅读: 406 | 打印 | 打包 | 转发
 加入网摘


淹死的鱼' Blog [2007-12-13 17:23 ]
标题: php写了一个清除网页木马的小程序
链接: http://www.sifish.com.cn/index.php?load=read&id=17
摘要: 最近有好几个站被挂马,删除比较麻烦。因为挂马的人经常变换样式。 但是还是有规律可寻,就想到用正则办法匹配。效果还是不错的。 主要原理是历遍目录(包括子目录),正则表达。