线程的保护方法、装置及电子设备与流程

文档序号:11951565阅读:494来源:国知局
线程的保护方法、装置及电子设备与流程

本发明涉及计算机技术领域,尤其涉及一种线程的保护方法、装置及电子设备。



背景技术:

随着互联网技术发展,病毒,木马等恶意程序技术层出不穷。有的恶意软件为了自身存活,利用各种恶意手段对杀毒软件进行攻击,例如结束或暂停杀毒软件的进程,删除杀毒软件安装目录下的文件等。其中,有一种方法是暂停杀毒软件进程中的所有线程,暂停所有线程会导致进程处于不工作状态,相当于结束了杀毒软件的进程。相关技术中,可通过挂钩一个内核函数,或者挂钩发送通信函数来实现保护对应的进程。但是,上述方法无法保护恶意程序结束杀毒软件的线程。



技术实现要素:

本发明旨在至少在一定程度上解决相关技术中的技术问题之一。为此,本发明的第一个目的在于提出一种线程的保护方法,该方法能够防止恶意程序暂停杀毒软件的所有线程,从而保证系统信息安全。

本发明的第二个目的在于提出一种线程的保护装置。

本发明的第三个目的在于提出一种电子设备。

为实现上述目的,本发明第一方面实施例提出了一种线程的保护方法,包括以下步骤:监控目标线程是否接收到暂停指令;当确定所述目标线程接收到所述暂停指令时,利用钩子函数挂钩与所述目标线程对应的预设函数;判断所述目标线程对应的进程路径是否在预设目录下;如果所述目标线程对应的进程路径在所述预设目录下,则执行对所述目标线程的保护操作。

可选的,利用钩子函数挂钩与所述目标线程对应的预设函数,包括:从系统服务描述符表SSDT中查找所述预设函数的地址;建立所述钩子函数,并将所述钩子函数的地址设置为所述预设函数的地址,以挂钩所述预设函数。

可选的,判断所述目标线程对应的进程路径是否在预设目录下,包括:获取所述目标线程的线程句柄;根据所述线程句柄获取所述目标进程的进程句柄;根据所述进程句柄获取所述进程路径;判断所述进程路径是否在预设目录下。

可选的,根据所述线程句柄获取所述目标进程的进程句柄,包括:根据所述线程句柄获取所述目标线程的线程体结构地址;根据所述线程体结构地址获取所述目标线程所在的进程体结构;根据所述进程体结构获取所述进程句柄。

可选的,执行对所述目标线程的保护操作,包括:利用所述钩子函数向所述暂停指令的发起主体返回拒绝状态;或者利用所述钩子函数向所述暂停指令的发起主体返回暂停成功的假状态;或者利用所述钩子函数执行所述预设函数,暂停所述目标线程,并在向所述暂停指令的发起主体返回暂停成功状态之后,恢复所述目标线程。

为实现上述目的,本发明第二方面实施例提出了一种线程的保护装置,包括:监控模块,用于监控目标线程是否接收到暂停指令;挂钩模块,用于当确定所述目标线程接收到所述暂停指令时,利用钩子函数挂钩与所述目标线程对应的预设函数;判断模块,用于判断所述目标线程对应的进程路径是否在预设目录下;执行模块,用于如果所述目标线程对应的进程路径在所述预设目录下,则执行对所述目标线程的保护操作。

可选的,所述挂钩模块,包括:查找子模块,用于从系统服务描述符表SSDT中查找所述预设函数的地址;建立子模块,用于建立所述钩子函数,并将所述钩子函数的地址设置为所述预设函数的地址,以挂钩所述预设函数。

可选的,所述判断模块,包括:第一获取子模块,用于获取所述目标线程的线程句柄;第二获取子模块,用于获取根据所述线程句柄获取所述目标进程的进程句柄;第三获取子模块,用于获取根据所述进程句柄获取所述进程路径;判断子模块,用于判断所述进程路径是否在预设目录下。

可选的,所述第二获取子模块,用于:根据所述线程句柄获取所述目标线程的线程体结构地址;根据所述线程体结构地址获取所述目标线程所在的进程体结构;根据所述进程体结构获取所述进程句柄。

可选的,所述执行模块,用于:利用所述钩子函数向所述暂停指令的发起主体返回拒绝状态;或者利用所述钩子函数向所述暂停指令的发起主体返回暂停成功的假状态;或者利用所述钩子函数执行所述预设函数,暂停所述目标线程,并在向所述暂停指令的发起主体返回暂停成功状态之后,恢复所述目标线程。

为实现上述目的,本发明第三方面实施例提出了一种电子设备,该电子设备包括处理器、存储器、通信接口和总线;所述处理器、所述存储器和所述通信接口通过所述总线连接并完成相互间的通信;所述存储器存储可执行程序代码;所述处理器通过读取所述存储器中存储的可执行程序代码来运行与所述可执行程序代码对应的程序,以用于执行以下步骤:

监控目标线程是否接收到暂停指令;

当确定所述目标线程接收到所述暂停指令时,利用钩子函数挂钩与所述目标线程对应的预设函数;

判断所述目标线程对应的进程路径是否在预设目录下;

如果所述目标线程对应的进程路径在所述预设目录下,则执行对所述目标线程的保护操作。

为实现上述目的,本发明第四方面实施例提出了一种存储介质,其中,所述存储介质用于存储应用程序,所述应用程序用于在运行时执行本发明所述的一种线程的保护方法。

为实现上述目的,本发明第五方面实施例提出了一种应用程序,其中,所述应用程序用于在运行时执行本发明所述的一种线程的保护方法。

在本发明中,通过钩子函数挂钩恶意程序暂停目标线程时需要调用的预设函数,在监控到有恶意程序暂停目标线程时,对目标线程进行保护,防止恶意程序暂停杀毒软件的所有线程,从而保证系统信息安全。

本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。

附图说明

图1是根据本发明一个实施例的线程的保护方法的流程图;

图2是根据本发明一个实施例的线程的保护装置的结构示意图;

图3是根据本发明一个实施例的电子设备的结构示意图。

具体实施方式

下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本发明,而不能理解为对本发明的限制。

下面参考附图描述本发明实施例的线程的保护方法、装置及电子设备。

图1是根据本发明一个实施例的线程的保护方法的流程图,如图1所示,该方法包括:

S101、监控目标线程是否接收到暂停指令。

首先,先介绍下恶意程序暂停目标线程的过程。恶意程序可先在应用层调用SuspendThread函数,然后调用ZwSuspendThread函数,进而在内核层调用NtSuspendThread函数,最终通过系统暂停目标线程。在本实施例中,目标线程主要是杀毒软件的线程。系统为即操作系统,如WINDOWS。

因此,若要防止恶意程序暂停目标线程,需要对目标线程进行监控,监控其是否接收到来自恶意程序的暂停指令。

S102、当确定目标线程接收到暂停指令时,利用钩子函数挂钩与目标线程对应的预设函数。

具体地,可从SSDT(System Services Descriptor Table,系统服务描述符表)中查找预设函数的地址。然后建立钩子函数,并将钩子函数的地址设置为预设函数的地址,以挂钩预设函数。举例来说,可从SSDT中查找到函数NtSuspendThread的地址,并保存该地址。然后,建立一个钩子函数NewNtSuspendThread,将钩子函数的地址替换为函数NtSuspendThread的地址,从而实现对函数NtSuspendThread的挂钩。

S103、判断目标线程对应的进程路径是否在预设目录下。

在利用钩子函数挂钩与目标线程对应的预设函数之后,可判断目标线程对应的进程路径是否在预设目录下。

具体地,可获取目标线程的线程句柄,并根据线程句柄获取目标进程的进程句柄。然后根据进程句柄获取进程路径,最后判断进程路径是否在预设目录下。

在本实施例中,预设目录为杀毒软件的安装目录。如果进程路径在预设目录下,则说明恶意程序暂停的是杀毒软件的线程;如果进程路径不在预设目录下,则说明暂停的并非杀毒软件的线程。

其中,根据线程句柄获取目标进程的进程句柄,还可进一步包括以下步骤:

首先,根据线程句柄获取目标线程的线程体结构地址,再根据线程体结构地址获取目标线程所在的进程体结构,然后根据进程体结构获取进程句柄。

举例来说,线程句柄是线程的标识,根据该标识钩子函数对目标线程进行操作。具体地,可将线程句柄作为参数,调用内核函数ObReferenceObjectByHandle,从而获取线程体结构地址。其中,线程体结构是保存线程所有数据的一个结构。将线程体结构地址作为参数,调用函数IoThreadToProcess以获取目标线程所在的进程体结构。然后,由进程体结构调用ObOpenObjectByPointer获取进程句柄。再根据进程句柄调用函数ZwQueryInformationProcess,从而查询到目标线程所在的进程路径。然后可判断该进程路径是否在杀毒软件的安装目录下。

S104、如果目标线程对应的进程路径在预设目录下,则执行对目标线程的保护操作。

在本实施例中,杀毒软件可执行对目标进程的保护操作,即拦截恶意程序的暂停操作。具体地,可包括以下几个方式:

第一个方式:利用钩子函数向暂停指令的发起主体返回拒绝状态。例如:利用钩子函数NewNtSuspendThread向恶意程序返回一个拒绝访问的状态。如此做,可拒绝执行原有的函数NtSuspendThread,从而使得系统无需接收到暂停线程的指令,达到拦截的目的。

第二个方式:利用钩子函数向暂停指令的发起主体返回暂停成功的假状态。例如:利用钩子函数NewNtSuspendThread向恶意程序返回一个暂停成功的假状态,使得恶意程序接收到的返回值是暂停成功的假状态,但实质上并未执行原有的函数NtSuspendThread对目标线程进行暂停。

第三个方式:利用钩子函数执行预设函数,暂停目标线程,并在向暂停指令的发起主体返回暂停成功状态之后,恢复目标线程。例如:利用钩子函数NewNtSuspendThread执行原有的函数NtSuspendThread对目标线程进行暂停。暂停成功后,再调用一个函数NtResumeThread把已暂停的目标线程恢复运行。这样,可使恶意程序认为目标线程已经暂停成功,从而达到拦截的效果。

当然,如果目标线程对应的进程路径不在预设目录下,则可直接执行对目标线程的暂停操作。

本发明实施例的线程的保护方法,通过钩子函数挂钩恶意程序暂停目标线程时需要调用的预设函数,在监控到有恶意程序暂停目标线程时,对目标线程进行保护,防止恶意程序暂停杀毒软件的所有线程,从而保证系统信息安全。

为了实现上述实施例,本发明还提出一种线程的保护装置。

图2是根据本发明一个实施例的线程的保护装置的结构示意图。

如图2所示,该装置包括:监控模块110、挂钩模块120、判断模块130和执行模块140。

监控模块110用于监控目标线程是否接收到暂停指令。

首先,先介绍下恶意程序暂停目标线程的过程。恶意程序可先在应用层调用SuspendThread函数,然后调用ZwSuspendThread函数,进而在内核层调用NtSuspendThread函数,最终通过系统暂停目标线程。在本实施例中,目标线程主要是杀毒软件的线程。系统为即操作系统,如WINDOWS。

因此,若要防止恶意程序暂停目标线程,需要对目标线程进行监控,监控其是否接收到来自恶意程序的暂停指令。

挂钩模块120用于当确定目标线程接收到暂停指令时,利用钩子函数挂钩与目标线程对应的预设函数。

其中,挂钩模块120可包括查找子模块121和建立子模块122。

具体地,查找子模块121可从SSDT(System Services Descriptor Table,系统服务描述符表)中查找预设函数的地址。然后建立子模块122建立钩子函数,并将钩子函数的地址设置为预设函数的地址,以挂钩预设函数。举例来说,可从SSDT中查找到函数NtSuspendThread的地址,并保存该地址。然后,建立一个钩子函数NewNtSuspendThread,将钩子函数的地址替换为函数NtSuspendThread的地址,从而实现对函数NtSuspendThread的挂钩。

判断模块130用于判断目标线程对应的进程路径是否在预设目录下。

判断模块130可包括第一获取子模块131、第二获取子模块132、第三获取子模块133和判断子模块134。

具体地,第一获取子模块131可获取目标线程的线程句柄,第二获取子模块132根据线程句柄获取目标进程的进程句柄。然后第三获取子模块133根据进程句柄获取进程路径,最后判断子模块134判断进程路径是否在预设目录下。

更具体地,第二获取子模块132可根据线程句柄获取目标线程的线程体结构地址,再根据线程体结构地址获取目标线程所在的进程体结构,然后根据进程体结构获取进程句柄。

在本实施例中,预设目录为杀毒软件的安装目录。如果进程路径在预设目录下,则说明恶意程序暂停的是杀毒软件的线程;如果进程路径不在预设目录下,则说明暂停的并非杀毒软件的线程。

举例来说,线程句柄是线程的标识,根据该标识钩子函数对目标线程进行操作。具体地,可将线程句柄作为参数,调用内核函数ObReferenceObjectByHandle,从而获取线程体结构地址。其中,线程体结构是保存线程所有数据的一个结构。将线程体结构地址作为参数,调用函数IoThreadToProcess以获取目标线程所在的进程体结构。然后,由进程体结构调用ObOpenObjectByPointer获取进程句柄。再根据进程句柄调用函数ZwQueryInformationProcess,从而查询到目标线程所在的进程路径。然后可判断该进程路径是否在杀毒软件的安装目录下。

执行模块140用于如果目标线程对应的进程路径在预设目录下,则执行对目标线程的保护操作。在本实施例中,执行模块140可执行对目标进程的保护操作,即拦截恶意程序的暂停操作。具体地,可包括以下几个方式:

第一个方式:利用钩子函数向暂停指令的发起主体返回拒绝状态。例如:利用钩子函数NewNtSuspendThread向恶意程序返回一个拒绝访问的状态。如此做,可拒绝执行原有的函数NtSuspendThread,从而使得系统无需接收到暂停线程的指令,达到拦截的目的。

第二个方式:利用钩子函数向暂停指令的发起主体返回暂停成功的假状态。例如:利用钩子函数NewNtSuspendThread向恶意程序返回一个暂停成功的假状态,使得恶意程序接收到的返回值是暂停成功的假状态,但实质上并未执行原有的函数NtSuspendThread对目标线程进行暂停。

第三个方式:利用钩子函数执行预设函数,暂停目标线程,并在向暂停指令的发起主体返回暂停成功状态之后,恢复目标线程。例如:利用钩子函数NewNtSuspendThread执行原有的函数NtSuspendThread对目标线程进行暂停。暂停成功后,再调用一个函数NtResumeThread把已暂停的目标线程恢复运行。这样,可使恶意程序认为目标线程已经暂停成功,从而达到拦截的效果。

当然,如果目标线程对应的进程路径不在预设目录下,则可直接执行对目标线程的暂停操作。

本发明实施例的线程的保护装置,通过钩子函数挂钩恶意程序暂停目标线程时需要调用的预设函数,在监控到有恶意程序暂停目标线程时,对目标线程进行保护,防止恶意程序暂停杀毒软件的所有线程,从而保证系统信息安全。

为了实现上述实施例,本发明还提出一种电子设备。

图3是根据本发明一个实施例的电子设备的结构示意图。

如图3所示,该电子设备包括处理器31、存储器32、通信接口33和总线34,其中:处理器31、存储器32和通信接口33通过总线34连接并完成相互间的通信;存储器32存储可执行程序代码;处理器31通过读取存储器32中存储的可执行程序代码来运行与可执行程序代码对应的程序,以用于执行以下步骤:

S101’、监控目标线程是否接收到暂停指令。

首先,先介绍下恶意程序暂停目标线程的过程。恶意程序可先在应用层调用SuspendThread函数,然后调用ZwSuspendThread函数,进而在内核层调用NtSuspendThread函数,最终通过系统暂停目标线程。在本实施例中,目标线程主要是杀毒软件的线程。系统为即操作系统,如WINDOWS。

因此,若要防止恶意程序暂停目标线程,需要对目标线程进行监控,监控其是否接收到来自恶意程序的暂停指令。

S102’、当确定目标线程接收到暂停指令时,利用钩子函数挂钩与目标线程对应的预设函数。

具体地,可从SSDT(System Services Descriptor Table,系统服务描述符表)中查找预设函数的地址。然后建立钩子函数,并将钩子函数的地址设置为预设函数的地址,以挂钩预设函数。举例来说,可从SSDT中查找到函数NtSuspendThread的地址,并保存该地址。然后,建立一个钩子函数NewNtSuspendThread,将钩子函数的地址替换为函数NtSuspendThread的地址,从而实现对函数NtSuspendThread的挂钩。

S103’、判断目标线程对应的进程路径是否在预设目录下。

在利用钩子函数挂钩与目标线程对应的预设函数之后,可判断目标线程对应的进程路径是否在预设目录下。

具体地,可获取目标线程的线程句柄,并根据线程句柄获取目标进程的进程句柄。然后根据进程句柄获取进程路径,最后判断进程路径是否在预设目录下。

在本实施例中,预设目录为杀毒软件的安装目录。如果进程路径在预设目录下,则说明恶意程序暂停的是杀毒软件的线程;如果进程路径不在预设目录下,则说明暂停的并非杀毒软件的线程。

其中,根据线程句柄获取目标进程的进程句柄,还可进一步包括以下步骤:

首先,根据线程句柄获取目标线程的线程体结构地址,再根据线程体结构地址获取目标线程所在的进程体结构,然后根据进程体结构获取进程句柄。

举例来说,线程句柄是线程的标识,根据该标识钩子函数对目标线程进行操作。具体地,可将线程句柄作为参数,调用内核函数ObReferenceObjectByHandle,从而获取线程体结构地址。其中,线程体结构是保存线程所有数据的一个结构。将线程体结构地址作为参数,调用函数IoThreadToProcess以获取目标线程所在的进程体结构。然后,由进程体结构调用ObOpenObjectByPointer获取进程句柄。再根据进程句柄调用函数ZwQueryInformationProcess,从而查询到目标线程所在的进程路径。然后可判断该进程路径是否在杀毒软件的安装目录下。

S104’、如果目标线程对应的进程路径在预设目录下,则执行对目标线程的保护操作。

在本实施例中,杀毒软件可执行对目标进程的保护操作,即拦截恶意程序的暂停操作。具体地,可包括以下几个方式:

第一个方式:利用钩子函数向暂停指令的发起主体返回拒绝状态。例如:利用钩子函数NewNtSuspendThread向恶意程序返回一个拒绝访问的状态。如此做,可拒绝执行原有的函数NtSuspendThread,从而使得系统无需接收到暂停线程的指令,达到拦截的目的。

第二个方式:利用钩子函数向暂停指令的发起主体返回暂停成功的假状态。例如:利用钩子函数NewNtSuspendThread向恶意程序返回一个暂停成功的假状态,使得恶意程序接收到的返回值是暂停成功的假状态,但实质上并未执行原有的函数NtSuspendThread对目标线程进行暂停。

第三个方式:利用钩子函数执行预设函数,暂停目标线程,并在向暂停指令的发起主体返回暂停成功状态之后,恢复目标线程。例如:利用钩子函数NewNtSuspendThread执行原有的函数NtSuspendThread对目标线程进行暂停。暂停成功后,再调用一个函数NtResumeThread把已暂停的目标线程恢复运行。这样,可使恶意程序认为目标线程已经暂停成功,从而达到拦截的效果。

当然,如果目标线程对应的进程路径不在预设目录下,则可直接执行对目标线程的暂停操作。

本发明实施例的电子设备,通过钩子函数挂钩恶意程序暂停目标线程时需要调用的预设函数,在监控到有恶意程序暂停目标线程时,对目标线程进行保护,防止恶意程序暂停杀毒软件的所有线程,从而保证系统信息安全。

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

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

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

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

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

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

为实现上述目的,本发明还提出一种存储介质,其中,存储介质用于存储应用程序,应用程序用于在运行时执行本发明的一种线程的保护方法。

为实现上述目的,本发明还提出一种应用程序,其中,应用程序用于在运行时执行本发明的一种线程的保护方法。

此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。

在本发明中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”、“固定”等术语应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或成一体;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通或两个元件的相互作用关系,除非另有明确的限定。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。

在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。

尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。

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