
今天的課程打算把所有啟動位置講完,以及一些特殊的啟動方式,算是比較高級了,學完本課,與反病毒相關的基礎也就差不多了,接下來的課程重在實踐了,手工殺毒,日志分析等.
一,組件關聯啟動
上次講到了勾子掛接啟動ShellExecuteHooks,這次來講講組件關聯啟動,注冊表路徑:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ShellServiceObjectDelayLoad
名稱任意,值為一CLSID,該CLSID是指向HKEY_CLASSES_ROOT\CLSID下面同名的對象(組件類)的,在InProcServer32的右邊可以看到關聯的文件名(通常是DLL文件).系統啟動時explorer.exe將自動加載這里的目標組件.這就是某些病毒將自己注入到explorer.exe的辦法,多見于一些流氓軟件.用了很多清理軟件,但還是會彈出廣告等,這時就要檢查這個位置了,清理方法ShellExecuteHooks是一樣的,最后不要忘了刪除關聯的文件.
二,結束Winlogon.exe進程
以前我們在講進程時曾經講到過Winlogon.exe進程,它管理windows的登陸注銷等,如果這個進程被結束,系統將不能正常軟關機.也許你會說這個進程根本無法結束,或一結束就藍屏死機等.用windows任務管理器當然是不行的,我用了冰刃(IceSword)來結束它,不要直接試圖去結束這個進程,不然你會死得很慘,結束這個進程是需要技巧的,在此感謝菜新同學(cxwr,雷特反病毒小組成員之一)的指點,方法如下:
首先打開冰刃,點左邊的進程.我用的冰刃是花花(FlowerCode)修改版的.(見附件)
冰刃的功能是十分強大的,看一下程序名稱這一列,直接顯示出了進程所對應的文件路徑,其中兩個進程的程序名稱是特殊的,顯示為NT OS Kernel,意為NT操作系統內核.
正式開始前請退出你的安全防護軟件,以免引起藍屏.
先結束所有非系統進程,由于冰刃不顯示進程所屬用戶名,大家可以打開windows任務管理器對照,你可以用任務管理器來結束進程,也可以用冰刃來結束進程,用冰刃結束進程的方法為選要要結束的進程,右鍵選擇結束進程即可.接著結束svchost.exe,services.exe等進程,當進程只剩下圖中所示的幾個時,就要注意了,一不小心就會死得很慘的.
現在除了任務管理器和冰刃外,還有五個進程,其中最后兩個是系統內核進程,是不能被結束的,現在還在剩三個了,按順序,必須先結束smss.exe,現在可以放心地結束Winlogon.exe了,好了,我們的目的也達到了.(如果你把任務管理器和冰刃關的話,系統中就只剩下三個進程了.).不過此時系統也做不了什么了,不能啟動新的進程.(在結束Winlogon.exe前你仍然可以創建新進程,并恢復至正常狀態,這需要你對服務非常地了解).如果此時你再結束csrss.exe的話,結果會藍屏,這個進程是管理進程調度,物理內存與虛擬內存的使用調節等.現在只能按電源鍵關機了.
正由于Winlogon.exe這個進程的特殊性及不容易被結束等特性,使得病毒DLL千方百計地注入這個進程,使得一般用戶根本無法處理.在冰刃中選擇這個進程,右鍵,模塊信息,這里列出了所有加載的模塊文件名,如果有病毒模塊,可以選中它后點右邊的卸徐,如果無法卸徐,可以點強制解除,但可能會引起winlogon.exe進程崩潰而導致藍屏.
三,Winlogon事件通知啟動
當系統開始啟動時,這個進程是比較早運行的,如果有事件通知Winlogon.exe,那么Winlogon.exe就是按接到的通知來處理事件,比如啟動一個DLL等.即使在安全模式下,該DLL也會被加載,它的啟動比服務更早.如果這個DLL是病毒文件的話...
下面來說說winlogon是如何接收事件通知的.
注冊表路徑:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify
它下面的每個項都包含一個處理winlogon在切換狀態時發出事件的DLL,winlogon.exe會在啟動時加載已經注冊的DLL,并且會在系統狀態切換時調用注冊DLL的事件處理函數.
這里說的狀態切換包括登陸,注銷,關機,鎖定桌面,啟動屏保等.
項名是任意的,我們來分析它的鍵,及值.
DLLName設置發出事件的DLL文件名.
Asynchronous設置是否異步處理winlogon事件,默認值為0,表示同步處理.若設置為1,則為異步處理,此時winlogon.exe將啟動一個新線程來處理相應事件.
Impersonate是否以登陸用戶的權限來處理事件,默認為0.
Lock鎖定桌面時發生的事.它的值為上面DLL文件中的導出函數,下面的也是同樣道理.
Logoff注銷事件
Logon登錄事件
Shutdown關機事件
StartScreenSaver啟動屏保事件
StartShell:啟動explorer.exe時發生的事件
Startup系統開機事件。
StopScreenSaver停止屏保事件
Unlock解除桌面鎖定事件
這個地方的加載希望能引起大家的重視.當某一事件發生時,也許病毒也偷偷地在運行了.一般需要關注的是系統開機事件及登陸事件,說到底,我們要關注的不是事件而是DLLName鍵的值,從而知道病毒文件路徑.
四,任務調度啟動
開啟Task Scheduler服務后,該種啟動方式即生效.它是隨explorer.exe啟動的共享計劃任務.注冊表位置:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SharedTaskScheduler
正常情況下,該項下只有兩個鍵,鍵名為一CLSID,值為描述性文字,可以為空.正常的兩個鍵為:
{438755C2-A8BA-11D1-B96B-00A0C90312E1},Browseui 預加載程序,對應的DLL為%systemroot%\system32\browseui.dll
{8C7461EF-2B13-11d2-BE35-3078302C2030},組件類別緩存程序,對應文件也是%systemroot%\system32\browseui.dll
五,組件安裝監控啟動
注冊表位置:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\Installed Components
微軟使用該處鍵值來確認安裝的windows組件,在這里,我們可以看到所有安裝組件的列表,同樣是以CLSID形式出現的.最重要的一個鍵是StubPath,它的值是一條命令,如果IsInstalled的值為0,則每次系統啟動時都會執行這個命令,如果這個命令是一個木馬文件的話...后果可想而知了,它的加載也是早于其他程序的,現在利用這種啟動方式的木馬或病毒還比較少,但以后應該會多起來,可能會新建一個項,可能是修改已有項的StubPath值,也有可能是直接替換系統中的文件.
本人E文菜得很,如果上面的你無法理解,請看原文:
Monitoring of the Active Setup Registry Key
What is the Active Setup?
Why monitor this key?
Microsoft uses this key to setup installed Windows components.
You can see a list of the installed components under the key
HKLM\Software\Microsoft\Active Setup\Installed Components
You should launch RegEdit to view it.
As you can see, the registry key of each component has a list of values.
These values are used by Windows to identify a component.
One of these values, StubPath, is very important.
This value includes a command that Windows executes every time it starts if a value called "IsInstalled," is not set to 1 (binary value).
Active Setup is used by new Trojans to install them to the computer.
This is very dangerous because then Windows launches the Trojan before other programs ARE loaded.
六,屏幕保護啟動
注冊表位置:HKEY_CURRENT_USER\Control Panel\Desktop
鍵SCRNSAVE.EXE,值為一SCR文件,如C:\WINDOWS\system32\logon.scr,大家可以在%systemroot%\system32目錄下搜索所有擴展名為scr的文件.實際上它和exe文件一樣,是一個可執行文件,文件關聯為"%1" /S,雙擊即可立即啟動屏幕保護程序.
該項目下一些鍵的作用:
SCRNSAVE.EXE指定屏幕保護程序的文件路徑,默認值為C:\WINDOWS\system32\logon.scr,如果此處的值為一exe文件,應引起高度重視.
ScreenSaveActive如果該值為0,表示禁用屏幕保護.
ScreenSaverIsSecure如果該值為1,表示從屏保狀態恢復過來時需要輸入密碼.
ScreenSaveTimeOut空閑多少時間后啟動屏幕保護程序,單位為秒,可設置的范圍為0~86400,如果設為0則表示不啟動.
七,瀏覽器加載啟動
這個有點特別,只有當啟動瀏覽器時,才會被加載.
這些加載項一般是來自網絡,還有一部分是來自捆綁軟件,當然也有安全軟件的插件.有的未驗證的加載項其實也很好用,但是有的則不是了,可能會造成系統不穩定,或者是引起IE遇到問題需要關閉等.
如何來管理這些加載項:
在瀏覽器上點工具,Internet選項,程序,管理加載項.在這里可以啟用或禁用某個加載項.要想完全刪除還得靠注冊表或第三方工具.
(注意:只有WIN XP SP2以上操作系統才有這個功能)
廣義上的瀏覽器加載項分為好幾種,包括ContextMenu(右鍵快捷菜單),BHO(瀏覽器輔助對象),Entension,ActiveX,Band,Button(按鈕),ToolBar(工具條)等,下面一個個來詳細講下.
1,ContextMenu(右鍵快捷菜單),注冊表路徑:HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt
在這里的項會出現在瀏覽器右鍵菜單中,可以將不需要的刪除,通常指向本地的一個網頁.
2,BHO(瀏覽器輔助對象,Browser Helper Objects),注冊表路徑:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects,這里又是一些CLSID.如果被病毒利用,往往很難清理干凈.
比如我這里的第一個是{00000000-12C9-4305-82F9-43058F20E8D2},利用查找功能,找到這個CLSID的位置HKEY_CLASSES_ROOT\CLSID\{00000000-12C9-4305-82F9-43058F20E8D2},選中InprocServer32,右邊就可以看到真正加載的文件了,我這里的值為X:\Program Files\Tencent\QQDownload\QQIEHelper02.dll
3,ActiveX,當我們瀏覽到特定的網頁時,瀏覽器自動下載插件并提示用戶安裝.ActiveX安裝必須經過用戶的同意及確認(會下載到%systemroot%\Downloaded Program Files目錄,并注冊).但也可以通過其他方式安裝.
注冊表路徑:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility
和BHO類似,也是一些CLSID,其下有一名為Compatibility的鍵,當它的值為400時表示禁用該ActiveX.
瀏覽器用久了,插件安裝卸載的次數多了,這里很容易產生一些無效的CLSID,無法在HKEY_CLASSES_ROOT\CLSID下找對應的,這些是可以刪除的.
4,ToolBar(工具條),注冊表路徑,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Toolbar,還是CLSID,不多講...
八,hosts文件
大家都用過ping命令吧,沒有的話現在看也來得及.
該命令用于檢查網絡是否能夠連通,分析判定網絡故障,該命令只有在安裝了TCP/IP協議后才可以使用.Ping命令的主要作用是通過發送數據包并接收應答信息來檢測兩臺計算機之間的網絡是否連通.當網絡出現故障的時候,可以用這個命令來預測故障和確定故障地點.命令成功只是說明當前主機與目的主機之間存在一條連通的路徑.如果不成功,則考慮:網線是否連通,網卡設置是否正確,IP地址是否可用等.
打開CMD窗口(開始,運行,輸入CMD),輸入ping 127.0.0.1
回車后如圖
圖中紅色標記的三個位置分別為發送的數據包數,接收到的數據包數,丟失的數據包數,127.0.0.1代表本機IP地址,最后一行表示數據包返回的速度,分別為最快,最慢,平均.
可能有的人不知道什么是IP地址,這里簡單的解釋一下,它是每個連接在Internet上的主機分配的一個32位地址(IPv6使用128位地址),4個字節,例如1110110010001110010100011011000000001,這就是本機IP地址,但是很難記,為了方便使用,每8位(一個字節)用點號分隔,并轉化為大家都習慣的十進制,于是上面的IP地址就是127.0.0.1.
每臺電腦可以有多個IP地址,多臺電腦也可能只有一個IP地址(比如同一局域網內的外網IP地址都是相同的)
大家在瀏覽器地址欄中輸入以下地址:http://220.181.37.55(可以不輸入前面的http://,只要輸入220.181.37.55就可以了,后面的也是一樣的),打開的應該是百度吧,但是這種IP地址還是很難讓人記住,于是又出現了域名,我們訪問百度只要輸入http://www.baidu.com就行了,這下好記多了.將某個域名關聯到某個IP地址稱為域名解析(由專門的DNS服務器負責解析).要想知道某個域名的IP地址,可以使用ping命令,如ping www.baidu.com
hosts文件的作用也是將IP地址與域名建立一種映射關系,我們在訪問一個域名時,windows會首先檢hosts文件中是否有映射關系,如果有,就直接使用這里的映射關系,如果沒有,則向DNS服務器提出請求.也就是說Hosts的請求級別比DNS高.
hosts文件位于%systemroot%\system32\drivers\etc\hosts,請大家用記事本打開這個文件.
前幾行文字都是以#號開頭的,我們不必管它,這是注釋符,系統忽略這一行中#號后面的內容.所以真正有用的第一行的內容應該是:
127.0.0.1 localhost
它的意思是將主機localhost與127.0.0.1建立映射關系.如果你的系統有web服務,那么就可以通過http://localhost這個地址來訪問.如果沒有這個服務,當然是打不開網頁了.病毒常常會利用這個文件來訪問一些惡意地址從而下載病毒或者屏蔽掉安全軟件,反病毒網站.IP地址與域名之間可以用空格或TAB符來分隔.
我們來做個實驗,將百度映射到google.在后面增加一行并保存:
203.208.35.101 www.baidu.com
關閉瀏覽器,重新打開,輸入www.baidu.com,出現的不再是百度的頁面,而是google的頁面(如果出現亂碼請刷新一下).(關閉瀏覽器重新打開的目的是清除hosts文件的緩存).如果被映射到一個病毒網站的話,嘿嘿.
如果要屏蔽掉百度,只要將上面一行改為127.0.0.1 www.baidu.com
這個功能主要是用于屏蔽惡意網址的.
還嫌百度域名過長輸入麻煩?
還有招呢,通過輸入bd(百度的拼音縮寫)來訪問百度,在hosts文件名增加一行:
220.181.37.55 bd