热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

svchost.exe进程的分析

你是否经常在你电脑看到很多svchost.exe进程呢?有的人电脑有6个svchost.exe进程、有的人电脑更多的svchost.exe进程。例如我的电脑就有5个svchost.exe程序
你是否经常在你电脑看到很多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是启动了的哪些服务是正常的。




推荐阅读
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 本文详细介绍如何使用arm-eabi-gdb调试Android平台上的C/C++程序。通过具体步骤和实用技巧,帮助开发者更高效地进行调试工作。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • 本文探讨了SkyWalking和Prometheus两种流行的监控工具在应用埋点中的不同实现方式。SkyWalking采用主动推送(push)模式,而Prometheus则使用服务器拉取(server pull)模式。 ... [详细]
  • 使用C#开发SQL Server存储过程的指南
    本文介绍如何利用C#在SQL Server中创建存储过程,涵盖背景、步骤和应用场景,旨在帮助开发者更好地理解和应用这一技术。 ... [详细]
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
author-avatar
哦呦喂酿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有