是微软NT内核产物,也是一个身兼数职的大将,(很多系统服务,如:RpcSs服务Remote Procedure Call、dmserver服务Logical Disk Manager、Dhcp服务DHCP Client等),但是也是病毒和木马主要的侵入点,所以我们一定要了解它的特性加以注意访问未然。
Svchost概述
用微软的话来说:它是一个从动态链接库(DLL)中运行的服务的通用主机进程名称。一般存放在系统目录(%SystemRoot%)下的System32文件夹里。每次计算机启动的时候Svchost都会从注册表中读取服务列表,加载服务。
Svchost本身只是作为服务宿主,并不实现任何服务功能,需要Svchost启动的服务以动态链接库形式实现,在安装这些服务时,把服务的可执行程序指向svchost,启动这些服务时由svchost调用相应服务的动态链接库来启动服务。这不是由服务的可执行程序路径中的参数部分提供的,而是服务在注册表中的参数设置的,注册表中服务下边有一个Parameters子键其中的ServiceDll表明该服务由哪个动态链接库负责。并且所有这些服务动态链接库都必须要导出一个ServiceMain()函数,用来处理服务任务。
Svchost组是由注册表[HKEY_LOCAL_MACHINESoftwareMicrosoftWindows NTCurrentVersionSvchost]项来识别的。在这个注册表项下的每个值都代表单独的Svchost组,并在我们查看活动进程时作为单独的实例显示。这里的键值均为REG_MULTI_SZ类型的值,并且包含该Svchost组里运行的服务名称。(见下图)
其实Svchost本身没有什么具体的功能,果需要使用Svchost来启动某个DLL形式实现的服务,该DLL的载体Loader指向Svchost,在启动服务的时候由Svchost调用该服务的DLL来实现启动的目的。使用Svchost启动某个服务的DLL文件是由注册表中的参数来决定的,在需要启动服务的注册表项下都有一个“Parameters”子项,其中的“ServiceDll”键值表明该服务由哪个DLL文件负责,并且这个DLL文件必须导出一个ServiceMain()函数,为处理服务任务提供支持。
如果想了解您计算机中的Svchost起了多少服务,那么你可以这么做。如果是WINDOWS 2000你可以用Support Tools里的Tlist ?s,如果你是WINDOWS XP你可以直接选用Tasklist /svc查看。(但是不知为何在XP的HOME ENDITION版本中这个工具却被简化掉了)(例图如下)
判断自己的Svchost是否正常
在不同WINDOWS操作系统中Svchost数量也不同,大家可以简单参考一下:windows 2000大概有两个windows xp有四到六个而windows2003则会有六个以上。
因为Svchost进程启动各种服务,所以很多木马和病毒都喜欢把它作为合作伙伴,比如说:著名的病毒冲击波变种(w32.welchia.worm)。但微软NT内核系统存在多个Svchost进程也是很正常的,十分难以判断,下面我们教大家一个简单方法:
假设Windows XP系统被“w32.hacker.cn”感染了。正常的Svchost文件存在于“%SystemRoot%system32”目录下,如果发现该文件出现在其他目录下就要小心了。“w32.hacker.cn”病毒存在于“c:Windowssystem32_hacker.cn”目录中,因此使用进程管理器查看Svchost进程的执行文件路径就很容易发现系统是否感染了病毒。Windows系统自带的任务管理器不能够查看进程的路径,我们可以借助第三方工具,网上比较容易找到WINDOWS优化大师,在软件包里有一个进程管理器,它可以清楚的看到Svchost执行的本地文件路径,一但发现异常可以马上处理。(如下图)
喜欢深入了解Svchost的朋友可以去
http://support.microsoft.com/default.aspx?scid=kb;en-us;314056 WinXP中SVCHOST.EXE的资料http://support.microsoft.com/default.aspx?scid=kb;en-us;250320 Win2000中SVCHOST.EXE的资料


