做网页和网站有什么区别吗如何做导航网站

当前位置: 首页 > news >正文

做网页和网站有什么区别吗,如何做导航网站,网站推广和优化的原因,江门地区网站建设公司SvcHost详解 2007-04-15 11:47 SvcHost详解!     大家都要知道Svchost.exe,是系统必不可少的一个进程,很多服务都会多多少少用到它,   但是我想大家也知道,由于它本身特殊性,高明的黑客们肯定是不会放过的,前段时间的Svchost.exe木马风波,大家应该是记忆犹新吧…SvcHost详解 2007-04-15 11:47 SvcHost详解!     大家都要知道Svchost.exe,是系统必不可少的一个进程,很多服务都会多多少少用到它,   但是我想大家也知道,由于它本身特殊性,高明的黑客们肯定是不会放过的,前段时间的Svchost.exe木马风波,大家应该是记忆犹新吧,而且现在还是有很多机器里都藏有此木马,因为它伪装和系统进程Svchost.exe一样,所以很多人分不清,那个是进程,那个是木马….  好的,还是让我们详尽了解一下Svchost.exe进程吧    1.多个服务共享一个 Svchost.exe进程利与弊   windows 系统服务分为独立进程和共享进程两种在windows NT时只有服务器管理器SCMServices.exe有多个共享服务随着系统内置服务的增加在windows 2000中ms又把很多服务做成共享方式由svchost.exe启动。windows 2000一般有2个svchost进程一个是RPCSSRemote Procedure Call服务进程另外一个则是由很多服务共享的一个svchost.exe。而在windows XP中则一般有4个以上的svchost.exe服务进程windows 2003 server中则更多可以看出把更多的系统内置服务以共享进程方式由svchost启动是ms的一个趋势。这样做在一定程度上减少了系统资源的消耗不过也带来一定的不稳定因素因为任何一个共享进程的服务因为错误退出进程就会导致整个进程中的所有服务都退出。另外就是有一点安全隐患首先要介绍一下svchost.exe的实现机制。     2. Svchost原理  Svchost本身只是作为服务宿主并不实现任何服务功能需要Svchost启动的服务以动态链接库形式实现在安装这些服务时把服务的可执行程序指向svchost启动这些服务时由svchost调用相应服务的动态链接库来启动服务。    那么svchost如何知道某一服务是由哪个动态链接库负责呢这不是由服务的可执行程序路径中的参数部分提供的而是服务在注册表中的参数设置的注册表中服务下边有一个Parameters子键其中的ServiceDll表明该服务由哪个动态链接库负责。并且所有这些服务动态链接库都必须要导出一个ServiceMain()函数用来处理服务任务。    例如rpcssRemote Procedure Call在注册表中的位置是 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesRpcSs它的参数子键Parameters里有这样一项  ServiceDllREG_EXPAND_SZ:%SystemRoot%system32 pcss.dll  当启动rpcss服务时svchost就会调用rpcss.dll并且执行其ServiceMain()函数执行具体服务。    既然这些服务是使用共享进程方式由svchost启动的为什么系统中会有多个svchost进程呢ms把这些服务分为几组同组服务共享一个svchost进程不同组服务使用多个svchost进程组的区别是由服务的可执行程序后边的参数决定的。    例如rpcss在注册表中 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesRpcSs 有这样一项  ImagePathREG_EXPAND_SZ:%SystemRoot%system32svchost -k rpcss  因此rpcss就属于rpcss组这在服务管理控制台也可以看到。    svchost的所有组和组内的所有服务都在注册表的如下位置 HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionSvchost例如windows 2000共有4组rpcss、netsvcs、wugroup、BITSgroup其中最多的就是netsvcsREG_MULTI_SZ:EventSystem.Ias.Iprip.Irmon.Netman.    Nwsapagent.Rasauto.Rasman.Remoteaccess.SENS.Sharedaccess.Tapisrv.Ntmssvc.wzcsvc..    在启动一个svchost.exe负责的服务时服务管理器如果遇到可执行程序内容ImagePath已经存在于服务管理器的映象库中就不在启动第2个进程svchost而是直接启动服务。这样就实现了多个服务共享一个svchost进程。    3. Svchost代码  现在我们基本清楚svchost的原理了但是要自己写一个DLL形式的服务由svchost来启动仅有上边的信息还有些问题不是很清楚。比如我们在导出的ServiceMain()函数中接收的参数是ANSI还是Unicode我们是否需要调用RegisterServiceCtrlHandler和StartServiceCtrlDispatcher来注册服务控制及调度函数    这些问题要通过查看svchost代码获得。下边的代码是windows 2000 service pack 4 的svchost反汇编片段可以看出svchost程序还是很简单的。    主函数首先调用ProcCommandLine()对命令行进行分析获得要启动的服务组然后调用SvcHostOptions()查询该服务组的选项和服务组的所有服务并使用一个数据结构 svcTable 来保存这些服务及其服务的DLL然后调用PrepareSvcTable() 函数创建 SERVICE_TABLE_ENTRY 结构把所有处理函数SERVICE_MAIN_FUNCTION 指向自己的一个函数FuncServiceMain()最后调用API StartServiceCtrlDispatcher() 注册这些服务的调度函数。     ; Main Funcion   .text:010010B8 public start  .text:010010B8 start proc near  .text:010010B8 push esi  .text:010010B9 push edi  .text:010010BA push offset sub_1001EBA ; lpTopLevelExceptionFilter  .text:010010BF xor edi, edi  .text:010010C1 call ds:SetUnhandledExceptionFilter  .text:010010C7 push 1 ; uMode  .text:010010C9 call ds:SetErrorMode  .text:010010CF call ds:GetProcessHeap  .text:010010D5 push eax  .text:010010D6 call sub_1001142  .text:010010DB mov eax, offset dword_1003018  .text:010010E0 push offset unk_1003000 ; lpCriticalSection  .text:010010E5 mov dword_100301C, eax  .text:010010EA mov dword_1003018, eax  .text:010010EF call ds:InitializeCriticalSection  .text:010010F5 call ds:GetCommandLineW  .text:010010FB push eax ; lpString  .text:010010FC call ProcCommandLine  .text:01001101 mov esi, eax  .text:01001103 test esi, esi  .text:01001105 jz short lab_doservice  .text:01001107 push esi  .text:01001108 call SvcHostOptions  .text:0100110D call PrepareSvcTable  .text:01001112 mov edi, eax ; SERVICE_TABLE_ENTRY returned  .text:01001114 test edi, edi  .text:01001116 jz short loc_1001128  .text:01001118 mov eax, [esi10h]  .text:0100111B test eax, eax  .text:0100111D jz short loc_1001128  .text:0100111F push dword ptr [esi14h] ; dwCapabilities  .text:01001122 push eax ; int  .text:01001123 call InitializeSecurity  .text:01001128   .text:01001128 loc_1001128: ; CODE XREF: start5Ej  .text:01001128 ; start65j  .text:01001128 push esi ; lpMem  .text:01001129 call HeapFreeMem  .text:0100112E   .text:0100112E lab_doservice: ; CODE XREF: start4Dj  .text:0100112E test edi, edi  .text:01001130 jz ExitProgram  .text:01001136 push edi ; lpServiceStartTable  .text:01001137 call ds:StartServiceCtrlDispatcherW  .text:0100113D jmp ExitProgram  .text:0100113D start endp  ; Main Funcion end     由于svchost为该组的所有服务都注册了svchost中的一个处理函数因此每次启动任何一个服务时服务管理器SCM都会调用FuncServiceMain() 这个函数。这个函数使用 svcTable 查询要启动的服务使用的DLL调用DLL导出的ServiceMain()函数来启动服务然后返回。   ; FuncServiceMain()   .text:01001504 FuncServiceMain proc near ; DATA XREF: PrepareSvcTable44o  .text:01001504   .text:01001504 arg_0 dword ptr 8  .text:01001504 arg_4 dword ptr 0Ch  .text:01001504   .text:01001504 push ecx  .text:01001505 mov eax, [esparg_4]  .text:01001509 push ebx  .text:0100150A push ebp  .text:0100150B push esi  .text:0100150C mov ebx, offset unk_1003000  .text:01001511 push edi  .text:01001512 mov edi, [eax]  .text:01001514 push ebx  .text:01001515 xor ebp, ebp  .text:01001517 call ds:EnterCriticalSection  .text:0100151D xor esi, esi  .text:0100151F cmp dwGroupSize, esi  .text:01001525 jbe short loc_1001566  .text:01001527 and [esp10h], esi  .text:0100152B   .text:0100152B loc_100152B: ; CODE XREF: FuncServiceMain4Aj  .text:0100152B mov eax, svcTable  .text:01001530 mov ecx, [esp10h]  .text:01001534 push dword ptr [eaxecx]  .text:01001537 push edi  .text:01001538 call ds:lstrcmpiW  .text:0100153E test eax, eax  .text:01001540 jz short StartThis  .text:01001542 add dword ptr [esp10h], 0Ch  .text:01001547 inc esi  .text:01001548 cmp esi, dwGroupSize  .text:0100154E jb short loc_100152B  .text:01001550 jmp short loc_1001566  .text:01001552 ;   .text:01001552   .text:01001552 StartThis: ; CODE XREF: FuncServiceMain3Cj  .text:01001552 mov ecx, svcTable  .text:01001558 lea eax, [esiesi*2]  .text:0100155B lea eax, [ecxeax*4]  .text:0100155E push eax  .text:0100155F call GetDLLServiceMain  .text:01001564 mov ebp, eax ; dll ServiceMain Function address  .text:01001566   .text:01001566 loc_1001566: ; CODE XREF: FuncServiceMain21j  .text:01001566 ; FuncServiceMain4Cj  .text:01001566 push ebx  .text:01001567 call dseaveCriticalSection  .text:0100156D test ebp, ebp  .text:0100156F jz short loc_100157B  .text:01001571 push [esp10harg_4]  .text:01001575 push [esp14harg_0]  .text:01001579 call ebp  .text:0100157B   .text:0100157B loc_100157B: ; CODE XREF: FuncServiceMain6Bj  .text:0100157B pop edi  .text:0100157C pop esi  .text:0100157D pop ebp  .text:0100157E pop ebx  .text:0100157F pop ecx  .text:01001580 retn 8  .text:01001580 FuncServiceMain endp ; sp -8  ; FuncServiceMain() end     由于svchost已经调用了StartServiceCtrlDispatcher来服务调度函数因此我们在实现DLL实现时就不用了这主要是因为一个进程只能调用一次StartServiceCtrlDispatcher API。但是需要用 RegisterServiceCtrlHandler 来注册响应控制请求的函数。最后我们的DLL接收的都是unicode字符串。    由于这种服务启动后由svchost加载不增加新的进程只是svchost的一个DLL而且一般进行审计时都不会去HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionSvchost 检查服务组是否变化就算去检查也不一定能发现异常因此如果添加一个这样的DLL后门伪装的好是比较隐蔽的。    4. 安装服务与设置  要通过svchost调用来启动的服务就一定要在HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionSvchost下有该服务名这可以通过如下方式来实现  1 添加一个新的服务组在组里添加服务名  2 在现有组里添加服务名  3 直接使用现有服务组里的一个服务名但本机没有安装的服务  4 修改现有服务组里的现有服务把它的ServiceDll指向自己    其中前两种可以被正常服务使用如使用第1种方式启动其服务要创建新的svchost进程第2种方式如果该组服务已经运行安装后不能立刻启动服务因为svchost启动后已经把该组信息保存在内存里并调用API StartServiceCtrlDispatcher() 为该组所有服务注册了调度处理函数新增加的服务不能再注册调度处理函数需要重起计算机或者该组的svchost进程。而后两种可能被后门使用尤其是最后一种没有添加服务只是改了注册表里一项设置从服务管理控制台又看不出来如果作为后门还是很隐蔽的。比如EventSystem服务缺省是指向es.dll如果把ServiceDll改为EventSystem.dll就很难发现。    因此服务的安装除了调用CreateService()创建服务之外还需要设置服务的ServiceDll如果使用前2种还要设置svchost的注册表选项在卸载时也最好删除增加的部分。    注 ImagePath 和ServiceDll 是ExpandString不是普通字符串。因此如果使用.reg文件安装时要注意。    5. DLL服务实现  DLL程序的编写比较简单只要实现一个ServiceMain()函数和一个服务控制程序在ServiceMain()函数里用RegisterServiceCtrlHandler()注册服务控制程序并设置服务的运行状态就可以了。    另外因为此种服务的安装除了正常的CreateService()之外还要进行其他设置因此最好实现安装和卸载函数。     为了方便安装实现的代码提供了InstallService()函数进行安装这个函数可以接收服务名作为参数如果不提供参数就使用缺省的iprip如果要安装的服务不在svchost的netsvcs组里安装就会失败如果要安装的服务已经存在安装也会失败安装成功后程序会配置服务的ServiceDll为当前Dll。提供的UninstallService()函数可以删除任何函数而没有进行任何检查。    为了方便使用rundll32.exe进行安装还提供了RundllInstallA()和RundllUninstallA()分别调用InstallService()及UninstallService()。因为rundll32.exe使用的函数原型是  void CALLBACK FunctionName(  HWND hwnd, // handle to owner window  HINSTANCE hinst, // instance handle for the DLL  LPTSTR lpCmdLine, // string the DLL will parse  int nCmdShow // show state  );  对应的命令行是rundll32 DllName,FunctionName [Arguments]     DLL服务本身只是创建一个进程该程序命令行就是启动服务时提供的第一个参数如果未指定就使用缺省的svchostdll.exe。启动服务时如果提供第二个参数创建的进程就是和桌面交互的。[enet108][enet130]           揭开SVCHOST.exe进程之谜       svchost.exe是nt核心系统的非常重要的进程对于2000、xp来说不可或缺。很多病毒、木马也会调用它。所以深入了解这个程序是玩电脑的必修课之一。    大家对windows操作系统一定不陌生但你是否注意到系统中“svchost.exe”这个文件呢细心的朋友会发现windows中存在多个 “svchost”进程通过“ctrlaltdel”键打开任务管理器这里的“进程”标签中就可看到了为什么会这样呢下面就来揭开它神秘的面纱。    发现    在基于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中可以包含多个服务    深入    windows系统进程分为独立进程和共享进程两种“svchost.exe”文件存在于“%systemroot% system32”目录下它属于共享进程。随着windows系统服务不断增多为了节省系统资源微软把很多服务做成共享方式交由 svchost.exe进程来启动。但svchost进程只作为服务宿主并不能实现任何服务功能即它只能提供条件让其他服务在这里被启动而它自己却不能给用户提供任何服务。那这些服务是如何实现的呢    原来这些系统服务是以动态链接库dll形式实现的它们把可执行程序指向 svchost由svchost调用相应服务的动态链接库来启动服务。那svchost又怎么知道某个系统服务该调用哪个动态链接库呢这是通过系统服务在注册表中设置的参数来实现。下面就以rpcssremote procedure call服务为例进行讲解。    从启动参数中可见服务是靠svchost来启动的。    实例    以windows xp为例点击“开始”/“运行”输入“services.msc”命令弹出服务对话框然后打开“remote procedure call”属性对话框可以看到rpcss服务的可执行文件的路径为“c:/windows/system32/svchost -k rpcss”这说明rpcss服务是依靠svchost调用“rpcss”参数来实现的而参数的内容则是存放在系统注册表中的。    在运行对话框中输入“regedit.exe”后回车打开注册表编辑器找到[hkey_local_machine systemcurrentcontrolsetservicesrpcss]项找到类型为“reg_expand_sz”的键“magepath”其键值为“%systemroot%system32svchost -k rpcss”这就是在服务窗口中看到的服务启动命令另外在“parameters”子项中有个名为“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/system32wins”目录中因此使用进程管理器查看svchost进程的执行文件路径就很容易发现系统是否感染了病毒。windows系统自带的任务管理器不能够查看进程的路径可以使用第三方进程管理软件如“windows优化大师”进程管理器通过这些工具就可很容易地查看到所有的svchost进程的执行文件路径一旦发现其执行路径为不平常的位置就应该马上进行检测和处理。            干掉Svchost.exe进程??   1.错误的解决方法描述   当我们按下AltCtrlDel打开任务管理器发现进程中出现多个Svchost.exe则表明系统中毒我们首先将所有的Svchost结束掉然后使用相关的杀毒工具查杀病毒。    注:2003年的夏天,“冲击波”病毒横行的时候有一种说法就是Svchost.exe都是病毒一看到就要删除。这种说法让电脑用户人心惶惶因为每个使用 Windows XP系统的用户在按照文章中介绍的检查有无Svchost.exe的方法都可以找到几个Svchost.exe进程。    有关Svchost.exe详见  http://forum.ikaka.com/topic.asp?board3artid6087605    2.方案由来及后果   在很多人的印象中每个应用程序一般只对应一个进程如QQ对应QQ.EXE进程、记事本对应notepad.exe进程等。所以当看到系统有多个同样名字的进程时总是会将其联想为病毒或者木马程序在作怪。如果不加思索野蛮的将其中的某些Svchost.exe进程结束掉会让系统的运行变得不稳定。    3.正确的解决办法   Windows 进程分为独立进程和共享进程两种Svchost.exe属于后者。Windows XP为了节约系统资源将很多个系统服务做为共享方式由Svchost.exe来启动。Svchost本身只是作为服务宿主并不能实现任何服务功能 svchost通过调用相应服务的动态链接库DLL来启动该服务而Windows将这些服务分为几个组同组的服务共享一个Svchost进程不同的组所指向的Svchost不同。通常情况下Windows XP有4个由Svchost启动的服务组也就是说Windows XP系统一般有4个Svchost.exe进程。当然某些应用程序或服务也有可能会调用Svchost所以当你看到系统中有多余4个的 Svchost.exe进程也不要盲目判断系统中了病毒。实际上Svchost.exe进程的个数跟是否中毒无直接关系。     小提示  ★ 笔者做了下面一个非常有趣的测试打开任务管理器切换到“进程”选项卡首先手动结束掉由上到下的第三个Svchost.exe进程结束完后系统会马上重新建立该进程接下来我们手动结束掉由上到下的最后一个Svchost.exe进程系统会出现一个类似中了冲击波病毒的对话窗口并倒计时关机这是由于该Svchost.exe进程引导RPC服务终止该进程则导致RPC服务中断系统自然会重新启动了。   ★Windows 2000中一般有两个Svchost.exe进程Windows Server 2003则非常多一般有6个。     既然系统中Svchost.exe进程数与是否中毒无关我们究竟如何区别正常的和病毒伪造的Svchost进程呢  我们可以使用下面两种方法来鉴别  方法一  在系统所在分区进行搜索如果发现多个Svchost.exe文件则系统很有可能中毒。正常的Svchost.exe位于%windir%// system32目录下如果发现其它目录中有Svchost.exe文件你就要小心了。例如冲击波的变种Win32.Welchia.Worm会在% windir%//system32//wins目录种下Svchost.exe文件。  方法二  察看Svchost.exe进程对应文件的路径。  Windows XP自带的任务管理器中无法察看我们需要借助第三方工具例如Windows优化大师自带的进程管理工具运行它后定位到Svchost.exe进程可以看到它对应的运行文件的真实路径。    小提示   ★不少木马程序会采用将自己伪装成跟常见进程相似的文件名或者相同的文件名但扩展名不相同如果你在任务管理器中看到Scvhost.exe、Svch0st.exe等进程肯定有木马已经植入你的系统。  ★ 很多朋友在查看CPU占用率时一个叫做“System Idle Process”的进程常常会显示为90-99%。不必担心实际上恰恰相反的是这里的90-99%是CPU资源空闲了出来的资源。这里的数字越大表示 CPU可用资源越多数字越小则表示CPU资源越紧张。     其它错误的说法和方案  1.在安装Windows XP后删除C://Windows//System32//Dllcache下的所有文件可以节约大概200MB的磁盘空间。  点评该文件夹里保存的是系统备份的dll文件Windows在安装驱动、软件、升级的时候可能会用到里面的文件如果将其删除会给我们带来更大的不便。  2. 由于系统空间比较宝贵很多朋友将软件安装在其它分区但每次安装软件时提示的默认安装路径都是C://Program Files我们可以打开注册表定位到“[HKEY_LOCAL_MACHINE//SOFTWARE//Microsoft//Windows// CurrentVersion]”将右边窗口中的ProgramFilesDir字符串值修改为我们想要的路径。  点评这样设置确实让我们方便不少。但它带来很多弊端比如打开Outlook Express时会报告C盘磁盘已满或者内存不足的错误并提示“MSOE.dll无法初始化”另外还可以引起Media Player等系统程序的运行故障。  3.修改//%Systemroot%//System32//Drivers//Etc文件夹下的host.sam文件……   点评很多朋友使用修改host文件的办法来屏蔽恶意网站这点没错。不过很多人却没搞清楚到底哪个文件是“host文件”。在Windows 98下存在一个host.sam文件该文件只是微软为我们修改host文件做的一个范例文件如果我们修改host.sam文件根本达不到任何效果真正的host文件是一个名为“host”没有扩展名的文件。而在Windows XP下所谓“host.sam”文件根本不存在我们修改host文件应该是用记事本打开//%Systemroot%//System32// Drivers//Etc目录下的host文件同样没有扩展名。   4.要将jpg文件与版本的ACDSEE4.0以下的版本建立文件关联只需要运行“regsvr32 /u shimgvw.dll”命令。   点评这种办法的确可以让ACDSEE和jpg格式文件建立文件关联但该命令卸载了Windows XP的图片预览功能有点矫枉过正。正确的方法是删除注册表中的“[HKEY_CLASSES_ROOT// SystemFileAssociations//image]”项。             透析Svchost进程清除后门   网上有很多关于Svchost.exe的讨论我们今天首先来看一下Svchost.exe的原理工作方法然后结合著名DLL木马实战了解一下使用Svchost.exe进行启动的木马的清除希望大家能够有所收获。  Svchost.exe是NT核心系统非常重要的文件对于Windows   2000/XP来说不可或缺。Svchost进程提供很多系统服务如logical disk manager、remote   procedure callRPC、dhcp client、Automatic Updates、Background   Intelligent Transfer Service、COM Event System、Internet Connection   Sharing、Network Connections、Portable Media Serial Number   Service、Remote Access Auto Connection Manager、Remote Access   Connection Manager、Removable Storage、Routing and Remote   Access、System Event Notification、Telephony、Wireless Configuration等等。  对于服务中使用Svchost.exe加载了哪些动态链接库我们可以在服务中点击上面列出的某个服务来看看。比如我们要看Automatic   Updates服务就可以在在它上面点击鼠标右键看它的属性。  同样情况下如果读者还想进一步了解其它的那些服务是怎样使用Svchost.exe的可以使用与上面相同的方法来观察一下。  聪明的读者一眼就可以看出Svchost.exe对于系统来说是多么的重要了。也正是因为Svchost.exe的重要性所以病毒、木马也想尽办法来利用它企图利用它的特性来迷惑用户达到感染、入侵、破坏的目的。那么应该如何判断到底哪个是病毒进程呢?正常的Svchost.exe文件应该存在于“C:/Windows/system32”目录下如果发现该文件出现在其他目录下就要小心了。另外黑客们为了使用Svchost.exe达到进程欺骗的目的有可能使用一些迷惑性的名字如将字母o变成数字0零这样程序的名称就变成了svch0st.exe了如果不注意观察很容易逃过普通用户的眼睛。  通常情况下为了确定我们的计算机中正在运行的Svchost.exe是不是真正的系统的Svchost.exe我们可以使用如下方法来查看。Svchost.exe文件的调用路径可以通过“计算机管理→系统工具→系统信息→软件环境→正在运行任务”来查看。  这里仅举一例来说明。假设Windows   XP系统被“w32.welchia.worm”感染了。正常的Svchost文件存在于“c:/Windows/system32”目录下如果发现该文件出现在其他目录下就要小心了。“w32.welchia.worm”病毒存在于“c:/Windows/system32wins”目录中通过使用上面说的方法就可很容易地查看到所有的Svchost进程的执行文件路径一旦发现其执行路径为不平常的位置就应该马上进行检测和处理。  现在我们已经搞清楚了一部分疑问但是我们还不知道哪个服务调用了哪个动态链接库文件是不是没有办法呢如果没有地方可以找到那么Windows自己又是如何知道调用哪一个呢大家知道Windows将所有的系统信息和应用程序信息都保存在了系统注册表中所以我们可以在注册表中找找看。  下面以Remote Procedure   CallRPC服务为例来看看Svchost进程是如何调用DLL文件的。在Windiws中打开服务然后打开“Remote   Procedure CallRPC”属性对话框可以看到Remote Procedure   CallRPC服务的可执行文件的路径为“C:/WINNT/system32/Svchost -k rpcss”这说明Remote   Procedure CallRPC服务是依靠Svchost调用“rpcss”参数来实现的而参数的内容则是存放在系统注册表中的。  在运行对话框中输入“regedit.exe”后回车打开注册表编辑器找到“HKEY_LOCAL_MACHINE/System/currentcontrolset/services/   rpcss”项。然后再在里面找到类型为“reg_expand_sz”的“Imagepath”项其键值为“%SystemRoot%/system32/Svchost   -k   rpcss”这就是在服务窗口中看到的服务启动命令另外在“parameters”子项中有个名为“ServiceDll”的键其值为“%SystemRoot%/system32/rpcss.dll”其中“rpcss.dll”就是Remote   Procedure   CallRPC服务要使用的动态链接库文件。这样Svchost进程通过读取“rpcss”服务注册表信息就能启动该服务了。  同样情况下如果有程序试图蛮天过海假借Svchost.exe来启动自己的动态链接库文件如将木马作成动态链接库文件那么我们就可以从这里找到DLL木马的路径将它大白于天下。  如果要了解每个Svchost进程到底提供了多少系统服务可以在Windows 2000的命令提示符窗口中输入“tlist   -s”命令来查看该命令是Windows 2000 support   tools提供的。不过在这里看到的效果跟服务里面看到的是一样的只不过是DOS界面而已。   小知识在Windows xp下则使用“tasklist /svc”命令会收到同样的效果。  由于篇幅的关系不能对Svchost全部功能进行详细介绍这是一个Windows中的一个特殊进程有兴趣的可参考有关技术资料进一步去了解它。  下面我们通过一个实例来看一下木马程序是如何利用Svchost.exe进行启动的。这里我选择了PortLess BackDoor   V1.2来做演示这是一个使用Svchost.exe去启动平时不开端口,可以进行反连接的后门程序(和小榕的BITS是同一类型的后门)。  为了看一下这个后门是如何利用Svchost.exe进行启动的我们在运行软件之前先给注册表做一个快照这里我选择了Regshot   1.61e5   final版本并将初始快照命名为1.hiv。然后我们将Portlessinst.exe和Svchostdll.dll(不要改名)上传到系统目录(%winnt%/system32目录中)。  接下来进入命令行使用“Portlessinst.exe -install ActiveString   Password”进行安装这里的ActiveString就是连接那系统打开的端口后输入的验证字符串这里的密码是使用正向连接你连接上后门打开的端口时需要输入的密码。比如我输入如下  portlessinst.exe –install smiler wind_003  这样就安装上去了我们来看一下注册表里的变化。将1.hiv装载进Regshot中的1st shot然后对当前的注册表做2st   shot的快照然后使用compare进行比较其比较的结果如下  HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Internet   Explorer/PortLess/FdsnqbTsuni: tjnkbu  HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Internet   Explorer/PortLess/Wfttphuc: tofiXdo  HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/IPRIP/Security/Security:   01 00 14 80 A0 00 00 00 AC 00 00 00 14 00 00 00 30 00 00 00 02 00 1C   00 01 00 00 00 02 80 14 00 FF 01 0F 00 01 01 00 00 00 00 00 01 00 00   00 00 02 00 70 00 04 00 00 00 00 00 18 00 FD 01 02 00 01 01 00 00 00   00 00 05 12 00 00 00 63 00 6F 00 00 00 1C 00 FF 01 0F 00 01 02 00 00   00 00 00 05 20 00 00 00 20 02 00 00 6D 00 00 00 00 00 18 00 8D 01 02   00 01 01 00 00 00 00 00 05 0B 00 00 00 20 02 00 00 00 00 1C 00 FD 01   02 00 01 02 00 00 00 00 00 05 20 00 00 00 23 02 00 00 6D 00 00 00 01   01 00 00 00 00 00 05 12 00 00 00 01 01 00 00 00 00 00 05 12 00 00 00  HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/IPRIP/Parameters/ServiceDll:   C:/WINNT/system32/Svchostdll.dll  HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/IPRIP/Parameters/program:   SvchostDLL.exe  HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/IPRIP/Parameters/Interactive:   0x00000000  HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/IPRIP/Type:   0x00000020  HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/IPRIP/Start:   0x00000002  HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/IPRIP/ErrorControl:   0x00000001  HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/IPRIP/ImagePath:   %SystemRoot%/System32/Svchost.exe -k netsvcs  HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/IPRIP/DisplayName:   Intranet Services  HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/IPRIP/ObjectName:   LocalSystem  HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/IPRIP/Security/Security:   01 00 14 80 A0 00 00 00 AC 00 00 00 14 00 00 00 30 00 00 00 02 00 1C   00 01 00 00 00 02 80 14 00 FF 01 0F 00 01 01 00 00 00 00 00 01 00 00   00 00 02 00 70 00 04 00 00 00 00 00 18 00 FD 01 02 00 01 01 00 00 00   00 00 05 12 00 00 00 63 00 6F 00 00 00 1C 00 FF 01 0F 00 01 02 00 00   00 00 00 05 20 00 00 00 20 02 00 00 6D 00 00 00 00 00 18 00 8D 01 02   00 01 01 00 00 00 00 00 05 0B 00 00 00 20 02 00 00 00 00 1C 00 FD 01   02 00 01 02 00 00 00 00 00 05 20 00 00 00 23 02 00 00 6D 00 00 00 01   01 00 00 00 00 00 05 12 00 00 00 01 01 00 00 00 00 00 05 12 00 00 00  HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/IPRIP/Parameters/ServiceDll:   C:/WINNT/system32/Svchostdll.dll  HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/IPRIP/Parameters/program:   SvchostDLL.exe  HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/IPRIP/Parameters/Interactive:   0x00000000  HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/IPRIP/Type:   0x00000020  HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/IPRIP/Start:   0x00000002  HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/IPRIP/ErrorControl:   0x00000001  HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/IPRIP/ImagePath:   %SystemRoot%/System32/Svchost.exe -k netsvcs  HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/IPRIP/DisplayName:   Intranet Services  HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/IPRIP/ObjectName:   LocalSystem  可以看出PortLess BackDoor   V1.2将自己注册为了服务IPRIP它使用的启动参数是%SystemRoot%/System32/Svchost.exe -k   netsvcs它使用的DLL文件是C:/WINNT/system32/Svchostdll.dll。通过这里我们就可以找到PortLess将它使用的服务禁止掉然后将对应的DLL文件删除并将注册表中这些多出来的键值干掉三下五除二就将Portless弄得一干二净现在大家知道怎么清理掉用Svchost加载的后门了吧            耗尽CPU资源的Explored病毒清除法     出处网易[ 2005-11-03 10:26:15 ] 作者佚名     昨天单位这好几台机器病毒大爆发因为都不是专家高手折腾了很久才清理掉过程中有些体会觉得可以写下来跟大家作一番交流。    首先是病毒的发现。昨天出现了两个症状。    一、在局域网上出现广播包(ARP)暴增甚至把出口堵死。    二、机器CPU资源耗尽。    用任务管理器可以看到可疑的进程explored.exe和services.exe一起占用CPU近100%(后来才知道这是因为该病毒是通过服务启动的)该进程无法停止注册表键值    HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run    这里有该项存在即使将该项删除重启后仍如原样。这个文件是存在在WINDOWS的SYSTEM32目录下未中毒机器没有该文件。因此可基本确认该进程是病毒。    然后是病毒的查杀。这过程中出现两个问题一是瑞星开始无法升级这是因为病毒本身把出口堵塞TCP流无法正常传输。    我们尝试了一下发现可以用防火墙(例如天网)将病毒程序隔离然后再连网进行升级。第二个问题是瑞星查毒过程缓慢(查毒前已经将网卡先禁用了)这是因为病毒程序explored占用CPU太狠在无法设置删除该进程的情况下可以用任务管理器提高瑞星进程的优先级(比如实时)这样瑞星从病毒手中抢过CPU资源来正常地运行。    不过这次瑞星只查杀了伪装成svchost.exe的蠕虫病毒explored仍然存在。    我们无可奈何下只好采用很笨的方法删除explored就是进入安全模式到Windows的System32目录下直接把该文件删除掉。顺便也把注册表中启动运行那项也删掉了。    重启后提示有服务出错到管理工具下的“服务”一看才终于发现了该病毒的真实面目:原来“服务”里面有一栏“Windows Login”属性显示服务名称是“MpR”可执行文件路径正是“C:/WINNT/SYSTEM32/explored.exe -services”。    这就说明了为什么进程中止不了删掉注册表中系统启动项也没用。也就是说当初应该到服务里将该服务停止而不是在任务管理器试图将其删除。    最后就病毒查杀的心得作一点小结:上述病毒发作都有一定迹象例如CPU占满网络带宽占满(可以通过网络连接状态看如果后台没有运行什么进程网络接口上收/发包数激增就很可能是中毒或是连接的网络上有机器中毒)因为平时要保持警惕发现异常就赶紧查毒。    最好是用查毒软件用任务管理器有时被骗现在的病毒起名往往跟系统程序相似甚至相同例如explored, smsss(smss是系统程序)svchost等等。最好知道真正的系统程序所在目录例如系统svchost.exe应该在system32下而病毒可能藏在system32/drivers下。    病毒的自启动可能通过很多途径:注册表INI文件甚至——象explored这样——通过服务启动。    与其中了毒再查再杀不如切实做好防护措施——补丁病毒保护防火墙一个都不能少啊!