1. 程式人生 > >木馬開機啟動的六種方法

木馬開機啟動的六種方法

  木馬是隨計算機或Windows的啟動而啟動並掌握一定的控制權的,其啟動方式可謂多種多樣,通過登錄檔啟動、通過System.ini啟動、通過某些特定程式啟動等,真是防不勝防。其實只要能夠遏制住不讓它啟動,木馬就沒什麼用了,這裡就簡單說說木馬的啟動方式,知己知彼百戰不殆嘛。

  一、通過"開始\程式\啟動"

  隱蔽性:2星

  應用程度:較低

  這也是一種很常見的方式,很多正常的程式都用它,大家常用的QQ就是用這種方式實現自啟動的,但木馬卻很少用它。因為啟動組的每人會會出現在“系統配置實用程式”(msconfig.exe,以下簡稱msconfig)中。事實上,出現在“開始”選單的“程式\啟動”中足以引起菜鳥的注意,所以,相信不會有木馬用這種啟動方式。

  二、通過Win.ini檔案

  隱蔽性:3星

  應用程度:較低

  同啟動組一樣,這也是從Windows3.2開始就可以使用的方法,是從Win16遺傳到Win32的。在Windows3.2中,Win.ini就相當於Windows9x中的登錄檔,在該檔案中的[Windows]域中的load和run項會在Windows啟動時執行,這兩個專案也會出現在msconfig中。而且,在Windows98安裝完成後這兩項就會被Windows的程式使用了,也不很適合木馬使用。

  三、通過登錄檔啟動

  1、通過HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run,

  HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run和

  HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices

  隱蔽性:3.5星

  應用程度:極高

  應用案例:BO2000,GOP,NetSpy,IEthief,冰河……

  這是很多Windows程式都採用的方法,也是木馬最常用的。使用非常方便,但也容易被人發現,由於其應用太廣,所以幾乎提到木馬,就會讓人想到這幾個登錄檔中的主鍵,通常木馬會使用最後一個。使用Windows自帶的程式:msconfig或登錄檔編輯器(regedit.exe,以下簡稱regedit)都可以將它輕易的刪除,所以這種方法並不十分可靠。但可以在木馬程式中加一個時間控制元件,以便實時監視登錄檔中自身的啟動鍵值是否存在,一旦發現被刪除,則立即重新寫入,以保證下次Windows啟動時自己能被執行。這樣木馬程式和登錄檔中的啟動鍵值之間形成了一種互相保護的狀態。木馬程式未中止,啟動鍵值就無法刪除(手工刪除後,木馬程式又自動新增上了),相反的,不刪除啟動鍵值,下次啟動Windows還會啟動木馬。怎麼辦呢?其實破解它並不難,即使在沒有任何工具軟體的情況下也能輕易解除這種互相保護。

  破解方法:首先,以安全模式啟動Windows,這時,Windows不會載入登錄檔中的專案,因此木馬不會被啟動,相互保護的狀況也就不攻自破了;然後,你就可以刪除登錄檔中的鍵值和相應的木馬程式了。

  2、通過HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce,

  HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce和

  HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce

  隱蔽性:4星

  應用程度:較低

  應用案例:Happy99月

  這種方法好像用的人不是很多,但隱蔽性比上一種方法好,它的內容不會出現在msconfig中。在這個鍵值下的專案和上一種相似,會在Windows啟動時啟動,但Windows啟動後,該鍵值下的專案會被清空,因而不易被發現,但是隻能啟動一次,木馬如何能發揮效果呢?

  其實很簡單,不是隻能啟動一次嗎?那木馬啟動成功後再在這裡新增一次不就行了嗎?在Delphi中這不過3、5行程式。雖說這些專案不會出現在msconfig中,但是在Regedit中卻可以直接將它刪除,那麼木馬也就從此失效了。

  還有一種方法,不是在啟動的時候加而是在退出Windows的時候加,這要求木馬程式本身要截獲WIndows的訊息,當發現關閉Windows訊息時,暫停關閉過程,添加註冊表專案,然後才開始關閉Windows,這樣用Regedit也找不到它的蹤跡了。這種方法也有個缺點,就是一旦Windows異常中止(對於Windows9x這是經常的),木馬也就失效了。

  破解他們的方法也可以用安全模式。

  另外使用這三個鍵值並不完全一樣,通常木馬會選擇第一個,因為在第二個鍵值下的專案會在Windows啟動完成前執行,並等待程式結束會才繼續啟動Windows。

四、通過Autoexec.bat檔案,或winstart.bat,config.sys檔案

  隱蔽性:3.5星

  應用程度:較低

  其實這種方法並不適合木馬使用,因為該檔案會在Windows啟動前執行,這時系統處於DOS環境,只能執行16位應用程式,Windows下的32位程式是不能執行的。因此也就失去了木馬的意義。不過,這並不是說它不能用於啟動木馬。可以想象,SoftIce for Win98(功能強大的程式除錯工具,被黑客奉為至寶,常用於破解應用程式)也是先要在Autoexec.bat檔案中執行然後才能在Windows中呼叫出視窗,進行除錯的,既然如此,誰能保證木馬不會這樣啟動呢?到目前為止,我還沒見過這樣啟動的木馬,我想能寫這樣木馬的人一定是高手中的高手了。

  另外,這兩個BAT檔案常被用於破壞,它們會在這個檔案中加入類似"Deltree C:\*.*"和"Format C:/u"的行,這樣,在你啟動計算機後還未啟動Windows,你的C盤已然空空如也。

  五、通過System.ini檔案

  隱蔽性:5星

  應用程度:一般

  事實上,System.ini檔案並沒有給使用者可用的啟動專案,然而通過它啟動卻是非常好用的。在System.ini檔案的[Boot]域中的Shell項的值正常情況下是"Explorer.exe",這是Windows的外殼程式,換一個程式就可以徹底改變Windows的面貌(如改為Progman.exe就可以讓Win9x變成Windows3.2)。我們可以在"Explorer.exe"後加上木馬程式的路徑,這樣Windows啟動後木馬也就隨之啟動,而且即使是安全模式啟動也不會跳過這一項,這樣木馬也就可以保證永遠隨Windows啟動了,名噪一時的尼姆達病毒就是用的這種方法。這時,如果木馬程式也具有自動檢測新增Shell項的功能的話,那簡直是天衣無縫的絕配,我想除了使用檢視程序的工具中止木馬,再修改Shell項和刪除木馬檔案外是沒有破解之法了。但這種方式也有個先天的不足,因為只有Shell這一項嘛,如果有兩個木馬都使用這種方式實現自啟動,那麼後來的木馬可能會使前一個無法啟動,呵呵以毒攻毒啊。

  六、通過某特定程式或檔案啟動

  1、寄生於特定程式之中

  隱蔽性:5星

  應用程度:一般

  即木馬和正常程式捆綁,有點類似於病毒,程式在執行時,木馬程式先獲得控制權或另開一個執行緒以監視使用者操作,擷取密碼等,這類木馬編寫的難度較大,需要了解PE檔案結構和Windows的底層知識(直接使用捆綁程式除外)。

  2、將特定的程式改名

  隱蔽性:5星

  應用程度:常見

  這種方式常見於針對QQ的木馬,例如將QQ的啟動檔案QQ2000b.exe,改為QQ2000b.ico.exe(Windows預設是不顯示副檔名的,因此它會被顯示為QQ2000b.ico,而使用者會認為它是一個圖示),再將木馬程式改為QQ2000b.exe,此後,使用者執行QQ,實際是運行了QQ木馬,再由QQ木馬去啟動真正的QQ,這種方式實現起來要比上一種簡單的多。

  3、檔案關聯

  隱蔽性:5星

  應用程度:常見

  通常木馬程式會將自己和TXT檔案或EXE檔案關聯,這樣當你開啟一個文字檔案或執行一個程式時,木馬也就神不知鬼不覺的啟動了。

  這類通過特定程式或檔案啟動的木馬,發現比較困難,但查殺並不難。一般地,只要刪除相應的檔案和登錄檔鍵值即可。


一些常見的開機啟動的地方,差不多都被殺軟“盯”著了,希望朋友們儘量發覺一些不常用的方法,以達到驚人的目的!呵呵!

=================================================================================================

很多監控軟體要求軟體能夠在系統重新啟動後不用使用者去點選圖示啟動專案,而是直接能夠啟動執行,方法是寫登錄檔Software\\Microsoft\\Windows\\CurrentVersion\\Run 。

參考程式可以見下:(查詢程式目錄的執行檔案,存在則進行添加註冊表操作)

//實用程式碼一

int C***Dlg::CreateRun(void)
{

//新增以下程式碼
HKEY   RegKey;   
CString   sPath;   
GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);   
sPath.ReleaseBuffer();   
int   nPos;   
nPos=sPath.ReverseFind('\\');   
sPath=sPath.Left(nPos);   
CString   lpszFile=sPath+"這裡加上你要查詢的執行檔名稱   
CFileFind   fFind;   
BOOL   bSuccess;   
bSuccess=fFind.FindFile(lpszFile);   
fFind.Close();   
if(bSuccess)   
{   
CString   fullName;   
fullName=lpszFile;   
RegKey=NULL;   
RegOpenKey(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",&RegKey);   
RegSetValueEx(RegKey,"getip",0,REG_SZ,(const   unsigned   char*)(LPCTSTR)fullName,fullName.GetLength());//這裡加上你需要在登錄檔中註冊的內容   
this->UpdateData(FALSE);   
}   
else   
{   
//theApp.SetMainSkin();   
::AfxMessageBox("沒找到執行程式,自動執行失敗");   
exit(0);   
}   
return 0;
}

//把上面的getip(共2處)替換成自己想啟動程式的名字。

================================================

實用程式碼二:

//寫入登錄檔,開機自啟動 
HKEY hKey; 
//找到系統的啟動項 
LPCTSTR lpRun = "Software\\Microsoft\\Windows\\CurrentVersion\\Run"; 
//開啟啟動項Key 
long lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpRun, 0, KEY_WRITE, &hKey); 
if(lRet == ERROR_SUCCESS) 

char pFileName[MAX_PATH] = {0}; 
//得到程式自身的全路徑 
DWORD dwRet = GetModuleFileName(NULL, pFileName, MAX_PATH); 
//新增一個子Key,並設定值 // 下面的"getip"是應用程式名字(不加字尾.exe)
lRet = RegSetValueEx(hKey, "getip", 0, REG_SZ, (BYTE *)pFileName, dwRet);

    //關閉登錄檔 
RegCloseKey(hKey); 
if(lRet != ERROR_SUCCESS) 

AfxMessageBox("系統引數錯誤,不能隨系統啟動"); 

}


一、當前使用者專有的啟動資料夾

     這是許多應用軟體自動啟動的常用位置,Windows自動啟動放入該資料夾的所有快捷方式。使用者啟動資料夾一般在:\Documents and Settings\<使用者名稱字>\「開始」選單\程式\啟動,其中“<使用者名稱字>”是當前登入的使用者帳戶名稱。

     
二、對所有使用者有效的啟動資料夾

     這是尋找自動啟動程式的第二個重要位置,不管使用者用什麼身份登入系統,放入該資料夾的快捷方式總是自動啟動——這是它與使用者專有的啟動資料夾的區別所在。該資料夾一般在:\Documents and Settings\All Users\「開始」選單\程式\啟動。

     
三、Load註冊鍵

     介紹該註冊鍵的資料不多,實際上它也能夠自動啟動程式。位置:HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows\load。

     
四、Userinit註冊鍵

     位置:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon\Userinit。這裡也能夠使系統啟動時自動初始化程式。通常該註冊鍵下面有一個userinit.exe,如圖,但這個鍵允許指定用逗號分隔的多個程式,例如“userinit.exe,OSA.exe”(不含引號)。

    
五、Explorer\Run註冊鍵

     和load、Userinit不同,Explorer\Run鍵在HKEY_CURRENT_USER和HKEY_LOCAL_MACHINE下都有,具體位置是:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run,和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run。

     
六、RunServicesOnce註冊鍵

     RunServicesOnce註冊鍵用來啟動服務程式,啟動時間在使用者登入之前,而且先於其他通過註冊鍵啟動的程式。RunServicesOnce註冊鍵的位置是:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce,和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServicesOnce。

     
七、RunServices註冊鍵

     RunServices註冊鍵指定的程式緊接RunServicesOnce指定的程式之後執行,但兩者都在使用者登入之前。RunServices的位置是:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices,和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices。

     
八、RunOnce\Setup註冊鍵

     RunOnce\Setup指定了使用者登入之後執行的程式,它的位置是:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce\Setup,和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce\Setup。

     
九、RunOnce註冊鍵

     安裝程式通常用RunOnce鍵自動執行程式,它的位置在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce和HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce。HKEY_LOCAL_MACHINE下面的RunOnce鍵會在使用者登入之後立即執行程式,執行時機在其他Run鍵指定的程式之前。HKEY_CURRENT_USER下面的RunOnce鍵在作業系統處理其他Run鍵以及“啟動”資料夾的內容之後執行。如果是XP,你還需要檢查一下HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx。

     
十、Run註冊鍵

     Run是自動執行程式最常用的註冊鍵,位置在:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run,和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run。HKEY_CURRENT_USER下面的Run鍵緊接HKEY_LOCAL_MACHINE下面的Run鍵執行,但兩者都在處理“啟動”資料夾之前。