倍可親

回復: 3
列印 上一主題 下一主題

高手 全面認識Svchost.exe進程

[複製鏈接]

1萬

主題

1萬

帖子

1萬

積分

八級貝殼核心

倍可親終生會員(廿一級)

Rank: 5Rank: 5

積分
18033
跳轉到指定樓層
樓主
kent 發表於 2006-1-30 09:09 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  很多朋友對Svchost.exe進程都不太了解,有時在任務管理器中一旦看到有多個該進程(圖1中有6個),就以為自己的電腦中了病毒或木馬,其實並非如此!正常情況下,windows中可以有多個Svchost.exe進程同時運行,例如Windows 2000至少有2個Svchost進程,Windows XP中有4個以上,Windows 2003中則有更多,所以當你看到多個Svchost進程時,未必就是病毒! 

  

  Svchost.exe進程是幹什麼的?

  Svchost.exe文件存在於「%system root%\system32」(例如C:\Windows\system32)目錄下,它是Windows NT核心的重要進程(Windows 9X沒有該進程),專門為系統啟動各種服務的。例如Svchost.exe調用rpcss.dll文件,就會啟動rpcss服務(remote procedure call)。

  Svchost.exe實際上是一個服務宿主,它本身並不能給用戶提供任何服務,但是可以用來運行動態鏈接庫DLL文件,從而啟動對應的服務。Svchost.exe進程可以同時啟動多個服務。

 Svchost是如何啟動系統服務的?

  由於系統服務都是以動態鏈接庫(DLL)形式實現的,它們把可執行程序指向Svchost,因此Svchost只要調用某個動態鏈接庫,即可啟動對應的服務。那麼Svchost啟動某服務時,又是如何知道應該調用哪個動態鏈接庫?這是由於系統服務在註冊表中都設置了相關參數,因此Svchost通過讀取某服務在註冊表中的信息,即可知道應該調用哪個動態鏈接庫,從而啟動該服務。

  下面我們以Svchost啟動helpsvc(Help and Support)服務為例,介紹其啟動服務的方法。在Windows XP中點擊「開始」 「運行」,輸入「services.msc」命令,彈出服務對話框,然後雙擊打開「Help and Support」服務屬性對話框,可以看到helpsvc服務的可執行文件的路徑為「C:\WINDOWS\System32\svchost.exe -k netsvcs」 (如圖2),說明helpsvc服務是依靠SVCHOST調用「netsvcs」參數來實現的,而參數的內容則是存放在系統註冊表中的。

  

  在運行對話框中輸入「regedit.exe」后回車,打開註冊表編輯器,找到[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\helpsvc]項,找到類型為「REG_EXPAND_SZ」的鍵「magePath」,其鍵值為「%SystemRoot%\System32\svchost.exe -k netsvcs」(這就是在服務窗口中看到的服務啟動命令),另外在「Parameters」子項中有個名為「ServiceDll」的鍵,其值為「%WINDIR%\PCHealth\HelpCtr\Binaries\pchsvc.dll」,其中「pchsvc.dll」就是helpsvc服務要使用的動態鏈接庫文件。這樣SVCHOST進程通過讀取「helpsvc」服務註冊表信息,就能啟動該服務了。  

  Svchost到底啟動了哪些服務?

  如果你想了解每個SVCHOST進程當前到底提供了哪些系統服務,可以在命令提示符下輸入命令來查看。例如在Windows XP中,打開「命令提示符」,鍵入tasklist /svc命令查看;在Windows 2000中,則輸入「Tlist -S」命令來查看。

  如果你在Windows XP中,想得到所有進程的詳細信息,可以打開「命令提示符」,鍵入  tasklist /svc>abc.txt 命令,於是在當前目錄中,將會生成一個abc.txt文件,其內容就是當前正在運行的所有進程情況,例如進程名、PID號、該進程啟動了哪些服務。

 如何發現Svchost進程有問題?

  由於Svchost進程可以啟動各種服務,因此病毒、木馬也經常偽裝成系統的DLL文件,使Svchost調用它,從而進入內存中運行、感染和控制電腦。

  建議你使用「Windows優化大師」進程管理器(可以到《個人電腦》的下載頻道http://download.pcpro.com.cn的「系統工具」中去下載),查看所有Svchost進程的執行文件路徑(如圖3),正常的Svchost文件應該存在於「c:\Windows\system32」目錄下,如果你發現其執行路徑在其他目錄下,就有可能染上了病毒或木馬了,應該馬上進行檢測和處理。

  

  Svchost進程殺不掉怎麼辦?

  如果有些Svchost進程,你在任務管理器中無法關閉之,可以使用ntsd命令來殺掉它,方法如下:

  首先需要了解欲殺的Svchost進程,其PID是多少?在Windows XP下,按Ctrl+Alt+Del打開任務管理器,點擊「進程選項卡」 「查看」 「選擇列」,在彈出的窗口中(圖4),勾選「PID(進程標識符)」,然後回到任務管理器中,即可看見PID了(例如要殺的Svchost進程,其PID是844)。

  

  接下來關閉該進程。點擊「開始」 「程序」 「附件」 「命令提示符」,在命令提示符下,輸入命令ntsd -c q -p 844即可殺掉Svchost進程(PID是844)。

  小提示:除了System、SMSS.EXE和CSRSS.EXE這三個進程,ntsd命令可以殺掉任何一個系統進程。從Windows 2000開始,微軟就提供了ntsd工具,該命令執行后,可讓你獲得系統的debug權,因此能夠用來關閉大部分的系統進程,如果你遇到無法關閉的進程,就可以使用該命令,其殺進程的命令格式為:ntsd -c q Cp XXX

  以上XXX為欲殺進程的PID;

  ntsd Cp XXX 表示在調試器中打開某進程(PID為XXX);

  而-c q參數則表示退出調試器。由於調試器關閉之後,它打開的進程會隨調試器一起退出,因此ntsd命令能夠關閉進程。

4

主題

632

帖子

132

積分

貝殼網友一級

Rank: 3Rank: 3

積分
132
沙發
ecore 發表於 2006-1-30 10:42 | 只看該作者
樓主厲害啊!
回復 支持 反對

使用道具 舉報

36

主題

398

帖子

101

積分

貝殼網友一級

新新移民(六級)

Rank: 3Rank: 3

積分
101
3
netsking 發表於 2006-1-31 08:22 | 只看該作者
是啊,樓主真厲害.
回復 支持 反對

使用道具 舉報

7

主題

155

帖子

43

積分

貝殼新手上路

大一新生(四級)

Rank: 2

積分
43
4
剛果共和國 發表於 2006-2-2 14:02 | 只看該作者
不錯的article, 多謝
回復 支持 反對

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 註冊

本版積分規則

關於本站 | 隱私權政策 | 免責條款 | 版權聲明 | 聯絡我們

Copyright © 2001-2013 海外華人中文門戶:倍可親 (http://big5.backchina.com) All Rights Reserved.

程序系統基於 Discuz! X3.1 商業版 優化 Discuz! © 2001-2013 Comsenz Inc.

本站時間採用京港台時間 GMT+8, 2025-10-31 08:30

快速回復 返回頂部 返回列表