| 金幣:3652 經(jīng)驗:11588 等級:高中二年級 功勛:37 | 全面認識Svchost.exe進(jìn)程很多朋友對svchost.exe進(jìn)程都不太了解,有時(shí)在任務(wù)管理器中一旦看到有多個(gè)該進(jìn)程(圖1中有6個(gè)),就以為自己的電腦中了病毒或木馬,其實(shí)并非如此!正常情況下,windows中可以有多個(gè)svchost.exe進(jìn)程同時(shí)運行,例如Windows2000至少有2個(gè)Svchost進(jìn)程,WindowsXP中有4個(gè)以上,Windows2003中則有更多,所以當你看到多個(gè)svchost進(jìn)程時(shí),未必就是病毒! ![]() svchost.exe進(jìn)程是干什么的? svchost.exe文件存在于“%systemroot%\system32”(例如C:\Windows\system32)目錄下,它是WindowsNT核心的重要進(jìn)程(Windows9X沒(méi)有該進(jìn)程),專(zhuān)門(mén)為系統啟動(dòng)各種服務(wù)的。例如Svchost.exe調用rpcss.dll文件,就會(huì )啟動(dòng)rpcss服務(wù)(remoteprocedurecall)。 svchost.exe實(shí)際上是一個(gè)服務(wù)宿主,它本身并不能給用戶(hù)提供任何服務(wù),但是可以用來(lái)運行動(dòng)態(tài)鏈接庫DLL文件,從而啟動(dòng)對應的服務(wù)。Svchost.exe進(jìn)程可以同時(shí)啟動(dòng)多個(gè)服務(wù)。 svchost是如何啟動(dòng)系統服務(wù)的? 由于系統服務(wù)都是以動(dòng)態(tài)鏈接庫(DLL)形式實(shí)現的,它們把可執行程序指向svchost,因此svchost只要調用某個(gè)動(dòng)態(tài)鏈接庫,即可啟動(dòng)對應的服務(wù)。那么svchost啟動(dòng)某服務(wù)時(shí),又是如何知道應該調用哪個(gè)動(dòng)態(tài)鏈接庫?這是由于系統服務(wù)在注冊表中都設置了相關(guān)參數,因此svchost通過(guò)讀取某服務(wù)在注冊表中的信息,即可知道應該調用哪個(gè)動(dòng)態(tài)鏈接庫,從而啟動(dòng)該服務(wù)。 下面我們以svchost啟動(dòng)helpsvc(HelpandSupport)服務(wù)為例,介紹其啟動(dòng)服務(wù)的方法。在WindowsXP中點(diǎn)擊“開(kāi)始”“運行”,輸入“services.msc”命令,彈出服務(wù)對話(huà)框,然后雙擊打開(kāi)“HelpandSupport”服務(wù)屬性對話(huà)框,可以看到helpsvc服務(wù)的可執行文件的路徑為“C:\WINDOWS\System32\svchost.exe-knetsvcs”(如圖2),說(shuō)明helpsvc服務(wù)是依靠SVCHOST調用“netsvcs”參數來(lái)實(shí)現的,而參數的內容則是存放在系統注冊表中的。 ![]() 在運行對話(huà)框中輸入“regedit.exe”后回車(chē),打開(kāi)注冊表編輯器,找到[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\helpsvc]項,找到類(lèi)型為“REG_EXPAND_SZ”的鍵“magePath”,其鍵值為“%SystemRoot%\System32\svchost.exe-knetsvcs”(這就是在服務(wù)窗口中看到的服務(wù)啟動(dòng)命令),另外在“Parameters”子項中有個(gè)名為“ServiceDll”的鍵,其值為“%WINDIR%\PCHealth\HelpCtr\Binaries\pchsvc.dll”,其中“pchsvc.dll”就是helpsvc服務(wù)要使用的動(dòng)態(tài)鏈接庫文件。這樣SVCHOST進(jìn)程通過(guò)讀取“helpsvc”服務(wù)注冊表信息,就能啟動(dòng)該服務(wù)了。 svchost到底啟動(dòng)了哪些服務(wù)? 如果你想了解每個(gè)SVCHOST進(jìn)程當前到底提供了哪些系統服務(wù),可以在命令提示符下輸入命令來(lái)查看。例如在WindowsXP中,打開(kāi)“命令提示符”,鍵入tasklist/svc命令查看;在Windows2000中,則輸入“Tlist-S”命令來(lái)查看。 如果你在WindowsXP中,想得到所有進(jìn)程的詳細信息,可以打開(kāi)“命令提示符”,鍵入tasklist/svc>abc.txt命令,于是在當前目錄中,將會(huì )生成一個(gè)abc.txt文件,其內容就是當前正在運行的所有進(jìn)程情況,例如進(jìn)程名、PID號、該進(jìn)程啟動(dòng)了哪些服務(wù)。 如何發(fā)現svchost進(jìn)程是否有問(wèn)題? 由于svchost進(jìn)程可以啟動(dòng)各種服務(wù),因此病毒、木馬也經(jīng)常偽裝成系統的DLL文件,使svchost調用它,從而進(jìn)入內存中運行、感染和控制電腦。 建議你使用“Windows優(yōu)化大師”進(jìn)程管理器,查看所有svchost進(jìn)程的執行文件路徑(如圖3),正常的Svchost文件應該存在于“c:\Windows\system32”目錄下,如果你發(fā)現其執行路徑在其他目錄下,就有可能染上了病毒或木馬了,應該馬上進(jìn)行檢測和處理。 ![]() Svchost進(jìn)程殺不掉怎么辦? 如果有些Svchost進(jìn)程,你在任務(wù)管理器中無(wú)法關(guān)閉之,可以使用ntsd命令來(lái)殺掉它,方法如下: 首先需要了解欲殺的Svchost進(jìn)程,其PID是多少?在WindowsXP下,按Ctrl+Alt+Del打開(kāi)任務(wù)管理器,點(diǎn)擊“進(jìn)程選項卡”“查看”“選擇列”,在彈出的窗口中(圖4),勾選“PID(進(jìn)程標識符)”,然后回到任務(wù)管理器中,即可看見(jiàn)PID了(例如要查殺的svchost進(jìn)程,其PID是844)。 ![]() 接下來(lái)關(guān)閉該進(jìn)程。點(diǎn)擊“開(kāi)始”“程序”“附件”“命令提示符”,在命令提示符下,輸入命令ntsd-cq-p844即可查殺掉Svchost進(jìn)程(PID是844)。 小提示:除了System、SMSS.EXE和CSRSS.EXE這三個(gè)進(jìn)程,ntsd命令可以殺掉任何一個(gè)系統進(jìn)程。從Windows2000開(kāi)始,微軟就提供了ntsd工具,該命令執行后,可讓你獲得系統的debug權,因此能夠用來(lái)關(guān)閉大部分的系統進(jìn)程,如果你遇到無(wú)法關(guān)閉的進(jìn)程,就可以使用該命令,其殺進(jìn)程的命令格式為:ntsd-cq–pXXX 以上XXX為欲殺進(jìn)程的PID; ntsd–pXXX表示在調試器中打開(kāi)某進(jìn)程(PID為XXX); 而-cq參數則表示退出調試器。由于調試器關(guān)閉之后,它打開(kāi)的進(jìn)程會(huì )隨調試器一起退出,因此ntsd命令能夠關(guān)閉進(jìn)程。 |
聯(lián)系客服