php实现批量删除挂马文件及批量替换页面内容完整实例


Posted in PHP onJuly 08, 2016

本文实例讲述了php实现批量删除挂马文件及批量替换页面内容的方法。分享给大家供大家参考,具体如下:

<?php
# functionality:    本程序可以扫描指定目录的所有文件,进行内容替换。可用于被批量挂马的删除以及批量更新页面某些内容。
#           本程序适用于对UTF-8的页面进行修改。
set_time_limit(3600); //脚本运行时间
?>
<?php
if($_POST['Submit']=='开始执行操作'){
 $dir = $_POST['searchpath'];
 $shortname = $_POST['shortname'];
 $isall = $_POST['isall'];
 $isreg = $_POST['isreg'];
if (!get_magic_quotes_gpc()) {
 $sstr = $_POST['sstr'];
 $rpstr = $_POST['rpstr'];
} else {
 $sstr = stripslashes($_POST['sstr']);
 $rpstr = stripslashes($_POST['rpstr']);
}
 //分析shortname
 $arrext = explode ("|",$shortname);
 if (!is_dir($dir)) return;
 if ($sstr == '') return;
 //把末尾的/去掉
 if(substr($dir,-1)=='/') $dir = substr($dir,0,strrpos($dir,"/"));
 //罗列所有目录
 if ($isall == 1){
  hx_dirtree($dir);
 }else{
  hx_dealdir($dir);
 }
exit();
}
function hx_dirtree($path="."){
 global $sstr,$rpstr,$isreg,$arrext;
 $d = dir($path);
 while(false !== ($v = $d->read())) {
  if($v == "." || $v == "..") continue;
  $file = $d->path."/".$v;
  if(is_dir($file)) {
   echo "<p>$v</p>"; hx_dirtree($file);
  }else{
    $ext=substr(strrchr($v,"."), 1);
    if( in_array($ext , $arrext) ){
     echo "<li>$file ";
     $body = file_get_contents($file);
     if($isreg == 1){
     $body2 = preg_replace($sstr, $rpstr, $body);
     }else{
     $body2 = str_replace($sstr, $rpstr, $body);
     }
     if($body != $body2 && $body2 != ''){
      tofile($file,$body2);
      echo ' OK';
     }else{
      echo ' NO';
     }
     echo '</li>';
    }
  }
 }
 $d->close();
}
function hx_dealdir($dir){
 global $sstr,$rpstr,$isreg,$arrext;
  if ($dh = opendir($dir)) {
  while (false !== ($file = readdir($dh))) {
   if(filetype($dir.'/'.$file)=='file'){
    $ext=substr(strrchr($file,"."), 1);
    if( in_array($ext , $arrext) ){
     echo "<li>$file ";
     $body = file_get_contents($dir.'/'.$file);
     if($isreg == 1){
     $body2 = preg_replace($sstr, $rpstr, $body);
     }else{
     $body2 = str_replace($sstr, $rpstr, $body);
     }
     if($body != $body2 && $body2 != ''){
      tofile($dir.'/'.$file,$body2);
      echo ' OK';
     }else{
      echo ' NO';
     }
     echo '</li>';
    }
   }
  }
  closedir($dh);
  }
}
//把生成文件的过程写出函数
function tofile($file_name,$file_content){
if (is_file ($file_name)){
 @unlink ($file_name);
}
 $handle = fopen ($file_name,"w");
 if (!is_writable ($file_name)){
  return false;
 }
 if (!fwrite ($handle,$file_content)){
  return false;
 }
 fclose ($handle); //关闭指针
 return $file_name;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>批量替换程序|木马批量删除</title>
<style type="text/css">
body{background:#FFFFFF;color:#000;font-size:12px;}
#top{text-align:center;}
h1,p,form{margin:0;padding:0;}
h1{font-size;14px;}
</style>
</head>
<body>
 <div id="top">
<h1>批量替换程序(UTF-8版)</h1>
<div>本程序可以扫描指定目录的所有文件,进行<strong>内容替换</strong>。可用于被批量挂马的删除以及批量更新页面某些内容。<br/>
在文件数量非常多的情况下,本操作比较占用服务器资源,请确脚本超时限制时间允许更改,否则可能无法完成操作。</div>
 </div>
<form action="<?=$_SERVER['SCRIPT_NAME']?>" name="form1" target="stafrm" method="post">
<table width="95%" border="0" align="center" cellpadding="3" cellspacing="1" bgcolor="#666666">
 <tr>
  <td width="10%" bgcolor="#FFFFFF"><strong> 起始根路径:</strong></td>
  <td width="90%" bgcolor="#FFFFFF"><input name="searchpath" type="text" id="searchpath" value="./test" size="20" />
   点表示当前目录,末尾不要加/ <input type="checkbox" name="isall" value="1" />包含此目录下所有目录</td>
 </tr>
 <tr>
  <td bgcolor="#FFFFFF"><strong> 文件扩展名:</strong></td>
  <td bgcolor="#FFFFFF"><input name="shortname" type="text" id="shortname" size="20" value="php|htm" />
   多个请用|隔开</td>
 </tr>
 <tr id="rpct">
  <td height="64" colspan="2" bgcolor="#FFFFFF"><table width="100%" border="0" cellspacing="1" cellpadding="1">
   <tr bgcolor="#EDFCE2">
    <td colspan="4"><strong>内容替换选项:</strong> <input type="checkbox" name="isreg" value="1" />使用正则表达式</td>
   </tr>
   <tr>
    <td colspan="4">替换内容类默认使用字符串替换,也可以使用正则表达式(需勾选)。"替换为"不填写的话,就表示删除"替换内容"。</td>
   </tr>
   <tr>
    <td width="10%"> 替换内容:</td>
    <td width="36%"><textarea name="sstr" id="sstr" style="width:90%;height:45px"></textarea></td>
    <td width="10%">替 换 为:</td>
    <td><textarea name="rpstr" id="rpstr" style="width:90%;height:45px"></textarea></td>
   </tr>
  </table></td>
 </tr>
 <tr>
  <td colspan="2" height="20" align="center" bgcolor="#E2F5BC"><input type="submit" name="Submit" value="开始执行操作" class="inputbut" /></td>
 </tr>
</table>
 </form>
<table width="95%" border="0" align="center" cellpadding="3" cellspacing="1" bgcolor="#666666">
 <tr bgcolor="#FFFFFF">
  <td id="mtd">
   <div id='mdv' style='width:100%;height:100;'>
    <iframe name="stafrm" frameborder="0" id="stafrm" width="100%" height="100%"></iframe>
   </div>
   <script type="text/javascript">
   document.all.mdv.style.pixelHeight = screen.height - 450;
   </script>
  </td>
 </tr>
</table>
</body>
</html>

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
不错的一篇面向对象的PHP开发模式(简写版)
Mar 15 PHP
PHP SEO优化之URL优化方法
Apr 21 PHP
php数组相加 array(“a”)+array(“b”)结果还是array(“a”)
Sep 19 PHP
php判断电脑访问、手机访问的例子
May 10 PHP
cakephp打印sql语句的方法
Feb 13 PHP
php实现购物车功能(上)
Jul 23 PHP
基于PHP技术开发客服工单系统
Jan 06 PHP
详解php魔术方法(Magic methods)的使用方法
Feb 14 PHP
php readfile()修改文件上传大小设置
Aug 11 PHP
PHP设计模式之模板方法模式定义与用法详解
Apr 02 PHP
laravel5使用freetds连接sql server的方法
Dec 07 PHP
PHP PDOStatement::closeCursor讲解
Jan 30 PHP
PHP线程的内存回收问题
Jul 08 #PHP
php实现xml与json之间的相互转换功能实例
Jul 07 #PHP
PHP登录验证码的实现与使用方法
Jul 07 #PHP
PHP常见的6个错误提示及解决方法
Jul 07 #PHP
php生成mysql的数据字典
Jul 07 #PHP
php自定义函数实现JS的escape的方法示例
Jul 07 #PHP
PHP使用mysql与mysqli连接Mysql数据库用法示例
Jul 07 #PHP
You might like
php统计文件大小,以GB、MB、KB、B输出
2011/05/29 PHP
PHP针对常规模板引擎中与CSS/JSON冲突的解决方法
2014/08/19 PHP
PHP保存带BOM文件的方法
2015/02/12 PHP
PHP+jQuery实现滚屏无刷新动态加载数据功能详解
2017/05/04 PHP
PHP扩展Swoole实现实时异步任务队列示例
2019/04/13 PHP
js 提交和设置表单的值
2008/12/19 Javascript
如何获取select下拉框的值(option没有及有value属性)
2013/11/08 Javascript
jQuery ui 利用 datepicker插件实现开始日期(minDate)和结束日期(maxDate)
2014/05/22 Javascript
轻松创建nodejs服务器(7):阻塞操作的实现
2014/12/18 NodeJs
jquery实现两个图片渐变切换效果的方法
2015/06/25 Javascript
JavaScript根据CSS的Media Queries来判断浏览设备的方法
2016/05/10 Javascript
你应该知道的几类npm依赖包管理详解
2017/10/06 Javascript
three.js实现3D影院的原理的代码分析
2017/12/18 Javascript
react-router browserHistory刷新页面404问题解决方法
2017/12/29 Javascript
AngularJS使用ui-route实现多层嵌套路由的示例
2018/01/10 Javascript
vue 微信扫码登录(自定义样式)
2020/01/06 Javascript
pip 错误unused-command-line-argument-hard-error-in-future解决办法
2014/06/01 Python
Python中decorator使用实例
2015/04/14 Python
PyQt5每天必学之工具提示功能
2018/04/19 Python
使用Python+wxpy 找出微信里把你删除的好友实例
2019/02/21 Python
Pandas之排序函数sort_values()的实现
2019/07/09 Python
python入门之基础语法学习笔记
2020/02/08 Python
Python递归实现打印多重列表代码
2020/02/27 Python
python相对企业语言优势在哪
2020/06/12 Python
Python使用Selenium模拟浏览器自动操作功能
2020/09/08 Python
Otticanet美国:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/03/10 全球购物
如果有两个类A,B,怎么样才能使A在发生一个事件的时候通知B
2016/03/12 面试题
入党自我评价优缺点
2014/01/25 职场文书
KTV的创业计划书范文
2014/02/02 职场文书
火灾现场处置方案
2014/05/28 职场文书
生日庆典策划方案
2014/06/02 职场文书
个人求职自荐信范文
2014/06/20 职场文书
活着观后感
2015/06/03 职场文书
红色故事汇观后感
2015/06/18 职场文书
法人代表证明书范本
2015/06/18 职场文书
win10忘记pin密码登录不了怎么办?win10忘记pin密码登不进去的解决方法
2022/07/07 数码科技