查看: 3304|回复: 8
收起左侧

[求助] windows XP 下的 svchost.exe

[复制链接]
wo1234
发表于 2009-8-20 17:09:10 | 显示全部楼层 |阅读模式
    文件位置:   C:\WINDOWS\system32\svchost.exe



   Svchost.exe是NT内核操作系统(Windows2000/XP/2003以上的版本都属于NT内核操作系统)独有的进程,“Svchost”其实就是“ServiceHost”(服务宿主)的缩写。微软官方对它的定义是:Svchost.exe是从动态链接库(DLL)中运行的服务的通用主机进程名称,通俗讲,它就是一个服务装载器"Service Loader"。有人将它比喻为 CD Player , CD 播放机,俗称:CD 机。


   由于NT内核的操作系统的系统服务越来越多,若以EXE单独进程的形式启动所有服务会大大增加系统负担,为节省系统资源,微软将一些系统服务以动态链接库(DLL)形式实现,而Svchost.exe就是用来加载这些DLL文件以启动系统服务的程序。  “没有人会为了发行一张CD而制作一台专用播放此CD的CD机,微软也一样。”


      那为什么系统进程列表中的Svchost.exe会有多个呢?微软为了让系统能更好地进行服务控制,就允许多个Svchost.exe进程同时运行,每个Svchost.exe进程可以包含一组服务,想像一下可以同时容纳3张甚至更多CD的多碟CD机。
        打开注册表[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Svchost]主键,在窗口右侧可以看到许多键值,这里的每个键值都代表一组服务,键值数据则包含了该组服务下面运行的服务名称列表,每组服务启动时都会通过单独的Svchost.exe进程来装载。

Windows XP中默认共有六组服务(见图)
1.jpg

其中imgsvc、NetworkService、rpcss、termsvcs四个组,它们都只有一个服务运行,这些服务启动后的Svchost.exe进程用户名为“SYSTEM”。

而LocalService和netsvcs组都启动了多个服务,它们的Svchost.exe进程用户名分别为“LOCAL SERVICE”和“NETWORD SERVICE”,从下图中可以看到这种区别。

2.jpg

     当然了,这六组服务通常并不都是启动状态的,根据系统启动的服务不同,反映在系统进程列表中的Svchost.exe进程数量也是不同的,WindowsXP会有四个到六个Svchost.exe进程,而Windows 2000通常则会有两个Svchost.exe进程
     

    如果要了解每个svchost进程到底提供了多少系统服务,可以在win2000的命令提示符窗口中输入“tlist -s”命令来查看,该命令是win2000 support tools提供的。
在winxp则使用“tasklist /svc”命令。


windows系统进程分为独立进程和共享进程两种,“svchost.exe”文件存在于“%systemroot%system32”目录下,它属于共享进程。随着windows系统服务不断增多,为了节省系统资源,微软把很多服务做成共享方式,交由svchost.exe进程来启动。但svchost进程只作为服务宿主,并不能实现任何服务功能,即它只能提供条件让其他服务在这里被启动,而它自己却不能给用户提供任何服务。那这些服务是如何实现的呢?

  原来这些系统服务是以动态链接库(dll)形式实现的,它们把可执行程序指向svchost,由svchost调用相应服务的动态链接库来启动服务。那svchost又怎么知道某个系统服务该调用哪个动态链接库呢?这是通过系统服务在注册表中设置的参数来实现。下面就以rpcss(remote procedure call)服务为例,进行讲解。
  
  以windows xp为例,点击“开始”/“运行”,输入“services.msc”命令,弹出服务对话框,然后打开“remote procedure call”属性对话框,
可以看到rpcss服务的可执行文件的路径为“c:\windows\system32\svchost -k rpcss”,
这说明rpcss服务是依靠svchost调用“rpcss”参数来实现的,而参数的内容则是存放在系统注册表中的。

  在运行对话框中输入“regedit.exe”后回车,打开注册表编辑器,找到[hkey_local_machine\system\currentcontrolset\services\rpcss]项,找到类型为“reg_expand_sz”的键“magepath”,其键值为“%systemroot%\system32\svchost -k rpcss”
(这就是在服务窗口中看到的服务启动命令),另外在“parameters”子项中有个名为“servicedll”的键,其值为“%systemroot%\system32\rpcss.dll”,其中“rpcss.dll”就是rpcss服务要使用的动态链接库文件。这样 svchost进程通过读取“rpcss”服务注册表信息,就能启动该服务了。



病毒:  异常的 scvhost.exe 进程


病毒并没有直接利用真正的Svchost.exe进程,而是启动了另外一个名称同样是Svchost.exe的病毒进程,由于这个假冒的病毒进程并没有加载系统服务,它和真正的Svchost.exe进程是不同的,只需在命令行窗口中运行一下“Tasklist /svc”,如果看到哪个Svchost.exe进程后面提示的服务信息是暂缺”(见图,本人PS 的)

3.jpg

而不是一个具体的服务名,那么它就是病毒进程了,记下这个病毒进程对应的PID数值(进程标识符),即可在任务管理器的进程列表中找到它,结束进程后,在C盘搜索Svchost.exe文件,也可以用第三方进程工具直接查看该进程的路径,正常的Svchost.exe文件是位于%systemroot%\System32目录中的,而假冒的Svchost.exe病毒或木马文件则会在其他目录,例如“w32.welchina.worm”病毒假冒的Svchost.exe就隐藏在Windows\System32\Wins目录中,将其删除,并彻底清除病毒的其他数据即可。


一些高级病毒则采用类似系统服务启动的方式,通过真正的Svchost.exe进程加载病毒程序,而Svchost.exe是通过注册表数据来决定要装载的服务列表的,所以病毒通常会在注册表中采用以下方法进行加载:
    * 添加一个新的服务组,在组里添加病毒服务名
    * 在现有的服务组里直接添加病毒服务名
    * 修改现有服务组里的现有服务属性,修改其“ServiceDll”键值指向病毒程序

  
  



判断方法:    病毒程序要通过真正的Svchost.exe进程加载,就必须要修改相关的注册表数据,可以打开[HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\Svchost],观察有没有增加新的服务组,同时要留意服务组中的服务列表,观察有没有可疑的服务名称,通常来说,病毒不会在只有一个服务名称的组中添加,往往会选择LocalService和netsvcs这两个加载服务较多的组,以干扰分析。
redchen
发表于 2009-8-20 22:24:07 | 显示全部楼层
呵呵,听君一席话,胜读十年书,拜读了
heroa
发表于 2009-8-20 22:55:42 | 显示全部楼层
svchost.exe一般是正常程序
sinmoons
发表于 2009-8-20 23:25:10 | 显示全部楼层
学习了
lm91128
头像被屏蔽
发表于 2009-8-20 23:35:43 | 显示全部楼层
这个要顶~
skykitty
发表于 2009-8-21 01:04:29 | 显示全部楼层
多谢!学习啦。
Asher2
发表于 2009-9-27 23:39:22 | 显示全部楼层
我的有六个svchost.exe进程,不知道正不正常。
幸福还有多远
发表于 2009-9-28 01:27:00 | 显示全部楼层
这个要顶
FateSaber
发表于 2009-9-28 11:25:50 | 显示全部楼层
学习了
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2025-1-12 01:50 , Processed in 0.160077 second(s), 19 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表