瑞星卡卡安全论坛技术交流区系统软件 windows XP 下的 svchost.exe[转]

1   1  /  1  页   跳转

windows XP 下的 svchost.exe[转]

windows XP 下的 svchost.exe[转]

windows XP 下的 svchost.exe引用:
文件位置:  C:\WINDOWS\system32\svchost.exe





     Svchost.exe是NT内核操作系统(Windows 2000/XP/2003以上的版本都属于NT内核操作系统)独有的进程,“Svchost”其实就是“Service Host”(服务宿主)的缩写。微软官方对它的定义是: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中默认共有六组服务(见图)




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


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




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

用户系统信息:Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; CIBA; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; aff-kingsoft-ciba)
最后编辑幽灵楠 最后编辑于 2009-08-13 13:53:09
分享到:
gototop
 

回复:windows XP 下的 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”服务注册表信息,就能启动该服务了。
gototop
 

回复:windows XP 下的 svchost.exe[转]

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





而不是一个具体的服务名,那么它就是病毒进程了,记下这个病毒进程对应的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这两个加载服务较多的组,以干扰分析。
gototop
 
1   1  /  1  页   跳转
页面顶部
Powered by Discuz!NT