解开SVCHOST.exe进程之谜

2024-01-21 14:48
文章标签 exe 进程 之谜 解开 svchost

本文主要是介绍解开SVCHOST.exe进程之谜,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 大家对Windows操作系统一定不陌生,但你是否注意到系统中“SVCHOST.EXE”这个文件呢?细心的朋友会发现Windows中存在多个“SVCHOST”进程(通过“Ctrl+Alt+Del”键打开任务管理器,这里的“进程”标签中就可看到了),为什么会这样呢?下面就来揭开它神秘的面纱。

 发现

在基于NT内核的Windows操作系统家族中,不同版本的Windows系统,存在不同数量的“SVCHOST”进程,用户使用“任务管理器”可查看其进程数目。一般来说,Win2000有两个SVCHOST进程,WinXP中则有四个或四个以上的SVCHOST进程(以后看到系统中有多个这种进程,千万别立即判定系统有病毒了哟),而Win2003 server中则更多。这些SVCHOST进程提供很多系统服务,如:RpcSs服务(Remote Procedure Call)、dmserver服务(Logical Disk Manager)、Dhcp服务(DHCP Client)等。

  如果要了解每个SVCHOST进程到底提供了多少系统服务,可以在Win2000的命令提示符窗口中输入“Tlist -S”命令来查看,该命令是Win2000 Support Tools提供的。在WinXP则使用“tasklist /svc”命令。

  

解开SVCHOST.exe进程之谜
深入

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

  原来这些系统服务是以动态链接库(DLL)形式实现的,它们把可执行程序指向SVCHOST,由SVCHOST调用相应服务的动态链接库来启动服务。那SVCHOST又怎么知道某个系统服务该调用哪个动态链接库呢?这是通过系统服务在注册表中设置的参数来实现。下面就以RpcSs(Remote Procedure Call)服务为例,进行讲解。

  
解开SVCHOST.exe进程之谜
实例:笔者以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”服务注册表信息,就能启动该服务了。  

  解惑  

  因为SVCHOST进程启动各种服务,所以病毒、木马也想尽办法来利用它,企图利用它的特性来迷惑用户,达到感染、入侵、破坏的目的(如冲击波变种病毒“W32.Welchia.Worm”)。 但Windows系统存在多个SVCHOST进程是很正常的,在受感染的机器中到底哪个是病毒进程呢?这里仅举一例来说明。

  假设Windows XP系统被“W32.Welchia.Worm”感染了。正常的SVCHOST文件存在于“C:/Windows/system32”目录下,如果发现该文件出现在其他目录下就要小心了。“W32.Welchia.Worm”病毒存在于“C:/Windows/system32/wins”目录中,因此使用进程管理器查看SVCHOST进程的执行文件路径就很容易发现系统是否感染了病毒。Windows系统自带的任务管理器不能够查看进程的路径,可以使用第三方进程管理软件,如“Windows优化大师”进程管理器,通过这些工具就可很容易地查看到所有的SVCHOST进程的执行文件路径,一旦发现其执行路径为不平常的位置就应该马上进行检测和处理。

  由于篇幅的关系,不能对SVCHOST全部功能进行详细介绍,这是一个Windows中的一个特殊进程,有兴趣的朋友可参考有关技术资料进一步去了解它。

  WinXP中SVCHOST.EXE的资料:

  http://support.microsoft.com/default.aspx?scid=kb;en-us;314056。

  Win2000中SVCHOST.EXE的资料:

  http://support.microsoft.com/default.aspx?scid=kb;en-us;250320

  
解开SVCHOST.exe进程之谜

这篇关于解开SVCHOST.exe进程之谜的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/629889

相关文章

Python多进程、多线程、协程典型示例解析(最新推荐)

《Python多进程、多线程、协程典型示例解析(最新推荐)》:本文主要介绍Python多进程、多线程、协程典型示例解析(最新推荐),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 目录一、multiprocessing(多进程)1. 模块简介2. 案例详解:并行计算平方和3. 实现逻

C#通过进程调用外部应用的实现示例

《C#通过进程调用外部应用的实现示例》本文主要介绍了C#通过进程调用外部应用的实现示例,以WINFORM应用程序为例,在C#应用程序中调用PYTHON程序,具有一定的参考价值,感兴趣的可以了解一下... 目录窗口程序类进程信息类 系统设置类 以WINFORM应用程序为例,在C#应用程序中调用python程序

Python如何精准判断某个进程是否在运行

《Python如何精准判断某个进程是否在运行》这篇文章主要为大家详细介绍了Python如何精准判断某个进程是否在运行,本文为大家整理了3种方法并进行了对比,有需要的小伙伴可以跟随小编一起学习一下... 目录一、为什么需要判断进程是否存在二、方法1:用psutil库(推荐)三、方法2:用os.system调用

将Java程序打包成EXE文件的实现方式

《将Java程序打包成EXE文件的实现方式》:本文主要介绍将Java程序打包成EXE文件的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录如何将Java程序编程打包成EXE文件1.准备Java程序2.生成JAR包3.选择并安装打包工具4.配置Launch4

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

Linux中的进程间通信之匿名管道解读

《Linux中的进程间通信之匿名管道解读》:本文主要介绍Linux中的进程间通信之匿名管道解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、基本概念二、管道1、温故知新2、实现方式3、匿名管道(一)管道中的四种情况(二)管道的特性总结一、基本概念我们知道多

Linux进程终止的N种方式详解

《Linux进程终止的N种方式详解》进程终止是操作系统中,进程的一个重要阶段,他标志着进程生命周期的结束,下面小编为大家整理了一些常见的Linux进程终止方式,大家可以根据需求选择... 目录前言一、进程终止的概念二、进程终止的场景三、进程终止的实现3.1 程序退出码3.2 运行完毕结果正常3.3 运行完毕

Windows命令之tasklist命令用法详解(Windows查看进程)

《Windows命令之tasklist命令用法详解(Windows查看进程)》tasklist命令显示本地计算机或远程计算机上当前正在运行的进程列表,命令结合筛选器一起使用,可以按照我们的需求进行过滤... 目录命令帮助1、基本使用2、执行原理2.1、tasklist命令无法使用3、筛选器3.1、根据PID

linux本机进程间通信之UDS详解

《linux本机进程间通信之UDS详解》文章介绍了Unix域套接字(UDS)的使用方法,这是一种在同一台主机上不同进程间通信的方式,UDS支持三种套接字类型:SOCK_STREAM、SOCK_DGRA... 目录基础概念本机进程间通信socket实现AF_INET数据收发示意图AF_Unix数据收发流程图A

Python中多线程和多进程的基本用法详解

《Python中多线程和多进程的基本用法详解》这篇文章介绍了Python中多线程和多进程的相关知识,包括并发编程的优势,多线程和多进程的概念、适用场景、示例代码,线程池和进程池的使用,以及如何选择合适... 目录引言一、并发编程的主要优势二、python的多线程(Threading)1. 什么是多线程?2.