现在的位置: 首页 > 综合 > 正文

svchost.exe启动服务原理(如何查看系统服务究竟启动了哪个文件)

2013年03月08日 ⁄ 综合 ⁄ 共 1386字 ⁄ 字号 评论关闭

引言:

 

     本来是不想研究这些东西的,但是米老大指示要求禁用网上邻居,顺便研究一下。

     其实禁用网上邻居,可以简单的从注册表禁用,不过这样太苍白无力了,既然做,就做强悍点,直接从服务入手,彻底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文件的路径和启动参数。如图:

 

 

抱歉!评论已关闭.