漫钰维修网
svchost.exe是什么进程
时间:2020-11-19 16:28浏览:

svchost.exe是一个属于微软视窗操作系统的系统程序,用来执行dll文件。这个过程对于系统的正常运行非常重要。注意:svchost.exe也可能是w32.welchia.worm病毒,它利用windowslsass漏洞造成缓冲区溢出,导致您的计算机关机。详情请参考http://www . Microsoft . com/TechNet/security/bulletin/ms04-011 . mspx,此流程的安全级别建议立即删除。

大家应该知道,svchost.exe是系统不可或缺的一个流程,很多服务都会在一定程度上使用它,但我想大家都知道,因为它的特殊性,聪明的黑客肯定不会放过。我们应该记得前段时间svchost.exe的木马风暴,现在还有很多机器里面藏着这个木马,因为伪装成系统进程svchost.exe,所以很多人分不清哪个是进程,哪个是。

1.多种服务共享一个svchost.exe流程的优缺点

Windows系统服务分为独立进程和共享进程。在windows nt中,只有服务器管理器SCM(services.exe)有多个共享服务。随着内置服务的增加,在windows 2000中,微软让许多服务由svchost.exe共享和启动。Windows 2000通常有两个svchost进程,一个是rpcss(远程过程调用)服务进程,另一个是由许多服务共享的svchost.exe。在windows xp中,通常有四个以上的svchost.exe服务进程,在windows 2003 server中,则更多。可以看出,ms以共享进程的方式通过svchost启动更多的系统内置服务是一种趋势。这样做在一定程度上减少了系统资源的消耗,但是也带来了一些不稳定的因素,因为一个共享进程的任何一个服务都是误退出进程的,会导致整个进程中的所有服务都退出。另外还有一点安全隐患。首先,要介绍svchost.exe的实施机制。

2.svchost原理

Svchost本身只作为服务主机,不实现任何服务功能。svchost启动的服务需要以动态链接库的形式实现。安装这些服务时,服务的可执行程序指向svchost,启动这些服务时,svchost调用相应服务的动态链接库来启动服务。 那么svchost怎么知道某项服务是哪个动态链接库负责的呢?这不是服务

提供了服务的可执行路径中的参数,但是服务的参数是在注册表中设置的。注册表中的服务下有一个Parameters子项,其中servicedll指示哪个动态链接库负责该服务。所有这些服务动态链接库必须导出一个servicemain()函数来处理服务任务。 例如,rpcss(远程过程调用)在注册表中的位置是HKEY _本地_ machinetsystemcurrentcontrolsetservicesrpcs,它的参数子键参数有这样一项: " service dll " = reg _ expand _ SZ:" % systemroot % system32 pcss . dll " 当rpcss服务启动时,svchost将调用rpcss并执行它的servicemain()函数来执行具体的服务。 既然这些服务都是svchost以共享进程的方式启动的,为什么系统中会有多个svchost进程?ms将这些服务分成几个组。同一组中的服务共享一个svchost进程,而不同组中的服务使用多个svchost进程。组之间的差异由服务的可执行程序背后的参数决定。 例如,Rpcss在注册表中有这样一个条目HKEY _ local _ machinetsystemcurrentcontrolsetservicesrpcs: " image path " = reg _ expand _ SZ:" % systemroot % system32 SVC host-k rpcss " 因此,rpcss属于rpcss组,这也可以在服务管理控制台中看到。 svchost的所有组和组中的所有服务都位于注册表中的以下位置:HKEY _本地_机器软件crosoftwinwindows ntcurrentversionsvhost,例如,在windows 2000中有四组rpcss、netsvcs、wgroup和bitsgroup。最常见的是netsvcs = reg _ multi _ SZ:event system . IAS . iprip . irmon . netman . nwsap agent . rasauto . rasman . remote access . sens . shared access . tapis RV . ntmssvc . wzcsvc.. 当启动svchost.exe负责的服务时,如果服务管理器遇到服务管理器的映像库中已经存在可执行内容imagepath,它将不会启动第二个进程svchost,而是直接启动服务。这样,多个服务共享一个svchost进程。

3.svchost代码

现在

我们基本知道svchost的原理,但是我们要以dll的形式写一个服务,这个服务是由svchost启动的。只是以上信息和一些问题不太清楚。例如,我们在导出的servicemain()函数中接收的参数是ansi还是unicode?我们需要调用registerservicectrlhandler和startservicectrldispatcher来注册服务控制和调度函数吗? 这些问题要看svchost代码才能得到。下面的代码是windows 2000+ service pack 4的svchost反汇编片段,说明svchost程序还是很简单的。 主函数首先调用proccommandline()分析命令行,获取要启动的服务组,然后调用svchostoptions()查询服务组的选项和服务组的所有服务,并使用一个可检测的数据结构保存这些服务及其dll。然后调用preparesvctable()函数创建service_table_entry结构,将所有处理函数service_main_function指向自己的一个函数funcservicemain(),最后调用api startservicectrldispatcher()注册这些服务的调度函数。 由于svchost已经在svchost中为该组中的所有服务注册了一个处理程序,因此每次启动任何服务时,服务管理器scm都会调用funcservicemain()。函数使用SV detail查询待启动服务使用的dll,调用dll导出的servicemain()函数启动服务,然后返回。 由于svchost已经调用了startservicectrldispatcher来服务调度函数,所以我们在实现dll时不需要它,主要是因为一个进程只能调用一次startservicectrldispatcher api。但是,需要registerservicectrlhandler来注册响应控制请求的函数。最后,我们的dll接收unicode字符串。 由于此服务在启动后由svchost加载,没有添加新的进程,它只是svchost的一个dll,一般在审核时,不会去HKEY _ local _ machineoftwarecosoftwinwindows ntcurrentversionsvhost检查服务组是否发生变化,即使检查了,也可能找不到异常。所以如果加了这样的dll后门,伪装的很好,也比较隐蔽。 4.安装服务和设置 要通过svchost调用启动服务,它必须在HKEY本地机器软件控制台窗口中

ntcurrentversionsvchost下有这个服务名,可以通过以下方式实现: 1)添加新的服务组,并在该组中添加服务名称 2)在现有组中添加服务名称 3)直接使用现有服务组中的服务名称,但此机器上没有安装任何服务 4)修改现有服务组中的现有服务,并将其服务dll指向自身 其中前两种可以被正常服务使用。例如,在第一种方式中,为了启动它的服务,应该创建一个新的svchost进程;第二种方法是,如果服务组已经在运行,则服务不能在安装后立即启动,因为在svchost启动后,组信息已经保存在内存中,并且已经调用了api startservicectrldispatcher()来注册组中所有服务的调度处理函数。新添加的服务无法再注册调度处理功能,需要重新启动计算机或组中的svchost进程。后两种可能会被后门使用,特别是最后一种,不添加服务,只改变注册表中的一个设置。从服务管理控制台是看不到的,如果当后门用还是很隐蔽的。例如,默认情况下,eventsystem服务指向es.dll,如果将servicedll更改为eventsystem,则很难找到该服务。 因此,除了调用createservice()创建服务之外,服务的安装还需要设置服务的servicedll。如果使用前两个选项,还应该设置svchost的注册表选项,卸载时最好删除添加的部分。 注意:imagepath和servicedll是扩展字符串,不是普通字符串。所以安装使用的时候要注意。reg文件。 5.DLL服务的实现 写dll程序比较简单,只要实现一个serviceman()函数和一个服务控制程序,在serviceman()函数中用registerservicectrlhandler()注册服务控制程序,设置服务的运行状态即可。 此外,因为此服务的安装需要除正常的createservice()之外的其他设置,所以最好实现安装和卸载功能。 为了安装方便,实现的代码提供了installservice()函数进行安装。该函数可以接收服务名作为参数(如果没有提供参数,将使用默认的iprip)。如果要安装的服务没有安装在svchost的netsvcs组中,它将失败。如果要安装的服务已经存在,安装也将失败;成功安装后,程序会将服务的servicedll配置为当前dll。提供的uninstallservice()函数可以删除任何函数,而无需任何检查。 为了便于使用rundll32.exe进行安装,还提供了rundllinstalla()和rundllinstalla(),分别调用installservice()和unin

stallservice().因为rundll32.exe使用的函数原型是: void回调函数名( hwnd hwnd,//所有者窗口句柄 hinstance hinst,dll的实例句柄 lptstr lpcmdline//dll将解析的字符串 int ncmdshow //显示状态 ); 相应的命令行是rundll32 dllname,functionname dll服务本身只是创建一个进程。程序的命令行是启动服务时提供的第一个参数。如果未指定,将使用默认的svchostdll.exe。如果在启动服务时提供了第二个参数,则创建的进程将与桌面交互。 从启动参数可以看出,服务是由svchost启动的。 例子 以windows xp为例,点击“开始”/“运行”,输入“services.msc”命令,弹出服务对话框,然后打开“远程过程调用”属性对话框。您可以看到rpcss服务的可执行文件路径是“c:\ windows \ system32 \ svchost-kr PCs”。这说明rpcss服务是通过svchost调用“rpcss”参数实现的,参数的内容存储在系统注册表中。 在运行对话框中输入“regedit.exe”,然后按回车键,打开注册表编辑器,找到“reg_expand_sz”类型的注册表项“magepath”,其键值为“% systemroot % system32 svcost-krpcss”(这是在服务窗口中看到的服务启动命令)。此外,在“参数”子项目中,有一个名为“servicedll”的键,其值为“%systemroot%system32rpcss.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 Optimizer”进程管理器,通过它可以轻松查看svchost进程的所有执行文件的路径。一旦您发现执行路径是不寻常的位置,您应该立即检测并处理它们。 svchost.exe病毒的检测和杀灭方法 1.假冒svchost.exe程序的病毒 正在运行的病毒没有直接使用真实的svchost.exe,而是启动了一个与svchost.exe同名的病毒进程。因为没有加载系统服务,所以它不同于真正的svchost.exe过程。只需在命令行窗口中运行“tasklist /svc”。如果您看到由svchost.exe进程提示的服务信息“丢失”,而不是特定的服务名称,那么这是一个病毒进程。记下这个病毒进程对应的pid值(进程标识符),可以在任务管理器的进程列表中找到。进程完成后,在c盘中搜索svchost.exe文件,或者可以用第三方进程工具直接查看这个进程的路径。正常的svchost.exe文件位于% systemroot%\system32目录,而假的svchost.exe文件位于其他目录。 2.一些高级病毒通过真实svchost.exe进程加载病毒程序,其方式类似于系统服务启动,而svchost.exe通过注册表数据确定要加载的服务列表,因此病毒通常通过以下方式加载到注册表中: 添加新的服务组,并在组中添加病毒服务名称 将病毒服务名称直接添加到现有服务组 修改现有服务组中的现有服务属性,并修改其“servicedll”键值以指向病毒程序 如果要通过真实的svchost.exe进程加载病毒程序,它必须修改相关的注册表数据,并且可以打开它来观察是否添加了新的服务组。同时要注意服务组中的服务列表,观察是否有可疑的服务名称。一般来说,只有一个服务名的组是不会添加病毒的,往往会选择加载服务较多的localservice和netsvcs来干扰分析。也可以通过修改服务属性来指向

通过注册表很难判断病毒程序。此时,您可以使用前面介绍的服务管理专家分别打开localservice和netsvcs分支,逐个检查右侧服务列表中的服务属性。特别要注意的是,服务描述信息都是英文的,很可能是第三方安装的服务。同时结合其文件描述、版本、公司等相关信息进行综合判断。 svchost.exe病毒的简单治疗: 1.如果您发现svchost.exe不在%systemroot%\system32目录中,您可以安全地将其删除。同时,在注册表中找到对应的注册条目,将其删除。 2.svchost.exe位于目录%systemroot%\system32中,这意味着svchost.exe感染了病毒,可以通过防病毒软件清除。 注:应明确区分清除和删除。清除意味着清除病毒,而删除意味着删除文件 svchost.exe开始了什么服务? 回答: 如果您想知道每个svchost进程当前提供什么系统服务,可以在命令提示符下输入命令查看。比如在windows xp中,打开“命令提示符”,键入tasklist /svc命令查看;在windows 2000中,输入“tlist -s”命令来查看它。如果 如果想获取windows xp中所有进程的详细信息,可以打开“命令提示符”,键入tasklist/SVC >: Abc.txt命令,这样在当前目录下,就会生成一个Abc.txt文件,其内容是所有正在运行的进程,比如进程名、pid号、进程启动了哪些服务。 清除svchost.exe病毒的方法: 1.使用unlocker删除文件夹,如c:\sysdayn6:例如c:\syswm1i、c:\sysad5d等。这些文件夹有一个共同的特点,就是名字是sys*** (*** (* *是3到5位数的随机字母),所以删除几个这样的文件夹。 2.start-run-enter " regedit "-打开注册表并将注册表展开到以下位置: HKEY _ current _ user \ software \ Microsoft \ windows \ current version \ policies \ explorer \ run

删除右边所有带纯数字的按键,如 & lt66 >& ltc:\ sysdayn 6 \ svchost . exe & gt; & lt333 >& ltc:\ syswm 1i \ svchost . exe & gt; & lt50英镑。& ltc:\ sysad5d \ svchost . exe & gt; & lt4 >& ltc:\syswsj7

\svchost.exe > 3.重启电脑,病毒清除。

  • 上一篇:Ghost的另类用法
  • 下一篇:灰鸽子原理详解及防治清除方法
  • 头条推荐
    相关推荐
    Copyright © 2012 - 2019 www.haiercq.com All Rights Reserved. 漫钰维修网
    蜀ICP备14029888号-1   

    您要预约的项目是

    已有人预约

  • 立即预约