svchost.exe进程的分析

来源:互联网 发布:淘宝网人气女模特 编辑:程序博客网 时间:2024/05/01 20:44
你是否经常在你电脑看到很多svchost.exe进程呢?有的人电脑有6个svchost.exe进程、有的人电脑更多的svchost.exe进程。例如我的电脑就有5个svchost.exe程序。一般来说Windows 2000有两个这样的进程,XP中有4~6个,Win7中一般是6个,但这都不是绝对的,或许有的人会这样想,是不是我多了就不正常,其实并不是这样的,svchost.exe进程是个核心宿主进程,这个程序对系统的正常运行是非常重要,而且是不能随意被结束的,一旦结束可能会造成系统崩溃、关机。但很多木马也会通过模仿该进程名或者通过DLL注入到该进程之中。下面unis就带大家去分析下svchost.exe进程。



  Svchost 全称是“Service host”,翻译成中文来说“服务的宿主程序”。所以我们经常说svchot.exe就是一个宿主服务进程。它所在的路径为:C:\Windows\System32\Svchost.exe。它是一个可执行文件。下面我们一起来学习几点关于Svchost.exe必要的知识。

【1】:服务对应的二进制文件可分为可执行文件和DLL动态链接库文件两类。对于可执行文件来说,本身就是一个宿主程序,但是对于DLL动态链接库来说不可以直接去执行它,只有通过一个宿主程序来调用它来进行执行。对于服务,我们可以通过开始——运行——输入“services.msc”进入到服务。我们就拿个最简单的Telnet服务来说,右击可以看到它所调用的文件就是C:\Windows\System32\tlnsvr.exe的可执行文件,这种可执行文件本身就是一个服务宿主程序,不需要调用DLL动态链接来实现,如果该宿主文件不存在,或者文件名不对,那么就无法启动Telnet服务了。当我们启动Telnet的时候,进程中自然多出一个服务宿主程序的进程。而对于某些服务需要调用DLL动态链接库,如果我们直接去运行DLL动态链接库是无法直接执行的,必须通过一个宿主程序来进行调用执行,经常使用到的这个服务宿主程序就是Svchost.exe



【2】Svhost.exe,是大多数Windows服务的宿主程序。Svchost.exe程序就是一个用于加载服务对应的二进制文件为DLL的宿主程序。我们可以通过冰刃来查看一下,如图所示:



【3】Svchost.exe一般位于%systemroot%\system32目录里,如果启用了DllCache功能,还可能备份在%systemroot%system32\dllcache目录下,另外,如果WindowsService Pack不是使用集成安装的,也就是不是集成SP补丁包的而是通过微软更新的,那么还可能存在于%systemroot%\ServicePack目录下。除此之外Svchost.exe不应该存在其它目录下,如果存在,那么这个Svchost.exe可能不是系统自带的而是一种病毒等一些而已软件生成的,请小心检查。特别是一些木马经常使用这个程序来进行伪装运行在内存中。这里我们用dir命令来查找下我的Svchost.exe所在的位置:



【4】Svchost.exe作为服务的宿主程序,在启动的时候,通过以下方法来启动服务:系统启动的时候,系统读取注册表:
  HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Svchost下的键值,在这个分支下,有很多键值为REG_MULTI_SZ的键值,也就是多字符串值,在该主键下每一个键值代表着一组服务。Svchost.exe的每个实例将执行一个键值为REG_MULTI_SZ的键值,举例来说,当Svchost.exe开始读取netsvcs的时候,系统将创建一个svchost.exe的实例(在任务管理器里面呈现为进行)来处理netsvcs键值的数据。所有在netsvcs里面描述的服务将运行于一个svchost.exe进程里面,也就是说,一个svchost.exe将处理所有netsvcs里面记录的服务。这就是所谓宿主的概念,我们下面用系统的其中一个svchost.exe来讲解下启动注册表中DcomLaunch键值下的两个服务,我们分别可以从服务中看到这两个服务执行的参数都是svchost.exe  -k DcomLaunch,如图所示:



并且通过CMD下的进程服务显示命令“tasklist /svc”来查看我们的那个进程的PID值就知道是进程的哪个Svchost.exe执行的这两个服务,如图:



不过有一点需要注意,如果有任何一个服务发生问题,可能导致宿主程序svchost.exe的崩溃,甚至导致Windows崩溃。如果强制结束svchost.exe进程,那么这个宿主程序所启动的服务都将停止崩溃。

【5】在不停的系统中,svchost.exe的实例数目是不相同的。这是因为微软将不同的服务归结到不同的svchost.exe实例中,在Windows Server 2003XP下,RpcSc(提供终结点映射服务RPC服务)服务就单独的由一个svchost.exe实例负责,这是为了保证不会由于其它服务的错误而导致整个svchost.exe进程错误。而netsvcs中的几十个服务却也使用一个Svchost.exe实例来进行负责,我们可以通过“tasklist /svc” 和注册表中就可以轻易的看到,如图:



【6】我们可以这样理解:如果有一个svchost.exe作为2和服务的宿主,其中一个是系统重要的服务A,如果A停止,则整个系统就崩溃,而另外一个是服务B,B不是一个重要的服务,停止B不会引起整个系统的崩溃。如果某一天服务B发生异常,导致B的宿主程序svchost.exe崩溃,那么也会导致服务A崩溃。从而导致系统崩溃。

【7】一个svchost.exe作为几个服务的宿主很重要的,也不要对自己的系统里面的svchost.exe实例数量为什么要比别人多,其实影响svchost.exe实例数量完全决定于你开启的服务的数量或者某些程序需要通过注入到该宿主服务中进行启动。如果某些不需要的服务可以停止掉以减少内存的使用,如果停止的一些服务都是包含于一个svchost.exe,那么这个进程就会不再启动,因为没有服务需要这个实例进行启动了。微软之所以将那么多服务使用一个宿主程序来启动就是为了节省我们的系统资源。  
  
【8】要想知道我们进程中的每一个Svchost.exe分别是启动了哪些服务,可以通过tasklist /svc查看每一个加载不同服务的svchost.exe的PID值,并且在任务管理器查看——选择列——勾选PID(进程标识符),这样就可以很好的知道哪个svchost.exe是加载哪些服务的。

【9】如何使用辅助工具判断svchost.exe是否为伪造进程呢?第一个就是判断svchost.exe的所在的启动路径,正常的路径都是在C:\Windwos\System32下,第二个还是必须要大家的经验,也就是说,你必须要熟悉一个正常系统的svchost.exe是启动了的哪些服务是正常的。



0 0
原创粉丝点击