有時候人們往往會為了一個程序的啟動而頭痛,因為一些用戶不知道那些文件是如何啟動的。所以經(jīng)常會有沒用的應(yīng)用程序掛在系統(tǒng)上占用資源。有時候也會有人因為不知道如何啟動某個文件而頭痛。
Windows的自啟動有許多方式。除了一些常見的啟動方式之外,還有一些非常隱蔽的可用來啟動文件的方式。Windows的自啟動是Windows系統(tǒng)的一部分,對于普通用戶來說,了解這些信息也是非常必要的。
文章全部以系統(tǒng)默認的狀態(tài)為準。其中English代表英文操作系統(tǒng),Chinese代表中文操作系統(tǒng)。文中如沒加說明即為中文Windows 98操作系統(tǒng)。
一、Windows的自啟動目錄
1.默認路徑
|
這是最基本、最常用的Windows啟動方式,主要用于啟動一些應(yīng)用軟件的自啟動項目,如Office的快捷菜單。一般用戶希望啟動時所要啟動的文件也可以通過這里啟動,只需把所需文件或其快捷方式放入文件夾中即可。
2.對應(yīng)的注冊表位置
|
其中“%Directory%”為啟動文件夾位置。
在開始菜單的“啟動”文件夾是可更改的,如果用戶更改了啟動文件夾,則以上注冊表的鍵值均會改變?yōu)橄鄳?yīng)的名稱。
值得注意的是:開始菜單的“啟動”文件夾中的內(nèi)容雖然在默認狀態(tài)下可以被用戶查看。但通過改動還是可以達到相當隱蔽地啟動的目的。
首先,“啟動”文件夾中的快捷方式或其他文件的屬性可以改變?yōu)椤半[藏”。這樣可以達到系統(tǒng)不啟動被隱藏的文件,等到需要啟動時又可以通過更改回文件屬性而恢復(fù)啟動的作用。
其次,“啟動”文件夾只是一個普通的文件夾,由于系統(tǒng)監(jiān)視了這個文件夾,所以變得有些特殊,但文件夾有的一些功能,這個文件夾也是有的。比如“啟動”文件夾的名稱是可以更改的,并且“啟動”文件夾也可以設(shè)置屬性。如果把屬性設(shè)置為“隱藏”,則在系統(tǒng)中的“開始→程序”菜單中是看不到“啟動”文件夾的(即使在“文件夾選項”中已經(jīng)設(shè)定了“顯示所有文件”)。而系統(tǒng)還會啟動這個被隱藏的文件夾中的非隱藏文件。
敏感的人們也許已經(jīng)發(fā)現(xiàn)問題。舉一個例子:
如果想啟動A木馬的server端服務(wù)器,我們可以把原來的“啟動”菜單的名稱更改為“StartUp”(這里是隨便改的,注冊表相應(yīng)的鍵值也會自動更改。)之后再創(chuàng)建一個名為“啟動”的文件夾,把“StartUp”菜單中的文件全部復(fù)制(這里用復(fù)制,可以騙過用戶的檢查)到“啟動”菜單中,然后把A木馬的server程序放入“StartUp”文件夾中,最后把“StartUp”文件夾隱藏。大功告成!
從外表看來,用戶的“開始→啟動”目錄還在,而且要啟動的文件也在。但系統(tǒng)此時啟動的文件不是名為“啟動”的文件夾中的文件,而是名為“StartUp”的文件夾中的文件。由于“StartUp”文件夾被隱藏,從“開始→程序”中是無法看到真正的啟動菜單“StartUp”,所以達到隱蔽啟動的目的!
這個啟動方式雖然隱蔽,但通過msconfig命令,在打開的“系統(tǒng)配置”對話框中的“啟動”標簽中查看得到。
二、系統(tǒng)配置文件啟動
由于系統(tǒng)的配置文件對于大多數(shù)的用戶來說都是相當陌生的,這就造成了這些啟動方法相對來說都是相當隱蔽的,所以這里提到的一些方法常常會被用于做一些破壞性的操作,請讀者注意。
1.Win.ini啟動
啟動位置(file.exe為要啟動的文件名稱):
|
2.System.ini啟動
啟動位置(file.exe為要啟動的文件名稱):
默認為:
|
可啟動文件后為:
|
上述的兩種啟動方式往往會被木馬或一些惡作劇程序(如,妖之吻)利用而導致系統(tǒng)的不正常。由于一般用戶很少會關(guān)心這兩個文件,甚至有的用戶根本不知道這些文件是做什么用的,所以隱蔽性很好。但用戶可以使用msconfig命令,在打開的“系統(tǒng)配置”對話框中的“啟動”標簽中查看得到。
注意:與Win.ini文件不同的是,System.ini的啟動只能啟動一個指定文件,不要把Shell=Explorer.exe file.exe換為Shell=file.exe,這樣會使Windows癱瘓!
3.Wininit.ini啟動
Wininit.ini文件也許很多人不知道,一般的操作中用戶也很少能直接和這個文件接觸。但如果你編寫過卸載程序的話,也許你會知道這個文件。
Wininit即為Windows Setup Initialization Utility。翻譯成中文就是Windows安裝初始化工具。這么說也許不明白,但如果看到如下提示信息:
|
大家也許就都知道了!這個就是Wininit.ini在起作用!
由于在Windows下,許多的可執(zhí)行文件和驅(qū)動文件是被執(zhí)行到內(nèi)存中都是受到系統(tǒng)保護的。所以在Windows的正常狀態(tài)下更改這些文件就成了問題,因此出現(xiàn)了Wininit.ini這個文件來幫助系統(tǒng)做這件事情。它會在系統(tǒng)裝載Windows之前讓系統(tǒng)執(zhí)行一些命令,包括復(fù)制、刪除、重命名等,以完成更新文件的目的。但在一般情況下我們在C:\Windows目錄下是找不到這個文件的,原因就是Wininit.ini在每次被系統(tǒng)執(zhí)行完它其中的命令時就會被系統(tǒng)自動刪除,直到再次出現(xiàn)新的Wininit.ini文件之后再被刪除。其文件格式為:
|
上面的語句行中,file1=file2的意思是把file2文件復(fù)制為文件名為file1的文件,相當于覆蓋file1文件,之后再把原來的file2文件刪除。
這樣啟動時,Windows就實現(xiàn)了用file2更新file1的目的;如果file1不存在,實際結(jié)果是將file2復(fù)制并改名為file1;如果要刪除文件,則可使用如下命令:
|
這也就是說把file2變?yōu)榭眨磩h除的意思。
以上文件名都必須包含完整路徑。
注意:由于Wininit.ini處理的文件是在Windows啟動以前處理的,所以不支持長文件名;以上的文件復(fù)制、刪除、重命名等均是不提示用戶的情況下執(zhí)行的。有些病毒也會利用這個文件對系統(tǒng)進行破壞,所以用戶如果發(fā)現(xiàn)系統(tǒng)無故出現(xiàn):
|
那么也許系統(tǒng)就有問題了。
4.Winstart.bat啟動
這是一個系統(tǒng)自啟動的批處理文件,主要作用是處理一些需要復(fù)制、刪除的任務(wù)。比如有些軟件會在安裝或卸載完之后要求重新啟動,就可以利用這個批處理復(fù)制和刪除一些文件來達到完成任務(wù)的目的。如:
|
這里是執(zhí)行Proc.bat文件的命令;
|
這里是去除任何在屏幕上的輸出。
5.Autoexec.bat啟動
Autoexec.bat應(yīng)該是用戶再熟悉不過的系統(tǒng)文件了。每次重新啟動系統(tǒng)時在DOS下啟動。惡意的程序往往會利用這個文件做一些輔助的措施。
不過,在Autoexec.bat文件中會包含有惡意代碼。如format c: /y等;由于BAT惡意程序的存在,這個機會大大地增加了。比如最近很流行的SirCam蠕蟲也就是利用了Autoexec.bat文件。
三、注冊表啟動
1.常規(guī)啟動
在下面的注冊表項中,\%path%\表示任意路徑,file.exe表示需要運行的程序。
|
注意:
(1)解除這里相應(yīng)的自啟動項只需刪除該鍵值即可,但注意不要刪除如SystemTray、ScanRegistry等這樣的系統(tǒng)鍵值。
(2)如果只想不啟動而保留鍵值,只需在該鍵值加入rem即可。如:“rem C:\Windows\a.exe”。
(3)在注冊表中的自啟動項中沒有這兩項:
|
關(guān)于:
|
有特殊的語法。例如,運行Notepad.exe:
|
語法為:
|
上面的例子中,“xxx1,xxxx”是一個動態(tài)鏈接庫(DLL)或.OCX文件名(如My.ocx或My.dll);“0001,000x”是部分名字。可以是數(shù)字和文字;“entry1,entryX”是指向一個要運行的程序文件的注冊表串值。
下表給出鍵值的說明,F(xiàn)lags是一個定位在RunOnceEx鍵用來激活/禁止的DWORD值,具體如下:
2.特殊啟動
在注冊表中除了上述的普通啟動方式以外,還可以利用一些特殊的方式達到啟動的目的:
|
其實從注冊表的路徑上也許就隱約可以看出,這些都是一些經(jīng)常被執(zhí)行的可執(zhí)行文件的鍵值。往往有些木馬是可以更改這些鍵值從而達到加載的目的:
如果我們把“"%1" %*”修改為“file.exe"%1" %*”,則文件file.exe就會在每次執(zhí)行某一個類型的文件(需要看修改的是哪一個文件類型)的時候被執(zhí)行!
當然,可以被更改的不一定只是可執(zhí)行文件,比如冰河就利用了TXT文件的鍵值:
|
四、其他啟動方式
1.C:\Explorer.exe啟動方式
這是一種特殊的啟動方式,很少有人知道。
在Windows 9x下,由于System.ini只指定了Windows的外殼文件Explorer.exe的名稱,而并沒有指定絕對路徑,所以Windows 9x會搜索Explorer.exe文件。搜索順序如下:
首先搜索當前目錄;如果沒有搜索到Explorer.exe則系統(tǒng)會獲取[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment\Path]的信息獲得相對路徑;如果還是沒有文件,系統(tǒng)則會獲取[HKEY_CURRENT_USER\Environment\Path]的信息并獲得相對路徑。
其中,[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\Path]和[HKEY_CURRENT_USER\Environment\Path]所保存的相對路徑的鍵值為:“%SystemRoot%\System32;%SystemRoot%”和空。
所以,由于當系統(tǒng)啟動時,“當前目錄”肯定是“%SystemDrive%\”(系統(tǒng)驅(qū)動器),這樣系統(tǒng)搜索Explorer.exe的順序應(yīng)該是:
|
此時,如果把一個名為Explorer.exe的文件放到系統(tǒng)根目錄下,這樣在每次啟動時,系統(tǒng)就會自動先啟動根目錄下的Explorer.exe而不啟動Windows目錄下的Explorer.exe了。
在Windows NT系列下,Windows NT/2000更加注意了Explorer.exe的文件名放置的位置,把系統(tǒng)啟動時要使用的外殼文件Explorer.exe的名稱放到了:[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon\Shell]。
作為默認這個位置是不存在的,默認為是Explorer.exe。
注意:一定要確定根目錄下的Explorer.exe要能啟動Windows目錄下的Explorer.exe,否則會導致Windows無法啟動!現(xiàn)在流行的病毒CodeRed就會在C:\和D:\目錄下放置兩個約8KB的Explorer.exe的文件!
2.屏幕保護啟動方式
Windows的屏幕保護程序是一個.scr文件。這是一個PE格式的可執(zhí)行文件。如果把屏幕保護程序.scr更名為.exe的文件,則該程序仍然可以正常啟動。類似的.exe文件更名為.scr文件也是一樣可以被運行!
.scr文件默認存在于C:\Windows目錄中,它的名字就是在“顯示”屬性中的“屏幕保護程序”中的名稱。在C:\Windows目錄下的所有.scr文件都會被Windows的“屏幕保護程序”顯示,而文件路徑本身保存在System.ini中的“Scrnsave.exe =”的這條中。
有意思的是在“Scrnsave.exe =”這條中,其規(guī)定的路徑也包含了目錄名稱。即如果我們想安裝一個.scr文件時,其安裝路徑為D:\SCR\1.scr,而D:\SCR\這個目錄中還有2.scr,則在這個目錄中的所有.scr(1.scr,2.scr)文件都會被顯示在“屏幕保護程序”設(shè)置中。如果屏幕保護程序設(shè)為“(無)”,則“Scrnsave.exe =”這條不存在。但如果“Scrnsave.exe=”這條所指的文件或目錄是錯誤的,則在“屏幕保護程序設(shè)置”中仍然會顯示“(無)”。
屏幕保護程序的啟動時間保存在注冊表中的這個位置上:
|
時間單位為秒,不過雖然是秒,可啟動時間卻為分,即從60秒開始記錄,如果記錄時間小于60秒,則自動定為1分鐘。
屏幕保護是否設(shè)置密碼的鍵值為:
|
有密碼則值為1,沒有密碼則值為0。
由此可見,如果有人把自己所作的.exe程序更名為.scr的程序,并使程序能夠在System.ini中添加“Scrnsave.exe=/%Path%/file.scr”(/%Path%/file.scr為所需要設(shè)置的文件的路徑和文件名,如C:\Program files\trojan.scr),修改注冊表中的HKEY_USERS\.DEFAULT\Control Panel\desktop\ScreenSaveTimeOut,定時間為60,則系統(tǒng)只要閑置一分鐘該文件就會被啟動!
另外一個簡單的破壞方式就是可以隨機產(chǎn)生屏幕保護密碼并寫入相應(yīng)文件的相應(yīng)位置,定時間為1分鐘,則系統(tǒng)只要閑置一分鐘則會被被鎖!
注意:由于“Scrnsave.exe=”還會定義.scr文件的路徑,所以最好不要把要啟動的文件放置在.scr文件較多的一些目錄,否則容易引起懷疑。(Windows目錄除外)
五、自動啟動相關(guān)
1.代啟動
這種啟動方式其實只是一個方法的問題。即可以用啟動一個正常文件來啟動另一個文件,SubSeven就用過啟動Windos.exe從而啟動SubSeven的Sever文件的方法。
2.Start啟動
在“運行”中或“MS-DOS”方式中輸入“start”(回車),則會顯示:
|
如果要啟動的程序配合這個命令,則可以更加隱蔽,如:
|
3.控制面板啟動
這是利用控制面板程序可以被類似DLL執(zhí)行,從而達到啟動目的。
在控制面板中,.cpl文件是控制面板的原文件。默認的這些文件都會被放置在/%Windows%/System/目錄下的,如desk.cpl是桌面屬性、inetcpl.cpl是Internet選項之類。但這些.cpl文件全都是PE格式文件,也就是說如果用戶把一個可執(zhí)行的類似DLL的.cpl文件放入%\Windows%\System\中,則在控制面板中可看到其圖標,并可執(zhí)行!
由于.cpl文件的特殊性,需要使用rundll32.exe來啟動該文件。Rundll32.exe是Windows用來調(diào)用動態(tài)連接庫函數(shù)時所使用的文件,在運行中輸入:
|
其中shell32.dll為被調(diào)用的DLL文件,意思為調(diào)用shell32.dll中的Control_RunDLL來打開desk.cpl文件;/%path%/為.cpl文件的路徑,默認為C:\Windows\System;最后的X為desk.cpl文件的頁數(shù):從0開始,0為第一頁(如顯示屬性的“背景”),1為第二頁(如桌面屬性的“屏幕保護程序”),依此類推。
但如果照上面的方法做,則該文件會在控制面板中被顯示。有兩種方法可以不讓其顯示:
不要把自己的.cpl文件放在C:\Windows\System中,因為默認的情況下Windows會加載的所有.cpl文件。如果想讓其顯示則打開C:\Windows\下的Control.ini文件,在[MMCPL]中寫入類似:file.cpl=D:\path\file.cpl的命令,從而達到顯示的目的。
當你看到Control.ini文件的時候一定可以看到在[MMCPL]上面的[don't load]。是的,如果把你的文件以“file.cpl=no”的格式寫入到這里面,那么文件就不被加載了。反之恢復(fù)。
4.其他
注冊表中
HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced的“HideFileExt”這個鍵值是確定Windows是不是顯示擴展名的值,如果其值為1就隱藏擴展名,為0則不隱藏。
EXE文件中
如SirCam蠕蟲一樣,*.EXE文件的擴展名可以改名稱為.BAT、.COM、.PIF、.SCR等,并且運行效果一樣,反過來不一定。但.EXE文件并不能更名為.LNK文件,這也許也是SirCam的一個BUG。
責任編輯 趙毅 zhaoyi#51cto.com TEL:(010)68476636-8001


