引言:
本來是不想研究這些東西的,但是米老大指示要求禁用網上鄰居,順便研究一下。
其實禁用網上鄰居,可以簡單的從注冊表禁用,不過這樣太蒼白無力了,既然做,就做強悍點,直接從服務入手,徹底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文件的路徑和啟動參數。如圖: