用于接管Windows操作系统dns缓存服务的方法技术方案

技术编号:38401883 阅读:13 留言:0更新日期:2023-08-07 11:13
本发明专利技术公开了用于接管Windows操作系统dns缓存服务的方法,包括如下步骤:查找系统进程的dns缓存服务句柄并关闭;在当前进程中获取系统目录下的dnsrslvr.dll系统动态链接库;获取dnsrslvr.dll系统动态链接库的相关导出函数,并通过相关导出函数在当前进程中接管dns缓存服务,获取dns缓存数据;HOOK当前进程中的WsaRecvMsg函数,并对dns缓存数据进行监控。通过该方法可以避免多个其他进程HOOK系统svchost进程造成的可能冲突。svchost进程造成的可能冲突。svchost进程造成的可能冲突。

【技术实现步骤摘要】
用于接管Windows操作系统dns缓存服务的方法


[0001]本专利技术涉及Windows底层安全
,更具体的说是涉及用于接管Windows操作系统dns缓存服务的方法。

技术介绍

[0002]目前,现有的DNS缓存服务HOOK技术多是找到目标svchost进程,注入并HOOK相关函数来实现。但是,该技术存在可能有多个软件注入并HOOK造成冲突,导致程序崩溃的问题。
[0003]因此,在监控本机DNS访问期间,如何避免多个其他进程HOOK系统svchost进程造成的冲突,是本领域技术人员亟需解决的问题。

技术实现思路

[0004]有鉴于此,本专利技术提供一种至少解决上述部分技术问题的用于接管Windows操作系统dns缓存服务的方法。
[0005]为了实现上述目的,本专利技术采用如下技术方案:
[0006]S1、查找系统进程的dns缓存服务句柄并关闭;
[0007]S2、在当前进程中获取系统目录下的dnsrslvr.dll系统动态链接库;
[0008]S3、获取所述dnsrslvr.dll系统动态链接库的相关导出函数,并通过所述相关导出函数在所述当前进程中接管dns缓存服务,获取dns缓存数据;
[0009]S4、HOOK所述当前进程中的WsaRecvMsg函数,并对所述dns缓存数据进行监控。
[0010]进一步地,还包括:
[0011]S5、所述当前进程退出,所述当前进程的dns缓存服务句柄关闭,所述系统进程重新接管所述dns缓存服务。
[0012]进一步地,所述步骤S1具体包括:
[0013]S11、获取系统服务管理器中的dns缓存服务以及对应的dns缓存服务句柄;
[0014]S12、查找所述dns缓存服务的系统进程;
[0015]S13、遍历所述系统进程中的所述dns缓存服务句柄,找到名为\\RPC Control\\DNSResolver的dns缓存服务句柄并关闭。
[0016]进一步地,所述S4具体包括:
[0017]HOOK所述当前进程中的WsaRecvMsg函数;
[0018]采用MY_LPFN_WSARECVMSG函数替换所述WsaRecvMsg函数;
[0019]由所述MY_LPFN_WSARECVMSG函数中的lpMsg参数接收dns缓存数据包;
[0020]由所述dns缓存数据包中的IP地址查看和修改所述lpMsg参数指向的内容,实现对所述dns缓存数据包中的dns缓存数据的过滤和监控。
[0021]经由上述的技术方案可知,与现有技术相比,本专利技术公开提供了一种用于接管Windows操作系统dns缓存服务的方法,具有如下有益效果:
[0022]本专利技术通过dns缓存服务由自身的程序接管监控,可以避免多个其他进程HOOK系统svchost进程造成的可能冲突;相比驱动层更为有效。
附图说明
[0023]为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
[0024]图1附图为本专利技术提供的用于接管Windows操作系统dns缓存服务的方法流程示意图。
具体实施方式
[0025]下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。
[0026]本专利技术实施例公开了用于接管Windows操作系统dns缓存服务的方法,包括如下步骤:
[0027]S1、查找系统进程的dns缓存服务句柄并关闭;
[0028]S2、在当前进程中获取系统目录下的dnsrslvr.dll系统动态链接库;
[0029]S3、获取dnsrslvr.dll系统动态链接库的相关导出函数,并通过相关导出函数在当前进程中接管dns缓存服务,获取dns缓存数据;
[0030]S4、HOOK当前进程中的WsaRecvMsg函数,并对dns缓存数据进行监控。
[0031]S5、当前进程退出,当前进程的dns缓存服务句柄关闭,系统进程重新接管dns缓存服务。
[0032]通过该方法可以从应用层接管dns缓存服务,在不安装驱动的情况下监控本机dns访问,而且比驱动层更为有效。
[0033]接下来分别对上述内容进行说明。
[0034]在上述步骤S1中,本专利技术实施例采用OpenSCManager打开本机的系统服务管理器,调用OpenService打开服务名为“DNSCache”的dns缓存服务,以及获得该dns缓存服务的句柄;然后调用QueryServiceStatusEx找到dns缓存服务的系统进程,遍历该系统进程中的dns缓存服务句柄,找到名为"\\RPC Control\\DNSResolver"的dns缓存服务句柄并关闭;其中,OpenService为系统API;DNSCache为dns缓存服务的服务名;QueryServiceStatusEx为系统API;\\RPC Control\\DNSResolver"为固定名,关闭此句柄就可以关闭系统的DNS缓存服务。
[0035]在该步骤S1中,通过OpenSCManager函数可以建立一个到服务管理器的连接,并打开指定的数据库。
[0036]在上述步骤S2和S3中,本专利技术实施例在当前进程(即自身进程)中通过调用LoadLibrary加载system32目录下的dnsrslvr.dll系统动态链接库,并以“dnscache”为参
数调用其导出函数“ServiceMain”;之后采用该导出函数在当前进程中接管dns缓存服务,示例代码如下:
[0037][0038]在该步骤S2和S3中,实现了从应用层接管dns缓存服务,为后续Dns缓存服务由自身程序接管监控奠定基础。
[0039]在上述步骤S4中,HOOK用于通过拦截软件组件之间传递的函数调用、消息或事件来改变或增强操作系统,应用程序或其他软件组件的行为。本专利技术实施例Hook当前进程中的WSARecvMsg函数,用自身的函数MY_LPFN_WSARECVMSG来替代,这个函数的lpMsg参数中会接收dns缓存数据包,该dns缓存数据包中包含有查询的域名和对应的返回的IP地址信息,查看和修改该lpMsg参数指向的内容,可以实现对dns缓存数据的过滤和监控。MY_LPFN_WSARECVMSG函数原型如下:
[0040][0041]通过该步骤S4可以实现在不安装驱动的情况下监控本机dns访问,而且相比驱动层来讲更为有效。
[0042]综上,本专利技术实施例提供了一种用于本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.用于接管Windows操作系统dns缓存服务的方法,其特征在于,包括如下步骤:S1、查找系统进程的dns缓存服务句柄并关闭;S2、在当前进程中获取系统目录下的dnsrslvr.dll系统动态链接库;S3、获取所述dnsrslvr.dll系统动态链接库的相关导出函数,并通过所述相关导出函数在所述当前进程中接管dns缓存服务,获取dns缓存数据;S4、HOOK所述当前进程中的WsaRecvMsg函数,并对所述dns缓存数据进行监控。2.根据权利要求1所述的用于接管Windows操作系统dns缓存服务的方法,其特征在于,还包括:S5、所述当前进程退出,所述当前进程的dns缓存服务句柄关闭,所述系统进程重新接管所述dns缓存服务。3.根据权利要求1所述的用于接管Windows操作系统dns缓存服务的方法,其特征在于,所述步骤S...

【专利技术属性】
技术研发人员:孟海彬
申请(专利权)人:云袭网络技术河北有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1