svchost.exe啟動服務原理(如何查看系統服務究竟啟動了哪個文件)


引言:

 

     本來是不想研究這些東西的,但是米老大指示要求禁用網上鄰居,順便研究一下。

     其實禁用網上鄰居,可以簡單的從注冊表禁用,不過這樣太蒼白無力了,既然做,就做強悍點,直接從服務入手,徹底kill網上鄰居服務(是篡改服務文件,而不是簡單的暫停服務),神也無力回天,除非修復系統。

     網上鄰居核心服務是ComputerBrowser,那么如何找到這個服務啟動的文件呢?

     再多廢話點,提醒各位需要禁用網上鄰居的童鞋,別忘了網上鄰居還有DOS版哦~~~,命令是NET,直接篡改C:\Windows\System32目錄下的net.exe即可簡單禁用。

     注意,我們做的不是病毒,不僅能篡改,還要能改回來,不能破壞系統。

 

正文:

 

    svchost.exe本身只是作為服務宿主,並不實現任何服務功能,需要svchost.exe啟動的服務以動態鏈接庫形式實現,在安裝這些服務時,把服務的可執行程序指向svchost.exe,啟動這些服務時由svchost.exe調用相應服務的動態鏈接庫來啟動服務。

    雙擊服務列表的服務,可以看到服務詳細信息。

 

 

 

    其中,C:\Windows\System32\svchost.exe-k netsvcs這個路徑當然就是啟動服務的關鍵信息,其實,后邊的這個-k netsvcs參數並不是在告訴svchost.exe啟動哪個服務,netsvcs代表的是組,表示這個服務是屬於哪個組的,組具體有啥用,大概就是節省資源什么亂七八糟的。正是由於采用了分組機制,系統中才會有多個svchost.exe進程,每個進程代表一個組。

    svchost.exe是怎么區分不同的服務呢?原來是根據服務名字區分的。。。搞個什么參數,弄的這么復雜,原來還是根據服務名字區分的。。。。

    注意服務的名稱,可不是服務列表里直接看到的名稱,雙擊服務從屬性里看以看到,如圖:

 

 

    哪個服務對應哪個dll,都是保存在注冊表里的,路徑是HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services。

    就拿上邊的Browser服務來說,在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services路徑下有一個Browser項,名字和服務名字一樣(也就是說,有多少個服務,這個路徑下就有多少個項,和服務名稱相對應),這個項里里邊又有一個Parameters子項,Parameters子項里有一個名字叫ServiceDll的鍵,它的值就是dll的路徑。如圖:

 

 

 

    這樣一來,svchost.exe根據服務名稱找到相應的鍵值,就找到要啟動的dll了。

    當然,不是所有的服務都是通過svchost.exe啟動的,以上的方法僅僅適用於利用svchost.exe啟動的服務,如果服務本身就是exe,而不是dll,不需要借助於svchost.exe

    如果服務不通過svchost.exe啟動,那么就更簡單,直接在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services路徑下找到和服務名稱一樣的項,項中有一個叫ImagePath的鍵,這個鍵的值就是服務exe文件的路徑和啟動參數。如圖:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM