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進程不甚瞭解,看見存在許多svchost進程就以爲自己中了病毒,其實不然。
  
  svchost.exe是NT核心系統非常重要的文件,對於Win2000/XP來說,不可或缺。這些svchost進程提供很多系統服務,如:rpcss服務(remote procedure call)、dmserver服務(logical disk manager)、dhcp服務(dhcp client)等等。
  
  如果要了解每個svchost進程到底提供了多少系統服務,可以在WinXP的命令提示符窗口中輸入“tasklist /svc”命令來查看。
  
  工作原理
  一般來說,Windows系統進程分爲獨立進程和共享進程兩種。svchost.exe文件存在於%systemroot%/system32目錄下,屬於共享進程。
  
  隨着Windows系統服務不斷增多,爲了節省系統資源,微軟把很多服務都做成共享方式,交由svchost進程來啓動。但svchost進程只作爲服務宿主,並不能實現任何服務功能,即它只能提供條件讓其他服務在這裏被啓動,而它自己卻不能給用戶提供任何服務。
  
  這些服務是如何實現的呢?原來這些系統服務是以動態鏈接庫(dll)形式實現的,它們把可執行程序指向svchost,由svchost調用相應服務的動態鏈接庫來啓動服務。
  
  那svchost又怎麼知道某個系統服務該調用哪個動態鏈接庫呢?這是通過系統服務在註冊表中設置的參數來實現的。
  
  具體實例
  下面以Remote Registry服務爲例,來看看svchost進程是如何調用DLL文件的。在WinXP中,點擊“開始→運行”,輸入“services.msc”命令,會彈出服務對話框,然後打開“Remote Registry”屬性對話框,可以看到Remote Registry服務的可執行文件的路徑爲“C:/Windows/System32/svchost -k LocalService”(圖1),這說明Remote Registry服務是依靠svchost調用“LocalService”參數來實現的,而參數的內容則是存放在系統註冊表中的。
  
  在運行對話框中輸入“regedit.exe”後回車,打開註冊表編輯器,找到“HKEY_LOCAL_MACHINE/System/currentcontrolset/services/Remote Registry”項,再找到類型爲“reg_expand_sz”的“Imagepath”項,其鍵值爲“%systemroot%/system32/svchost -k LocalService”(這就是在服務窗口中看到的服務啓動命令),另外在“parameters”子項中有個名爲“ServiceDll”的鍵,其值爲“% systemroot%/system32/regsvc.dll”,其中“regsvc.dll”就是Remote Registry服務要使用的動態鏈接庫文件。這樣svchost進程通過讀取“Remote Registry”服務註冊表信息,就能啓動該服務了。
  
  也正是因爲svchost的重要性,所以病毒、木馬也想盡辦法來利用它,企圖利用它的特性來迷惑用戶,達到感染、入侵、破壞的目的。那麼應該如何判斷到底哪個是病毒進程呢?正常的svchost.exe文件應該存在於“C:/Windows/system32”目錄下,如果發現該文件出現在其他目錄下就要小心了。
  
  提示:svchost.exe文件的調用路徑可以通過“系統信息→軟件環境→正在運行任務”來查看.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章