一种拦截恶意程序关机的方法、装置及电子设备与流程

文档序号:11951568阅读:445来源:国知局
一种拦截恶意程序关机的方法、装置及电子设备与流程

本发明涉及系统安全技术领域,尤其涉及一种拦截恶意程序关机的方法、装置及电子设备。



背景技术:

随着互联网技术发展,病毒、木马等恶意程序层出不穷,为了提高系统的安全性,金山毒霸等安全软件要适应发展。个别恶意程序在安全软件检测到其存在时,或者在结束恶意程序进程时,恶意程序会向系统发一个关机消息,让计算机关机,这使得安全软件不能轻易杀掉这类恶意程序的进程。

首先,来了解一下程序(包括,恶意程序)发送关机本地过程调用(Local Procedure Call,LPC)消息的流程:

程序以关机LPC消息为参数,依次调用ndtll模块的发送关机LPC消息的函数、内核层的发送关机LPC消息的内核函数、再由系统解析所述关机LPC消息并调用关机功能的内核函数,从而完成计算机关机操作,其中,Ndtll模块是微软提供的一个基础模块,实现一些常用函数,比如读写文件,读写注册表等功能,运行在应用层;LPC是系统子系统和客户进程之间通讯的机制,Windows有N个子系统,各个子系统之前一般是LPC通信的,比如,进程管理子系统,服务管理,IO管理器,内存管理器等子系统。

现有技术中,可以通过挂钩关机功能的内核函数实现恶意关机消息的拦截,杜绝恶意程序传播破坏系统,但是,由于关机功能的内核函数位于发送关机LPC消息流程的底层,通过挂钩所述关机功能的内核函数去拦截恶意关机指令,实现过程复杂,且易被恶意程序绕开。



技术实现要素:

有鉴于此,本发明实施例提供一种拦截恶意程序关机的方法、装置及电子设备,以解决现有的挂钩关机功能的内核函数拦截恶意关机指令,实现过程复杂,且易被恶意程序绕开的问题。

第一方面,本发明实施例提供一种拦截恶意程序关机的方法,包括:

通过钩子函数监听操作进程发送的关机本地过程调用消息,其中,所述钩子函数挂钩发送所述关机本地过程调用消息的内核函数;

通过所述钩子函数判断所述关机本地过程调用消息是否符合预定的拦截条件;

若所述关机本地过程调用消息符合预定的拦截条件,且所述操作进程的名称包含在预设的恶意程序进程列表中,则通过所述钩子函数拦截所述关机本地过程调用消息。

结合第一方面,在第一方面的第一种实施方式中,在通过钩子函数监听操作进程发送的关机本地过程调用消息之前,所述方法还包括:

查询预设的系统服务描述符表,获取发送所述关机本地过程调用消息的内核函数的当前地址,并保存获取的发送所述关机本地过程调用消息的内核函数的当前地址;

创建钩子函数,获取所述钩子函数的函数地址;

在所述系统服务描述符表中,将发送所述关机本地过程调用消息的内核函数的当前地址更新为所述钩子函数的函数地址。

结合第一方面,在第一方面的第二种实施方式中,所述关机本地过程调用消息包括:目标端口的句柄值和操作命令值;

所述预定的拦截条件包括:预定的关机端口句柄值及预定的关机操作命令值,其中,所述预定的关机端口句柄值为关机或重启端口的句柄值,所述预定的关机操作命令值包括:关机和重启;

所述通过所述钩子函数判断所述关机本地过程调用消息是否符合预定的拦截条件包括:

通过所述钩子函数判断所述关机本地过程调用消息中的目标端口的句柄值是否与预定的关机端口句柄值相同;

若与预定的关机端口句柄值相同,则判断所述关机本地过程调用消息中的操作命令值是否为关机或重启;

若所述关机本地过程调用消息中的操作命令值为关机或重启,则所述关机本地过程调用消息符合预定的拦截条件。

结合第一方面,在第一方面的第三种实施方式中,所述若所述关机本地过程调用消息符合预定的拦截条件,且所述操作进程的名称包含在预设的恶意程序进程列表中,则通过所述钩子函数拦截所述关机本地过程调用消息包括:

若所述关机本地过程调用消息符合预定的拦截条件,则通过所述钩子函数获取所述操作进程的安装路径;

从获取的所述操作进程的安装路径中,提取所述操作进程的名称;

查询预设的恶意程序进程列表,若所述操作进程的名称包含在预设的恶意程序进程列表中,则拦截所述关机本地过程调用消息。

结合第一方面的第三种实施方式,在第一方面的第四种实施方式中,所述拦截所述关机本地过程调用消息包括:

退出所述钩子函数,不将所述关机本地过程调用消息传送给发送所述关机本地过程调用消息的内核函数。

结合第一方面,在第一方面的第五种实现方式中,所述方法还包括:

若所述关机本地过程调用消息不符合预定的拦截条件,或者,所述操作进程的名称没有包含在预设的恶意程序进程列表中,则通过所述钩子函数将所述关机本地过程调用消息传送给发送所述关机本地过程调用消息的内核函数。

结合第一方面的第五种实施方式,在第一方面的第六种实现方式中,所述通过所述钩子函数将所述关机本地过程调用消息传送给发送所述关机本地过程调用消息的内核函数之前,所述方法还包括:

在系统服务描述符表中,将发送所述关机本地过程调用消息的内核函数的当前地址更新为已保存的发送所述关机本地过程调用消息的内核函数的原始地址。

结合第一方面,或结合第一方面的第一种至第六种中任一种实施方式,在第一方面的第七种实施方式中,所述恶意程序进程列表是可扩展的恶意程序进程列表。

第二方面,本发明实施例提供一种拦截恶意程序关机的装置,包括:

监听模块,用于通过钩子函数监听操作进程发送的关机本地过程调用消息,其中,所述钩子函数挂钩发送所述关机本地过程调用消息的内核函数;

判断模块,用于通过所述钩子函数判断所述关机本地过程调用消息是否符合预定的拦截条件;

拦截模块,用于若所述关机本地过程调用消息符合预定的拦截条件,且所述操作进程的名称包含在预设的恶意程序进程列表中,则通过所述钩子函数拦截所述关机本地过程调用消息。

结合第二方面,在第二方面的第一种实施方式中,所述装置还包括:挂钩模块;所述挂钩模块包括:

第一获取单元,用于查询预设的系统服务描述符表,获取发送所述关机本地过程调用消息的内核函数的当前地址,并保存获取的发送所述关机本地过程调用消息的内核函数的当前地址;

第二获取单元,用于创建钩子函数,获取所述钩子函数的函数地址;

地址更新单元,用于在所述系统服务描述符表中,将发送所述关机本地过程调用消息的内核函数的当前地址更新为所述钩子函数的函数地址。

结合第二方面,在第二方面的第二种实施方式中,所述关机本地过程调用消息包括:目标端口的句柄值和操作命令值;

所述预定的拦截条件包括:预定的关机端口句柄值及预定的关机操作命令值,其中,所述预定的关机端口句柄值为关机或重启端口的句柄值,所述预定的关机操作命令值包括:关机和重启;

所述判断模块包括:

第一判断单元,用于通过所述钩子函数判断所述关机本地过程调用消息中的目标端口的句柄值是否与预定的关机端口句柄值相同;

第二判断单元,用于若与预定的关机端口句柄值相同,则判断所述关机本地过程调用消息中的操作命令值是否为关机或重启;

消息确定单元,用于若所述关机本地过程调用消息中的操作命令值为关机或重启,则所述关机本地过程调用消息符合预定的拦截条件。

结合第二方面,在第二方面的第三种实施方式中,所述拦截模块包括:

获取单元,用于若所述关机本地过程调用消息符合预定的拦截条件,则通过所述钩子函数获取所述操作进程的安装路径;

提取单元,用于从获取的所述操作进程的安装路径中,提取所述操作进程的名称;

拦截单元,用于查询预设的恶意程序进程列表,若所述操作进程的名称包含在预设的恶意程序进程列表中,则拦截所述关机本地过程调用消息。

结合第二方面的第三种实施方式,在第二方面的第四种实施方式中,所述拦截单元,具体用于退出所述钩子函数,不将所述关机本地过程调用消息传送给发送所述关机本地过程调用消息的内核函数。

结合第二方面,在第二方面的第五种实施方式中,所述拦截模块,还用于若所述关机本地过程调用消息不符合预定的拦截条件,或者,所述操作进程的名称没有包含在预设的恶意程序进程列表中,则通过所述钩子函数将所述关机本地过程调用消息传送给发送所述关机本地过程调用消息的内核函数。

结合第二方面的第五种实施方式,在第二方面的第六种实施方式中,所述拦截模块,还用于在系统服务描述符表中,将发送所述关机本地过程调用消息的内核函数的当前地址更新为已保存的发送所述关机本地过程调用消息的内核函数的原始地址。

结合第二方面,或结合第二方面的第一种至第六种中任一种实施方式,在第二方面的第七种实施方式中,所述恶意程序进程列表是可扩展的恶意程序进程列表。

第三方面,本发明实施例提供一种电子设备,所述电子设备包括:壳体、处理器、存储器、电路板和电源电路,其中,电路板安置在壳体围成的空间内部,处理器和存储器设置在电路板上;电源电路,用于为上述电子设备的各个电路或器件供电;存储器用于存储可执行程序代码;处理器通过读取存储器中存储的可执行程序代码来运行与可执行程序代码对应的程序,用于执行前述任一所述的拦截恶意程序关机的方法。

本发明实施例提供的一种拦截恶意程序关机的方法、装置及电子设备,通过钩子函数监听操作进程发送的关机本地过程调用消息,其中,所述钩子函数挂钩发送所述关机本地过程调用消息的内核函数;通过所述钩子函数判断所述关机本地过程调用消息是否符合预定的拦截条件;若所述关机本地过程调用消息符合预定的拦截条件,且所述操作进程的名称包含在预设的恶意程序进程列表中,则通过所述钩子函数拦截所述关机本地过程调用消息,这样,通过挂钩发送所述关机LPC消息的内核函数的所述钩子函数,拦截符合预定拦截条件且由恶意操作进程发送的关机LPC消息,由于,发送所述关机LPC消息的内核函数位于关机功能的内核函数的上层,实现过程相对简单,且稳定不易被恶意程序绕开,有利于维护系统安全。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。

图1为本发明的实施例拦截恶意程序关机的方法流程示意图;

图2为本发明的实施例拦截恶意程序关机的方法具体流程示意图;

图3为本发明的实施例的实施例拦截恶意程序关机的装置结构示意图;

图4为本发明电子设备一个实施例的结构示意图。

具体实施方式

下面结合附图对本发明实施例进行详细描述。

应当明确,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

图1为本发明的实施例拦截恶意程序关机的方法流程示意图,如图1所示,本实施例的方法可以包括:

步骤101、通过钩子函数监听操作进程发送的关机本地过程调用消息,其中,所述钩子函数挂钩发送所述关机本地过程调用消息的内核函数。

本实施例中,通过钩子函数监听操作进程发送的关机LPC消息,则操作进程发送关机LPC消息的流程包括:

操作进程以关机LPC消息为参数->调用ndtll模块的发送关机LPC消息的函数->本实施例提供的钩子函数->内核层的发送关机LPC消息的内核函数->再由系统解析所述关机LPC消息并调用关机功能的内核函数,从而完成计算机关机操作。

本实施例中,假设,调用ndtll模块的发送关机LPC消息的函数为ndtll模块的NtAlpcSendWaitReceivePort函数;本实施例提供的钩子函数为NewNtAlpcSendWaitReceivePort函数;内核层的发送关机LPC消息的内核函数为内核层的NtAlpcSendWaitReceivePort函数;所述关机功能的内核函数为NtShutdownSystem函数。

本实施例中,从操作进程发送关机LPC消息的流程可知,挂钩内核层的内核函数NtAlpcSendWaitReceivePort或者内核函数NtShutdownSystem都可以实现恶意关机LPC消息的拦截,但是,钩子函数挂钩内核层的内核函数NtAlpcSendWaitReceivePort拦截恶意关机LPC消息时,由于,发送所述关机LPC消息的内核函数NtAlpcSendWaitReceivePort位于关机功能的内核函数NtShutdownSystem的上层,实现过程相对简单,且能更容易更稳定地实现恶意关机LPC消息的拦截。

本实施例中,钩子函数NewNtAlpcSendWaitReceivePort挂钩内核层的内核函数NtAlpcSendWaitReceivePort的步骤包括:

查询系统中预设的服务描述符表(System Services Descriptor Table,SSDT),获取发送所述关机LPC消息的内核函数NtAlpcSendWaitReceivePort的当前地址,并保存获取的所述当前地址;创建钩子函数NewNtAlpcSendWaitReceivePort,获取所述钩子函数的函数地址;在所述系统服务描述符表中,将发送所述关机LPC消息的内核函数NtAlpcSendWaitReceivePort的当前地址更新为所述钩子函数NewNtAlpcSendWaitReceivePort的函数地址,从而实现了NewNtAlpcSendWaitReceivePort函数的挂钩。

本实施例中,作为一可选实施例,在通过钩子函数监听操作进程发送的关机本地过程调用消息之前,所述方法还包括:

查询预设的系统服务描述符表,获取发送所述关机本地过程调用消息的内核函数的当前地址,并保存获取的发送所述关机本地过程调用消息的内核函数的当前地址;

创建钩子函数,获取所述钩子函数的函数地址;

在所述系统服务描述符表中,将发送所述关机本地过程调用消息的内核函数的当前地址更新为所述钩子函数的函数地址。

步骤102、通过所述钩子函数判断所述关机本地过程调用消息是否符合预定的拦截条件。

本实施例中,所述关机LPC消息至少包括:目标端口的句柄值和操作命令值。

本实施例中,所述预定的拦截条件包括:预定的关机端口句柄值及预定的关机操作命令值,其中,所述预定的关机端口句柄值为关机或重启端口的句柄值,关机端口的句柄值与重启端口的句柄值可以相同,也可以不同,二者统称为关机端口句柄值;所述预定的关机操作命令值包括:关机和重启。

本实施例中,通过所述钩子函数NewNtAlpcSendWaitReceivePort判断所述关机LPC消息是否符合预定的拦截条件。

步骤103、若所述关机本地过程调用消息符合预定的拦截条件,且所述操作进程的名称包含在预设的恶意程序进程列表中,则通过所述钩子函数拦截所述关机本地过程调用消息。

本实施例中,当所述关机LPC消息符合预定的拦截条件时,在钩子函数NewNtAlpcSendWaitReceivePort中,还需判断所述操作进程是否为恶意程序,具体的,可以调用ZwQueryInformationProcess等内核函数获取操作进程的安装路径,如C:\windows\system32\av2.exe;从获取的所述操作进程的安装路径中,提取所述操作进程的名称,例如,av2.exe;接着,查询预设的恶意程序进程列表,若所述操作进程的名称包含在预设的恶意程序进程列表中,则拦截所述关机LPC消息。

本实施例中,作为一可选实施例,所述若所述关机本地过程调用消息符合预定的拦截条件,且所述操作进程的名称包含在预设的恶意程序进程列表中,则通过所述钩子函数拦截所述关机本地过程调用消息包括:

若所述关机本地过程调用消息符合预定的拦截条件,则通过所述钩子函数获取所述操作进程的安装路径;

从获取的所述操作进程的安装路径中,提取所述操作进程的名称;

查询预设的恶意程序进程列表,若所述操作进程的名称包含在预设的恶意程序进程列表中,则拦截所述关机本地过程调用消息。

本实施例中,当系统正常关机或重启时,也会发送关机LPC消息,所以预设的恶意程序进程列表中,不能包含CSRSS_EXE,SMSS_EXE,LSASS_EXE,WINLOGON_EXE等系统进程,所述预设的恶意程序进程列表可以包括已知的恶意关机进程的名称,例如,av2.exe,ad2.exe,kei3.exe等。作为又一可选实施例,所述恶意程序进程列表是可扩展的恶意程序进程列表,以便于用户能够根据实际应用情况更新所述恶意程序进程列表。

本实施例中,当操作进程发送的关机LPC消息符合预定的拦截条件,且所述操作进程的名称包含在预设的恶意程序进程列表中,则通过所述钩子函数NewNtAlpcSendWaitReceivePort拦截所述关机本地过程调用消息,退出所述钩子函数NewNtAlpcSendWaitReceivePort,不继续执行内核函数NtAlpcSendWaitReceivePort,则所述关机LPC消息发送失败,关闭计算机的操作就会失败。

本实施例中,作为再一可选实施例,所述拦截所述关机本地过程调用消息包括:

退出所述钩子函数,不将所述关机本地过程调用消息传送给发送所述关机本地过程调用消息的内核函数。

本实施例中,若操作进程发送的关机LPC消息不符合预定的拦截条件,或者,所述操作进程的名称没有包含在预设的恶意程序进程列表中,则所述钩子函数NewNtAlpcSendWaitReceivePort会继续调用执行内核函数NtAlpcSendWaitReceivePort,所述关机LPC消息发送成功,关闭计算机的操作就会成功。

本实施例中,作为又一可选实施例,所述方法还包括:

若所述关机本地过程调用消息不符合预定的拦截条件,或者,所述操作进程的名称没有包含在预设的恶意程序进程列表中,则通过所述钩子函数将所述关机本地过程调用消息传送给发送所述关机本地过程调用消息的内核函数。

本实施例中,为了所述钩子函数NewNtAlpcSendWaitReceivePort能够将所述关机LPC消息传送给内核函数NtAlpcSendWaitReceivePort,在所述钩子函数NewNtAlpcSendWaitReceivePort调用执行所述内核函数NtAlpcSendWaitReceivePort之前,在系统服务描述符表中,需将发送所述关机LPC消息的内核函数的当前地址更新为已保存的发送所述关机LPC消息的内核函数的原始地址。

本实施例中,作为再一可选实施例,所述通过所述钩子函数将所述关机本地过程调用消息传送给发送所述关机本地过程调用消息的内核函数之前,所述方法还包括:

在系统服务描述符表中,将发送所述关机本地过程调用消息的内核函数的当前地址更新为已保存的发送所述关机本地过程调用消息的内核函数的原始地址。

本发明实施例提供的一种拦截恶意程序关机的方法,通过钩子函数监听操作进程发送的关机本地过程调用消息,其中,所述钩子函数挂钩发送所述关机本地过程调用消息的内核函数;通过所述钩子函数判断所述关机本地过程调用消息是否符合预定的拦截条件;若所述关机本地过程调用消息符合预定的拦截条件,且所述操作进程的名称包含在预设的恶意程序进程列表中,则通过所述钩子函数拦截所述关机本地过程调用消息,这样,通过挂钩发送所述关机LPC消息的内核函数的所述钩子函数,拦截符合预定拦截条件且由恶意操作进程发送的关机LPC消息,由于,发送所述关机LPC消息的内核函数位于关机功能的内核函数的上层,实现过程相对简单,且稳定不易被恶意程序绕开,有利于维护系统安全。

图2为本发明实施例拦截恶意程序关机的方法具体流程示意图,如图2所示,本实施例的方法可以包括:

步骤201、通过钩子函数监听操作进程发送的关机本地过程调用消息,其中,所述钩子函数挂钩发送所述关机本地过程调用消息的内核函数。

本实施例中,步骤201的过程和上述方法实施例的步骤101类似,此处不再赘述。

步骤202、通过所述钩子函数判断所述关机本地过程调用消息中的目标端口的句柄值是否与预定的关机端口句柄值相同。

本实施例中,所述关机LPC消息至少包括:目标端口的句柄值和操作命令值。

本实施例中,当有操作进程发送关机LPC消息时,就会执行到所述钩子函数NewNtAlpcSendWaitReceivePort,所述钩子函数NewNtAlpcSendWaitReceivePort的参数列表中有一个参数为目标端口句柄参数,由所述目标端口句柄参数接收所述关机LPC消息中的目标端口的句柄值,并由所述钩子函数NewNtAlpcSendWaitReceivePort调用指定的内核函数,例如,ObReferenceObjectByName,获取预定的关机端口句柄值,若函数ObReferenceObjectByName返回的关机端口句柄值于参数中的目标端口的句柄值相同,则说明操作进程是往关机端口发送关机LPC消息,则继续执行步骤203。

本实施例中,所述预定的关机端口句柄值包含在预定的拦截条件中,所述预定的拦截条件还包括:预定的关机操作命令值;其中,所述预定的关机端口句柄值为关机或重启端口的句柄值,关机端口的句柄值与重启端口的句柄值可以相同,也可以不同,二者统称为关机端口句柄值;所述预定的关机操作命令值包括:关机和重启。

步骤203、若与预定的关机端口句柄值相同,则判断所述关机本地过程调用消息中的操作命令值是否为关机或重启。

本实施例中,所述钩子函数NewNtAlpcSendWaitReceivePort的参数列表中还有一个PPORT_MESSAGE类型的数据结构,即是向关机端口发送的数据结构,此数据结构为一个pData成员指针,指向一个PSHUTDOWN_WINDOW_MESSAGE类型的结构,PSHUTDOWN_WINDOW_MESSAGE就是关机LPC消息的数据结构,其中,有一个操作命令值,用于接收所述关机LPC消息中的操作命令值。

本实施例中,若操作进程是往关机端口发送关机LPC消息,还需进一步判断所述关机LPC消息中的操作命令值是否为预定的关机或重启操作命令值。

步骤204、若所述关机本地过程调用消息中的操作命令值为关机或重启,则所述关机本地过程调用消息符合预定的拦截条件。

本实施例中,如果PSHUTDOWN_WINDOW_MESSAGE数据结构接收到的操作命令值等于SHUTDOWN_PORT_ID(关机),或者RESTART_PORT_ID(重启),则说明所述关机本地过程调用消息符合预定的拦截条件,继续执行步骤205。

步骤205、若所述关机本地过程调用消息符合预定的拦截条件,且所述操作进程的名称包含在预设的恶意程序进程列表中,则通过所述钩子函数拦截所述关机本地过程调用消息。

本实施例中,步骤205的过程和上述方法实施例的步骤103类似,此处不再赘述。

本发明实施例提供的一种拦截恶意程序关机的方法,通过钩子函数监听操作进程发送的关机本地过程调用消息,其中,所述钩子函数挂钩发送所述关机本地过程调用消息的内核函数;通过所述钩子函数判断所述关机本地过程调用消息是否符合预定的拦截条件;若所述关机本地过程调用消息符合预定的拦截条件,且所述操作进程的名称包含在预设的恶意程序进程列表中,则通过所述钩子函数拦截所述关机本地过程调用消息,这样,通过挂钩发送所述关机LPC消息的内核函数的所述钩子函数,拦截符合预定拦截条件且由恶意操作进程发送的关机LPC消息,由于,发送所述关机LPC消息的内核函数位于关机功能的内核函数的上层,实现过程相对简单,且稳定不易被恶意程序绕开,有利于维护系统安全。

图3为本发明拦截恶意程序关机的装置结构示意图,如图3所示,本实施例的装置可以包括:监听模块11、判断模块12和拦截模块13,其中,

所述监听模块11,用于通过钩子函数监听操作进程发送的关机本地过程调用消息,其中,所述钩子函数挂钩发送所述关机本地过程调用消息的内核函数。

本实施例中,通过钩子函数监听操作进程发送的关机LPC消息,则操作进程发送关机LPC消息的流程包括:

操作进程以关机LPC消息为参数->调用ndtll模块的发送关机LPC消息的函数->本实施例提供的钩子函数->内核层的发送关机LPC消息的内核函数->再由系统解析所述关机LPC消息并调用关机功能的内核函数,从而完成计算机关机操作。

本实施例中,假设,调用ndtll模块的发送关机LPC消息的函数为ndtll模块的NtAlpcSendWaitReceivePort函数;本实施例提供的钩子函数为NewNtAlpcSendWaitReceivePort函数;内核层的发送关机LPC消息的内核函数为内核层的NtAlpcSendWaitReceivePort函数;所述关机功能的内核函数为NtShutdownSystem函数。

本实施例中,从操作进程发送关机LPC消息的流程可知,挂钩内核层的内核函数NtAlpcSendWaitReceivePort或者内核函数NtShutdownSystem都可以实现恶意关机LPC消息的拦截,但是,钩子函数挂钩内核层的内核函数NtAlpcSendWaitReceivePort拦截恶意关机LPC消息时,由于,发送所述关机LPC消息的内核函数NtAlpcSendWaitReceivePort位于关机功能的内核函数NtShutdownSystem的上层,实现过程相对简单,且能更容易更稳定地实现恶意关机LPC消息的拦截。

本实施例中,可以通过挂钩模块实现钩子函数NewNtAlpcSendWaitReceivePort挂钩内核层的内核函数NtAlpcSendWaitReceivePort。

本实施例中,作为一可选实施例,所述装置还包括:挂钩模块;所述挂钩模块包括:

第一获取单元,用于查询预设的系统服务描述符表,获取发送所述关机本地过程调用消息的内核函数的当前地址,并保存获取的发送所述关机本地过程调用消息的内核函数的当前地址;

第二获取单元,用于创建钩子函数,获取所述钩子函数的函数地址;

地址更新单元,用于在所述系统服务描述符表中,将发送所述关机本地过程调用消息的内核函数的当前地址更新为所述钩子函数的函数地址。

本实施例中,钩子函数NewNtAlpcSendWaitReceivePort挂钩内核层的内核函数NtAlpcSendWaitReceivePort的步骤包括:

查询系统中预设的服务描述符表(System Services Descriptor Table,SSDT),获取发送所述关机LPC消息的内核函数NtAlpcSendWaitReceivePort的当前地址,并保存获取的所述当前地址;创建钩子函数NewNtAlpcSendWaitReceivePort,获取所述钩子函数的函数地址;在所述系统服务描述符表中,将发送所述关机LPC消息的内核函数NtAlpcSendWaitReceivePort的当前地址更新为所述钩子函数NewNtAlpcSendWaitReceivePort的函数地址,从而实现了NewNtAlpcSendWaitReceivePort函数的挂钩。

所述判断模块12,用于通过所述钩子函数判断所述关机本地过程调用消息是否符合预定的拦截条件。

本实施例中,所述关机LPC消息至少包括:目标端口的句柄值和操作命令值。

本实施例中,所述预定的拦截条件包括:预定的关机端口句柄值及预定的关机操作命令值,其中,所述预定的关机端口句柄值为关机或重启端口的句柄值,关机端口的句柄值与重启端口的句柄值可以相同,也可以不同,二者统称为关机端口句柄值;所述预定的关机操作命令值包括:关机和重启。

本实施例中,通过所述钩子函数NewNtAlpcSendWaitReceivePort判断所述关机LPC消息是否符合预定的拦截条件。

本实施例中,所述判断模块12包括:第一判断单元、第二判断单元及消息确定单元,其中,

所述第一判断单元,用于通过所述钩子函数判断所述关机本地过程调用消息中的目标端口的句柄值是否与预定的关机端口句柄值相同。

本实施例中,当有操作进程发送关机LPC消息时,就会执行到所述钩子函数NewNtAlpcSendWaitReceivePort,所述钩子函数NewNtAlpcSendWaitReceivePort的参数列表中有一个参数为目标端口句柄参数,由所述目标端口句柄参数接收所述关机LPC消息中的目标端口的句柄值,并由所述钩子函数NewNtAlpcSendWaitReceivePort调用指定的内核函数,例如,ObReferenceObjectByName,获取预定的关机端口句柄值,若函数ObReferenceObiectByName返回的关机端口句柄值于参数中的目标端口的句柄值相同,则说明操作进程是往关机端口发送关机LPC消息。

所述第二判断单元,用于若与预定的关机端口句柄值相同,则判断所述关机本地过程调用消息中的操作命令值是否为关机或重启。

本实施例中,所述钩子函数NewNtAlpcSendWaitReceivePort的参数列表中还有一个PPORT_MESSAGE类型的数据结构,即是向关机端口发送的数据结构,此数据结构为一个pData成员指针,指向一个PSHUTDOWN_WINDOW_MESSAGE类型的结构,PSHUTDOWN_WINDOW_MESSAGE就是关机LPC消息的数据结构,其中,有一个操作命令值,用于接收所述关机LPC消息中的操作命令值。

本实施例中,若操作进程是往关机端口发送关机LPC消息,还需进一步判断所述关机LPC消息中的操作命令值是否为预定的关机或重启操作命令值。

所述消息确定单元,用于若所述关机本地过程调用消息中的操作命令值为关机或重启,则所述关机本地过程调用消息符合预定的拦截条件。

本实施例中,如果PSHUTDOWN_WINDOW_MESSAGE数据结构接收到的操作命令值等于SHUTDOWN_PORT_ID(关机),或者RESTART_PORT_ID(重启),则说明所述关机本地过程调用消息符合预定的拦截条件。

所述拦截模块13,用于若所述关机本地过程调用消息符合预定的拦截条件,且所述操作进程的名称包含在预设的恶意程序进程列表中,则通过所述钩子函数拦截所述关机本地过程调用消息。

本实施例中,当所述关机LPC消息符合预定的拦截条件时,在钩子函数NewNtAlpcSendWaitReceivePort中,还需判断所述操作进程是否为恶意程序,具体的,可以调用ZwQueryInformationProcess等内核函数获取操作进程的安装路径,如C:\windows\system32\av2.exe;从获取的所述操作进程的安装路径中,提取所述操作进程的名称,例如,av2.exe;接着,查询预设的恶意程序进程列表,若所述操作进程的名称包含在预设的恶意程序进程列表中,则拦截所述关机LPC消息。

本实施例中,作为一可选实施例,所述拦截模块13包括:

获取单元,用于若所述关机本地过程调用消息符合预定的拦截条件,则通过所述钩子函数获取所述操作进程的安装路径;

提取单元,用于从获取的所述操作进程的安装路径中,提取所述操作进程的名称;

拦截单元,用于查询预设的恶意程序进程列表,若所述操作进程的名称包含在预设的恶意程序进程列表中,则拦截所述关机本地过程调用消息。

本实施例中,当系统正常关机或重启时,也会发送关机LPC消息,所以预设的恶意程序进程列表中,不能包含CSRSS_EXE,SMSS_EXE,LSASS_EXE,WINLOGON_EXE等系统进程,所述预设的恶意程序进程列表可以包括已知的恶意关机进程的名称,例如,av2.exe,ad2.exe,kei3.exe等。作为又一可选实施例,所述恶意程序进程列表是可扩展的恶意程序进程列表,以便于用户能够根据实际应用情况更新所述恶意程序进程列表。

本实施例中,当操作进程发送的关机LPC消息符合预定的拦截条件,且所述操作进程的名称包含在预设的恶意程序进程列表中,则通过所述钩子函数NewNtAlpcSendWaitReceivePort拦截所述关机本地过程调用消息,退出所述钩子函数NewNtAlpcSendWaitReceivePort,不继续执行内核函数NtAlpcSendWaitReceivePort,则所述关机LPC消息发送失败,关闭计算机的操作就会失败。

本实施例中,作为再一可选实施例,所述拦截单元,具体用于退出所述钩子函数,不将所述关机本地过程调用消息传送给发送所述关机本地过程调用消息的内核函数。

本实施例中,若操作进程发送的关机LPC消息不符合预定的拦截条件,或者,所述操作进程的名称没有包含在预设的恶意程序进程列表中,则所述钩子函数NewNtAlpcSendWaitReceivePort会继续调用执行内核函数NtAlpcSendWaitReceivePort,所述关机LPC消息发送成功,关闭计算机的操作就会成功。

本实施例中,作为又一可选实施例,所述拦截模块13,还用于若所述关机本地过程调用消息不符合预定的拦截条件,或者,所述操作进程的名称没有包含在预设的恶意程序进程列表中,则通过所述钩子函数将所述关机本地过程调用消息传送给发送所述关机本地过程调用消息的内核函数。

本实施例中,为了所述钩子函数NewNtAlpcSendWaitReceivePort能够将所述关机LPC消息传送给内核函数NtAlpcSendWaitReceivePort,在所述钩子函数NewNtAlpcSendWaitReceivePort调用执行所述内核函数NtAlpcSendWaitReceivePort之前,在系统服务描述符表中,需将发送所述关机LPC消息的内核函数的当前地址更新为已保存的发送所述关机LPC消息的内核函数的原始地址。

本实施例中,作为再一可选实施例,所述拦截模块13,还用于在系统服务描述符表中,将发送所述关机本地过程调用消息的内核函数的当前地址更新为已保存的发送所述关机本地过程调用消息的内核函数的原始地址。

本实施例提供的一种拦截恶意程序关机的装置,通过钩子函数监听操作进程发送的关机本地过程调用消息,其中,所述钩子函数挂钩发送所述关机本地过程调用消息的内核函数;通过所述钩子函数判断所述关机本地过程调用消息是否符合预定的拦截条件;若所述关机本地过程调用消息符合预定的拦截条件,且所述操作进程的名称包含在预设的恶意程序进程列表中,则通过所述钩子函数拦截所述关机本地过程调用消息,这样,通过挂钩发送所述关机LPC消息的内核函数的所述钩子函数,拦截符合预定拦截条件且由恶意操作进程发送的关机LPC消息,由于,发送所述关机LPC消息的内核函数位于关机功能的内核函数的上层,实现过程相对简单,且稳定不易被恶意程序绕开,有利于维护系统安全。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。

尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,″计算机可读介质″可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。

应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。

在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。

本发明实施例还提供一种电子设备。图4为本发明电子设备一个实施例的结构示意图,可以实现本发明图1-3所示实施例的流程,如图4所示,上述电子设备可以包括:壳体41、处理器42、存储器43、电路板44和电源电路45,其中,电路板44安置在壳体41围成的空间内部,处理器42和存储器43设置在电路板44上;电源电路45,用于为上述电子设备的各个电路或器件供电;存储器43用于存储可执行程序代码;处理器42通过读取存储器43中存储的可执行程序代码来运行与可执行程序代码对应的程序,用于执行前述任一实施例所述的拦截恶意程序关机的方法。

处理器42对上述步骤的具体执行过程以及处理器42通过运行可执行程序代码来进一步执行的步骤,可以参见本发明图1-3所示实施例的描述,在此不再赘述。

该电子设备以多种形式存在,包括但不限于:

(1)移动通信设备:这类设备的特点是具备移动通信功能,并且以提供话音、数据通信为主要目标。这类终端包括:智能手机(例如iPhone)、多媒体手机、功能性手机,以及低端手机等。

(2)超移动个人计算机设备:这类设备属于个人计算机的范畴,有计算和处理功能,一般也具备移动上网特性。这类终端包括:PDA、MID和UMPC设备等,例如iPad。

(3)便携式娱乐设备:这类设备可以显示和播放多媒体内容。该类设备包括:音频、视频播放器(例如iPod),掌上游戏机,电子书,以及智能玩具和便携式车载导航设备。

(4)服务器:提供计算服务的设备,服务器的构成包括处理器、硬盘、内存、系统总线等,服务器和通用的计算机架构类似,但是由于需要提供高可靠的服务,因此在处理能力、稳定性、可靠性、安全性、可扩展性、可管理性等方面要求较高。

(5)其他具有数据交互功能的电子设备。

本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。

为了描述的方便,描述以上装置是以功能分为各种单元/模块分别描述。当然,在实施本发明时可以把各单元/模块的功能在同一个或多个软件和/或硬件中实现。

通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1