c# 扫描可疑文件(找到木马)(简)转


using System;
using System.IO;
using System.Text.RegularExpressions;
using System.Threading;
using System.Windows.Forms;
using System.Net;
 
namespace TrojanScanning
{
     public partial class Form1 : Form
     {
         public Form1()
         {
             InitializeComponent();
         }
         delegate void SetTextCallback( string text);
         delegate void SetTextCallback2( bool b);
         delegate void SetTextCallback3(ListViewItem item);
         private string fname, code;
         private Thread thr;
         private string [] sArray;
 
         private void button1_Click( object sender, EventArgs e)
         {
             if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
             {
                 scanpath.Text = folderBrowserDialog1.SelectedPath;
             }
         }
 
         private void startbtn_Click( object sender, EventArgs e)
         {
             list.Items.Clear();
             fname = scanpath.Text;
             thr = new Thread( new ThreadStart(scan));
             thr.IsBackground = true ;
             thr.Start();
         }
 
         private void scan(){
             FileSystemInfo s = GetFileSystemInfo(fname);
             if (s != null ) { scanbtn( false ); ListFiles(s); scantext( "扫描完成" ); scanbtn( true ); } else { MessageBox.Show( "请先选择要扫描的目录" ); }
         }
 
         public FileSystemInfo GetFileSystemInfo( string path){
             if (File.Exists(path))
                 return new FileInfo(path);
             else if (Directory.Exists(path))
                 return new DirectoryInfo(path);
             else
                 return null ;
         }
 
 
         private void ListFiles(FileSystemInfo info){
             if (info.Exists){
                 DirectoryInfo dir = info as DirectoryInfo;
                 if (dir == null ) return ;
                 try {
                     FileSystemInfo[] files = dir.GetFileSystemInfos();
                     for ( int i = 0; i < files.Length; i++){
                         FileInfo file = files[i] as FileInfo;
                         if (file != null && (file.Extension.ToLower() == ".asp" || file.Extension.ToLower() == ".php" || file.Extension.ToLower() == ".aspx" || file.Extension.ToLower() == ".master" ))
                         {
                             scantext( "扫描 " + file.FullName);
                             chkfile(file.FullName,file.Length);
                         } else {
                             ListFiles(files[i]);
                         }
                     }
                 }
                 catch {}
             }
 
         }
         private void chkfile( string filepath, long filesize)
         {
             try {
                 if (IsFileInUse(filepath)) { System.Threading.Thread.Sleep(2000); chkfile(filepath,filesize); }
                 StreamReader sr = new StreamReader(filepath);
                 string content = sr.ReadToEnd();
                 sr.Close();
                 string chkr=chkcontent(content);
                 if (chkr!= "" ){
                     ListViewItem item = new ListViewItem( "可疑" );
                     item.SubItems.Add(File.GetLastAccessTime(filepath).ToString());
                     item.SubItems.Add(chkr);
                     item.SubItems.Add(filepath);
                     item.SubItems.Add((filesize/1024).ToString() + " kb" );
                     addtiem(item);
                 }
             }
             catch { }
         }
 
         private string downurl( string url)
         {
             WebClient client = new WebClient();
             string result = client.DownloadString(url);
             return result;
         }
         private void addtiem(ListViewItem item)
         {
             if ( this .list.InvokeRequired){
                 SetTextCallback3 d = new SetTextCallback3(addtiem);
                 this .Invoke(d, new object [] { item });
             } else {
                 this .list.Items.Add(item);
             }
         }
         private void scantext( string text)
         {
             if ( this .scanstate.InvokeRequired)
             {
                 SetTextCallback d = new SetTextCallback(scantext);
                 this .Invoke(d, new object [] { text });
             } else {
                 this .scanstate.Text=text;
             }
         }
         private void scanbtn( bool b){
             if ( this .startbtn.InvokeRequired){
                 SetTextCallback2 d = new SetTextCallback2(scanbtn);
                 this .Invoke(d, new object [] { b });
             } else {
                 this .startbtn.Enabled = b;
                 this .scanpath.Enabled = b;
                 this .button1.Enabled = b;
             }
         }
         private string chkcontent( string content){
             string returnval = "" ;
             content = content.ToLower();
             foreach ( string i in sArray)
             {
                 if (content.IndexOf(i)> -1){ returnval+=i+ "," ; }
             }
             if (returnval != "" ) { returnval=returnval.Substring(0, returnval.Length - 1); }
             return returnval;
         }
 
         bool IsFileInUse( string fileName)
         {
             bool inUse = true ;
             if (File.Exists(fileName))
             {
                 FileStream fs = null ;
                 try { fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.None); inUse = false ; }
                 catch { }
                 finally { if (fs != null )fs.Close(); }
                 return inUse;
             }
             else { return false ; }
         }
         private void Form1_Load( object sender, EventArgs e)
         {
             try {
                 code = downurl( "http://www.cqeh.com/txt/trojan.txt" );
                 sArray = code.ToLower().Split( '|' );
             }
             catch (Exception ex)
             {
                 MessageBox.Show( "错误:" + ex.Message, "无法启动程序!" , MessageBoxButtons.OK); Application.Exit();
             }
         }
 
         private void list_DoubleClick( object sender, EventArgs e)
         {
             System.Diagnostics.Process.Start( "NOTEPAD.EXE" , list.SelectedItems[0].SubItems[3].Text);
         }
 
     }
}
源代码包下载
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值