svchost.exe是一個屬于微軟Windows操作系統的系統程序,微軟官方對它的解釋是:Svchost.exe 是從動態鏈接庫 (DLL) 中運行的服務的通用主機進程名稱。這個程序對系統的正常運行是非常重要,而且是不能被結束的。在基于nt內核的windows操作系統家族中,不同版本的windows系統,存在不同數量的“svchost”進程,用戶使用“任務管理器”可查看其進程數目。一般來說,win2000有兩個svchost進程,winxp中則有四個或四個以上的svchost進程(以后看到系統中有多個這種進程,千萬別立即判定系統有病毒了喲),而win2003server中則更多。這些svchost進程提供很多系統服務,如:rpcss服務(remoteprocedurecall)、dmserver服務(logicaldiskmanager)、dhcp服務(dhcpclient)等。到了Windows Vista 系統時svchost 進程多達12個,這些svchost.exe都是同一個文件路徑下C :\Windows\System32\svchost.exe , 它們分別是imgsvc、 NetworkServiceNetworkRestricted、 LocalServiceNoNetwork 、NetworkService 、LocalService 、netsvcs 、LocalSystemNetworkRestricted、 LocalServiceNetworkRestricted 、services 、rpcss、 WerSvcGroup 、DcomLaunch服務組。如果要了解每個svchost進程到底提供了多少系統服務,可以在win2000的命令提示符窗口中輸入“tlist-s”命令來查看,該命令是win2000supporttools提供的。在winxp則使用“tasklist/svc”命令。 svchost中可以包含多個服務 深入:windows系統進程分為獨立進程和共享進程兩種,“svchost.exe”文件存在于“%systemroot%system32”目錄下,它屬于共享進程。隨著windows系統服務不斷增多,為了節省系統資源,微軟把很多服務做成共享方式,交由svchost.exe進程來啟動。但svchost進程只作為服務宿主,并不能實現任何服務功能,即它只能提供條件讓其他服務在這里被啟動,而它自己卻不能給用戶提供任何服務。那這些服務是如何實現的呢? 原來這些系統服務是以動態鏈接庫(dll)形式實現的,它們把可執行程序指向svchost,由svchost調用相應服務的動態鏈接庫來啟動服務。那svchost又怎么知道某個系統服務該調用哪個動態鏈接庫呢?這是通過系統服務在注冊表中設置的參數來實現。下面就以rpcss(remoteprocedurecall)服務為例,進行講解。 從啟動參數中可見服務是靠svchost來啟動的。 實例 以windowsxp為例,點擊“開始”/“運行”,輸入“services.msc”命令,彈出服務對話框,然后打開“remoteprocedurecall”屬性對話框,可以看到rpcss服務的可執行文件的路徑為“c:\windows\system32\svchost-krpcss”,這說明rpcss服務是依靠svchost調用“rpcss”參數來實現的,而參數的內容則是存放在系統注冊表中的。 在運行對話框中輸入“regedit.exe”后回車,打開注冊表編輯器,找到[hkey_local_machine\system\currentcontrolset\services\rpcss]項,找到類型為“reg_expand_sz”的鍵“Imagepath”,其鍵值為“%systemroot%system32svchost-krpcss”(這就是在服務窗口中看到的服務啟動命令),另外在“parameters”子項中有個名為“servicedll”的鍵,其值為“%systemroot%system32rpcss.dll”,其中“rpcss.dll”就是rpcss服務要使用的動態鏈接庫文件。這樣svchost進程通過讀取“rpcss”服務注冊表信息,就能啟動該服務了。 [編輯本段]病毒相關解惑 因為svchost進程啟動各種服務,所以病毒、木馬也想盡辦法來利用它,企圖利用它的特性來迷惑用戶,達到感染、入侵、破壞的目的(如沖擊波變種病毒“w32.welchia.worm”)。但windows系統存在多個svchost進程是很正常的,在受感染的機器中到底哪個是病毒進程呢?這里僅舉一例來說明。 假設windowsxp系統被“w32.welchia.worm”感染了。正常的svchost文件存在于“c:\windows\system32”目錄下,如果發現該文件出現在其他目錄下就要小心了。“w32.welchia.worm”病毒存在于“c:\windows\system32\wins”目錄中,因此使用進程管理器查看svchost進程的執行文件路徑就很容易發現系統是否感染了病毒。windows系統自帶的任務管理器不能夠查看進程的路徑,可以使用第三方進程管理軟件,如“windows優化大師”進程管理器,通過這些工具就可很容易地查看到所有的svchost進程的執行文件路徑,一旦發現其執行路徑為不平常的位置就應該馬上進行檢測和處理。 Svchost.exe說明解疑對Svchost的困惑 --------------- Svchost.exe文件對那些從動態連接庫中運行的服務來說是一個普通的主機進程名。Svchost.exe文件定位在系統的%systemroot%\system32文件夾下。在啟動的時候,Svchost.exe檢查注冊表中的位置(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SvcHost)來構建需要加載的服務列表。這就會使多個Svchost.exe在同一時間運行。每個Svchost.exe的回話期間都包含一組服務,以至于單獨的服務必須依靠Svchost.exe怎樣和在那里啟動。這樣就更加容易控制和查找錯誤。 Svchost.exe 組是用下面的注冊表值來識別。 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Svchost 每個在這個鍵下的值代表一個獨立的Svchost組,并且當你正在看活動的進程時,它顯示作為一個單獨的例子。每個鍵值都是REG_MULTI_SZ類型的值而且包括運行在Svchost組內的服務。每個Svchost組都包含一個或多個從注冊表值中選取的服務名,這個服務的參數值包含了一個ServiceDLL值。 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services 簡單的說沒有這個RPC服務,機器幾乎就上不了網了。很多應用服務都是依賴于這個RPC接口的,如果發現這個進程占了太多的CPU資源,直接把系統的RPC服務禁用了會是一場災難:因為連恢復這個界面的系統服務設置界面都無法使用了。恢復的方法需要使用注冊表編輯器,找到 HKEY_LOCAL_MACHINE >> SYSTEM >> CurrentControlSet >> Services >> RpcSs, 右側找到Start屬性,把它的值改為2再重啟即可 造成svchost占系統CPU 100%的原因并非svchost服務本身:以上的情況是由于Windows Update服務下載/安裝失敗而導致更新服務反復重試造成的。而Windows的自動更新也是依賴于svchost服務的一個后臺應用,從而表現為svchost.exe負載極高。 常發生這類問題的機器一般是上網條件(尤其是去國外網站)不穩定的機器,比如家里的父母的機器,往往在安裝機器幾個月以后不定期發生,每個月的第二個星期是高發期:因為最近幾年MS很有規律的在每個月的第二個星期發布補丁程序)。上面的解決方法并不能保證不重發作,但是為了svchost文件而每隔幾個月重裝一次操作系統還是太浪費時間了。 注意點: svchost.exe 常被病毒冒充的進程名有:svch0st.exe、schvost.exe、scvhost.exe。隨著Windows系統服務不斷增多,為了節省系統資源,微軟把很多服務做成共享方式,交由svchost.exe進程來啟動。而系統服務是以動態鏈接庫(DLL)形式實現的,它們把可執行程序指向svchost,由svchost調用相應服務的動態鏈接庫來啟動服務。我們可以打開“控制面板”→“管理工具”→服務,雙擊其中“ClipBook”服務,在其屬性面板中可以發現對應的可執行文件路徑為“C:\WINDOWS\system32\clipsrv.exe”。再雙擊“Alerter”服務,可以發現其可執行文件路徑為“C:\WINDOWS\system32\svchost.exe -k LocalService”,而“Server”服務的可執行文件路徑為“C:\WINDOWS\system32\svchost.exe -k netsvcs”。正是通過這種調用,可以省下不少系統資源,因此系統中出現多個svchost.exe,其實只是系統的服務而已。 在Windows2000系統中一般存在2個svchost.exe進程,一個是RPCSS(RemoteProcedureCall)服務進程,另外一個則是由很多服務共享的一個svchost.exe;而在WindowsXP中,則一般有4個以上的svchost.exe服務進程。如果svchost.exe進程的數量多于6個,就要小心了,很可能是病毒假冒的,檢測方法也很簡單,使用一些進程管理工具,例如Windows優化大師的進程管理功能,查看svchost.exe的可執行文件路徑,如果在“C:\WINDOWS\system32”目錄外,那么就可以判定是病毒了。 svchost.exe病毒清除辦法 1、用unlocker刪除類似于C:SysDayN6這樣的文件夾:例如C:Syswm1i、C:SysAd5D等等,這些文件夾有個共同特點,就是名稱為 Sys*** (***是三到五位的隨機字母),這樣的文件夾有幾個就刪幾個。 2、開始——運行——輸入“regedit”——打開注冊表,注冊表到以下位置: HKEY_CURRENT_USER\Software\Microsoft\Windows\Current\Version\Policies\Explorer\Run 刪除右邊所有用純數字為名的鍵,如 <66><C:SysDayN6svchost.exe> <333><C:Syswm1isvchost.exe> <50><C:SysAd5Dsvchost.exe> <4><C:SysWsj7svchost.exe> 3、重新啟動計算機,病毒清除完畢。