【WIN】svchost与共享进程服务

查看注册表中的系统服务文件夹,我们可以发现某些服务的ImagePath显示的是svchost.exe的路径,如下图所示:

在这里插入图片描述

svchost.exe 是微软Windows操作系统中的系统文件,微软官方对它的解释是:

svchost.exe 是从动态链接库 (DLL) 中运行的服务的通用主机进程名称。这个程序对系统的正常运行是非常重要,而且是不能被结束的。许多服务通过注入到该程序中启动,所以会有多个该文件的进程。

从系统服务的视角来看,svchost.exe 是共享进程服务的宿主进程。Windows系统服务分为独立进程和共享进程两种,随着系统内置服务的增加,Windows就把很多系统服务变成共享进程的方式,由svchost.exe统一启动。

Svchost本身只是作为服务宿主,并不实现任何的服务功能。 需要Svchost启动的服务以动态链接库(DLL)形式实现。在安装这些服务时,把服务的可执行程序指向svchost,启动这些服务时由svchost加载相应服务的DLL文件。

从攻击者的角度来说,攻击者可能会将自己的恶意代码包含在一个黑色dll文件中,然后通过svchost.exe加载自己的dll文件,达到自己的目的。这种攻击方法最大的优势在于,恶意代码没有自己的独立进程,更难被用户或者其他系统主题察觉。从这角度来说,svchost是一个藏污纳垢的好地方。

显然,对于这种服务,我们需要分析的对象应该是服务启动时加载的dll文件,而不是ImagePath中的svchost.exe。服务加载的dll文件路径可在服务的子键 Parameters\\ServiceDll 中查看,如下图所示:

在这里插入图片描述

通过以上分析可知,如果我们查询的服务是通过svchost加载的,我们需要增加一条分支语句,转而分析服务运行时加载的dll文件。查询dll文件的具体方法就是前往子键 Parameters\\ServiceDll ,查看dll文件所在路经,伪代码如下:

if(wcsstr(keyData, L".exe") != NULL&&statusData<=2){  //后缀为exe的服务文件,并且是自启动文件
    //新的分支语句
	if(wcsstr(keyData, L"svchost"){ //这是一个共享进程服务,服务的真正信息存储在它加载的dll文件中
					
        //转而查看子键Parameters\\ServiceDll
        RegOpenKeyEx(HKEY_LOCAL_MACHINE,ultraPath+"Parameters",0,KEY_READ,&hkeyInner); //前往子键Parameters
        RegQueryValueEx(hkeyInner,_T("ServiceDll"),NULL,&dwType,(BYTE*)&keyData,&dwSize);//查看ServiceDll中描述的dll文件路径
		
        //查询服务加载的dll文件的路径、修改时间、数字签名等信息
		}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

欧恩意

如有帮助,感谢打赏!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值