原帖由 xg2u 於 2006-9-10 10:11 PM 發表
在我的进程中有4个svchost.exe,有问题吗???
svchost.exe是nt核心系統的非常重要的進程,對於2000、xp來說,不可或缺。很多病毒、木馬也會調用它。所以,深入瞭解這個程序,是玩電腦的必修課之一。
大家對windows操作系統一定不陌生,但你是否注意到系統中「svchost.exe」這個文件呢?細心的朋友會發現windows中存在多個 「svchost」進程(通過「ctrl+alt+del」鍵打開任務管理器,這裡的「進程」標籤中就可看到了),為什麼會這樣呢?下面就來揭開它神秘的面紗。
發現
在基於nt內核的windows操作系統家族中,不同版本的windows系統,存在不同數量的「svchost」進程,用戶使用「任務管理器」可查看其進程數目。一般來說,win2000有兩個svchost進程,winxp中則有四個或四個以上的svchost進程(以後看到系統中有多個這種進程,千萬別立即判定系統有病毒了喲),而win2003 server中則更多。這些svchost進程提供很多系統服務,如:rpcss服務(remote procedure call)、dmserver服務(logical disk manager)、dhcp服務(dhcp client)等。
如果要瞭解每個svchost進程到底提供了多少系統服務,可以在win2000的命令提示符窗口中輸入「tlist -s」命令來查看,該命令是win2000 support tools提供的。在winxp則使用「tasklist /svc」命令。
svchost中可以包含多個服務
深入
windows系統進程分為獨立進程和共享進程兩種,「svchost.exe」文件存在於「%systemroot% system32」目錄下,它屬於共享進程。隨著windows系統服務不斷增多,為了節省系統資源,微軟把很多服務做成共享方式,交由 svchost.exe進程來啟動。但svchost進程只作為服務宿主,並不能實現任何服務功能,即它只能提供條件讓其他服務在這裡被啟動,而它自己卻不能給用戶提供任何服務。那這些服務是如何實現的呢?
原來這些系統服務是以動態鏈接庫(dll)形式實現的,它們把可執行程序指向 svchost,由svchost調用相應服務的動態鏈接庫來啟動服務。那svchost又怎麼知道某個系統服務該調用哪個動態鏈接庫呢?這是通過系統服務在註冊表中設置的參數來實現。下面就以rpcss(remote procedure call)服務為例,進行講解。
從啟動參數中可見服務是靠svchost來啟動的。
實例
以windows xp為例,點擊「開始」/「運行」,輸入「services.msc」命令,彈出服務對話框,然後打開「remote procedure call」屬性對話框,可以看到rpcss服務的可執行文件的路徑為「c:\windows\system32\svchost -k rpcss」,這說明rpcss服務是依靠svchost調用「rpcss」參數來實現的,而參數的內容則是存放在系統註冊表中的。
在運行對話框中輸入「regedit.exe」後回車,打開註冊表編輯器,找到[hkey_local_machine systemcurrentcontrolsetservicesrpcss]項,找到類型為「reg_expand_sz」的鍵「magepath」,其鍵值為「%systemroot%system32svchost -k rpcss」(這就是在服務窗口中看到的服務啟動命令),另外在「parameters」子項中有個名為「servicedll」的鍵,其值為「% systemroot%system32rpcss.dll」,其中「rpcss.dll」就是rpcss服務要使用的動態鏈接庫文件。這樣 svchost進程通過讀取「rpcss」服務註冊表信息,就能啟動該服務了。
解惑
因為svchost進程啟動各種服務,所以病毒、木馬也想盡辦法來利用它,企圖利用它的特性來迷惑用戶,達到感染、入侵、破壞的目的(如衝擊波變種病毒「w32.welchia.worm」)。但windows系統存在多個svchost進程是很正常的,在受感染的機器中到底哪個是病毒進程呢?這裡僅舉一例來說明。
假設windows xp系統被「w32.welchia.worm」感染了。正常的svchost文件存在於「c:\windows\system32」目錄下,如果發現該文件出現在其他目錄下就要小心了。「w32.welchia.worm」病毒存在於「c:\windows\system32wins」目錄中,因此使用進程管理器查看svchost進程的執行文件路徑就很容易發現系統是否感染了病毒。windows系統自帶的任務管理器不能夠查看進程的路徑,可以使用第三方進程管理軟件,如「windows優化大師」進程管理器,通過這些工具就可很容易地查看到所有的svchost進程的執行文件路徑,一旦發現其執行路徑為不平常的位置就應該馬上進行檢測和處理。
由於篇幅的關係,不能對svchost全部功能進行詳細介紹,這是一個windows中的一個特殊進程,有興趣的可參考有關技術資料進一步去瞭解它。
------------------------------------------
在去年的這個時候「衝擊波」病毒橫行的時候有一種說法就是Svchost.exe都是病毒,一看到就要刪除。這種說法讓電腦用戶人心惶惶,因為每個使用 Windows XP系統的用戶在按照文章中介紹的檢查有無Svchost.exe的方法都可以找到幾個Svchost.exe進程。
真的是像網絡上流傳的那樣Svchost.exe是病毒嗎?
我們先看看微軟是怎樣描述Svchost.exe的。在微軟知識庫314056中對Svchost.exe有如下描述:Svchost.exe 是從動態鏈接庫 (DLL) 中運行的服務的通用主機進程名稱。
其實Svchost.exe是Windows XP系統的一個核心進程。Svchost.exe不單單只出現在Windows XP中,在使用NT內核的Windows系統中都會有Svchost.exe的存在。一般在Windows 2000中Svchost.exe進程的數目為2個,而在Windows XP中Svchost.exe進程的數目就上升到了4個及4個以上。所以看到系統的進程列表中有幾個Svchost.exe不用那麼擔心。
Svchost.exe到底是做什麼用的呢?
首先我們要瞭解一點那就是Windows系統的中的進程分為:獨立進程和共享進程這兩種。由於Windows系統中的服務越來越多,為了節約有限的系統資源微軟把很多的系統服務做成了共享模式。那Svchost.exe在這中間是擔任怎樣一個角色呢?
Svchost.exe的工作就是作為這些服務的宿主,即由Svchost.exe來啟動這些服務。Svchost.exe只是負責為這些服務提供啟動的條件,其自身並不能實現任何服務的功能,也不能為用戶提供任何服務。Svchost.exe通過為這些系統服務調用動態鏈接庫(DLL)的方式來啟動系統服務。
那Svchost.exe是病毒這種說法是任何產生的呢?
因為Svchost.exe可以作為服務的宿主來啟動服務,所以病毒、木馬的編寫者也挖空心思的要利用Svchost.exe的這個特性來迷惑用戶達到入侵、破壞計算機的目的。
如何才能辨別哪些是正常的Svchost.exe進程,而哪些是病毒進程呢?
Svchost.exe的鍵值是在「HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Svchost」,如圖1所示。圖1中每個鍵值表示一個獨立的Svchost.exe組。
------------------------------------------------------------------