zoukankan      html  css  js  c++  java
  • 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文件的路径和启动参数。如图:

     
  • 相关阅读:
    YOLOv5实现自定义对象训练与OpenVINO部署全解析
    GMS程序调试指南GMS-Feature-Matcher
    MobileNet V3与Lite R-ASPP 总结
    codevs 3385 拯救Oier(一) Save Oier—first
    喵哈哈村的魔法考试 Round #6 (Div.3) 题解
    POJ 1852 Ants
    加强赛第一轮题解
    喵哈哈村的魔法考试 Round #3 (Div.2)
    python小数据池,代码块的最详细、深入剖析
    比较三个数的大小
  • 原文地址:https://www.cnblogs.com/iyangyuan/p/2801803.html
Copyright © 2011-2022 走看看