码迷,mamicode.com
首页 > 系统相关 > 详细

Svchost进程和共享服务病毒原理

时间:2017-03-28 18:35:35      阅读:264      评论:0      收藏:0      [点我收藏+]

标签:software   table   service   多个   注册表   并且   函数   参数传递   子函数   

1. svchost的由来

Windows系统服务现在可以分为独立进程和共享进程 

在windows Nt中, 只有服务管理器SCM(service.exe)有多个共享服务. 随着系统的服务增加,为了增强系统性能于是

在windows2000开始将很多服务做成共享方式并且由svchost.exe启动

svchost.exe本身并不实现任何服务功能,但是需要成为服务的dll可以由svchost加载成为服务.这些dll内部需要实现一个名为ServiceMain的函数

例如, windows中有个特殊的服务名为:RPCss 远程过程调用服务在注册表中如下:

HKEY_LOCAL_MACHINE\system\currentcontrolset\services\RpcSs, RpcSs是个服务, 它下面有个Parameters子健. 它的ServiceDll的值

指出了它的dll文件,RpcSs子健的imagedll值指出了svchost.exe

此外, windows将这些服务通过分组, 每组中的服务由一个svchost进程来负责. 因此会有多个svchost进程出现.

svchost.exe负责的所有服务组合服务与此键下:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost

于是在启动一个svchost负责的服务时如果目标服务属于已经启动的服务组的svchost,那么那个svchost进程将加载服务对应的dll,而不会再创建一个svchost进程

 

2.svchost 加载服务原理

(1). 它的入口函数先对命令行进行分析,获取所属的服务组名字根据服务组名在HKEY_LOCAL_MACHINE\system\currentcontrolset\services\服务组名

的子键下的所有服务.

(2).将服务组中的服务名保存起来后,创建SERVICE_TABLE_ENTRYW 数组, 这些服务名对应的服务入口函数都是svchost实现的一个子函数

(3).调用StartServiceCtrlDispatcher API注册这些服务的调用函数, 然后svchost主线程等待scm启动服务的命令

(4).当scm调用svchost的被注册的子函数时,将服务名作为参数传递进去,然后svchost会根据之前保存的服务名组查找该服务名,如果是在其中就根据

其对应的HKEY_LOCAL_MACHINE\system\currentcontrolset\services\服务名\ 下查找parameters下的键值,并将对应的dll加载到svchost

进程中.然后将服务名作为参数传递到它的ServiceMain函数中.

综上,骇客们完全可以写一个dll实现服务的功能让 svchost加载. 实现很隐蔽的dll病毒

 

Svchost进程和共享服务病毒原理

标签:software   table   service   多个   注册表   并且   函数   参数传递   子函数   

原文地址:http://www.cnblogs.com/freesec/p/6636206.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!