专利名称:一种杀死受保护的恶意计算机进程的系统及方法
技术领域:
本发明涉及计算机安全技术领域,尤其涉及一种杀死受保护的恶意计算机进程的系统及方法。
背景技术:
随着Windows系统内核技术细节的日益公开,越来越多的木马病毒程序也开始使用内核驱动程序来保护自身的进程。这一类进程,在Win32应用层使用任务管理器是无法杀掉的。受内核驱动程序保护的恶意进程,也只能通过内核驱动技术来杀死。在Windows XP以后的视窗系统中,提供了几个系统工具来管理系统中的进程,常见的有任务管理器、taskkill. exe.net. exe等,以管理员身份登录系统后,就能用这些工具来对系统的进程进行管理,例如对各种进程进行“结束任务”操作,也即是杀死进程。但net.exe工具只能结束系统服务进程,Windows系统自带的任务管理器和taskkill. exe,只能杀死普通进程,对于受保护的恶意进程,却无能为力。Windows2000以后的视窗系统中,提供了一个ntsd. exe程序,该程序是一个系统调试工具,功能比较强大。使用适当的命令行参数,能杀死系统中绝大多数的进程,其杀进程能力比任务管理器、taskkill. exe和net. exe要高。但ntsd. exe系统调试工具仍然不能杀死受内核驱动保护的进程。
发明内容
本发明的目的是为了克服现有技术的缺陷,提供一种杀死受保护的恶意计算机进程的系统及方法,通过该发明便于阻止内核中的恶意进程对计算机进行攻击。一种杀死受保护的恶意计算机进程的系统,是通过Win32应用程序和驱动程序两个模块来实现的。Win32应用程序模块包括向进程窗口发WM_CL0SE消息-向目标进程窗口发送WM_CL0SE消息使其终止运行;注入代码调用ExitProcess函数一向目标进程注入代码并调用ExitProcess函数使其终止运行;调用TerminateProcess函数一调用Windows系统提供的API函数TerminateProcess来使目标进程退出;与内核驱动程序通信一向内核驱动程序发送目标进程信息并接收驱动程序的反馈信息;运行日志及报告一记录程序的运行日志并生成报告以供用户阅读;内核驱动程序模块包括与Win32应用程序通信一负责接收Win32应用程序传入的目标进程的ID,并且在操作结束后再将结果反馈给Win32应用程序;
调用NtTerminateProcess 函数一使用 NtTerminateProcess 函数来杀死进程;调用PspTerminateProcess 函数一使用更底层的内核函数 PspTerminateProcess来杀死进程;将进程代码的内存页面清0—使用将存放有目标进程运行代码的内存页面清0的方法来杀死进程。如果完成了对目标进程的杀死操作,就立刻反馈给日志及报告模块,不必再往下执行了。如果是在驱动中完成的杀进程操作,那么还需要通过通信模块将信息反馈到Win32应用层。本发明还提供了一种杀死受保护的恶意计算机进程的方法来进行杀死恶意进程。本发明技术方案带来的有益效果通过本发明可灭杀各种顽固的木马病毒进程。由于使用了内核驱动程序与Win32应用程序相结合的技术,并尝试多种杀进程的方法,使得各种类型的恶意进程基本上都能杀死,从而阻止恶意程序对计算机的攻击及数据安全,特别是能杀死内核驱动程序保护的恶意进程。
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。图I是本发明的系统结构示意图;图2是本发明的方法流程图。
具体实施例方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。本发明提供了一种杀死受保护的恶意计算机进程的系统,该系统是通过Win32应用程序和驱动程序两个模块来实现的,两个模块的功能结构图如图I所示。Win32应用程序模块主要包括5项功能,各项功能分别完成以下工作向进程窗口发WM_CL0SE消息向目标进程窗口发送WM_CL0SE消息使其终止运行。注入代码调用ExitProcess函数向目标进程注入代码并调用ExitProcess函数使其终止运行。调用TerminateProcess函数调用Windows系统提供的API函数TerminateProcess来使目标进程退出。与内核驱动程序通信向内核驱动程序发送目标进程信息并接收驱动程序的反馈信息。运行日志及报告记录程序的运行日志并生成报告以供用户阅读。
而内核驱动程序模块包含 4项功能,各项功能分别完成下面的工作
与Win32应用程序通信主要负责接收Win32应用程序传入的目标进程的ID,并且在操作结束后再将结果反馈给Win32应用程序。
调用NtTerminateProcess函数主要使用NtTerminateProcess函数来杀死进程。
调用PspTerminateProcess 函数使用更底层的内核函数 PspTerminateProcess 来杀死进程。
将进程代码的内存页面清O :使用将存放有目标进程运行代码的内存页面清O的方法来杀死进程。
本发明的方法流程图如图2所示
从流程图中可以看出,本发明首先取得恶意进程的ID,然后查找该进程是否存在主窗口,如果目标进程有主窗口的话,向进程主窗口发送WM_CL0SE消息可以使其主窗口关闭并终止运行;如果目标进程没有主窗口,目标进程已经注册成为系统服务进程,那么向目标进程注入代码并调用ExitPiOcess函数,也能达到杀死目标进程的目的。
如果上面两种方法都无法杀死目标进程,或者不适用于该目标进程。那么还可以使用调用TerminateProcess函数的方法来杀死目标进程,这是在Win32应用层杀死目标进程的终极方法。如果通过上述3种方法都无法杀死目标进程,那么该进程很可能已经受到内核驱动程序的保护。对于这种进程,也只能在内核驱动程序中去杀死它。与内核驱动程序通信这项功能可以将目标进程的ID传到内核驱动程序中,由内核驱动程序来完成杀进程操作。
当内核驱动程序获得进程ID后,可以通过调用PsLookupProcessByProcessId函数得到进程的EPR0CESS对象,然后同通过调用ObOpenObjectByPointer函数得到进程的内核句柄,最后调用NtTerminateProcess函数杀死进程。NtTerminateProcess函数是内核杀进程的常规用法。如果保护目标进程的驱动对NtTerminatePiOcess函数进行了修改挂钩,那么用上述的方法也无法杀死目标进程。这时可以采用调用PspTerminateProcess函数的方法来杀死目标进程,得到进程的EPR0CESS对象后就能调用此函数,这是一种比调用 NtTerminateProcess函数更底层的方法。
但是如果保护目标进程的驱动连PspTerminateProcess函数也做了修改挂钩, 那么还可以用将存放有目标进程代码的内存页面清O的方法来杀死目标进程。该方法主要通过PsLookupProcessByProcessId函数得到目标进程的EPR0CESS对象,然后调用 KeStackAttachProcess函数切换到进程目标进程的地址空间,再修改CRO寄存器去掉存放有目标进程代码的内存页面的写保护,最后调用RtlZeiOMemory函数将目标进程代码存放的内存页面清O来达到杀死目标进程的目的。这种方法中,没有调用到系统中任何结束进程或线程的函数,因此即使保护目标进程的驱动程序在PspTerminateProcess函数做了手脚来保护目标进程,也无法阻挡这种杀进程的方法。
在流程图中还可以看出,无论在哪一步中,如果完成了对目标进程的杀死操作,就立刻反馈给日志及报告模块,不必再往下执行了。如果是在驱动中完成的杀进程操作,那么还需要通过通信模块将信息反馈到Win32应用层。
通过本发明可灭杀各种顽固的木马病毒进程。由于使用了内核驱动程序与Win32 应用程序相结合的技术,并尝试多种杀进程的方法,使得各种类型的恶意进程基本上都能杀死,从而阻止恶意程序对计算机的攻击及数据安全。
在驱动程序中,还可以恢复钩子后再杀死受保护的进程。但这种方法还要遍历系统的各种调用函数,找到被挂钩的地点才能恢复钩子,实现起来更加复杂,并容易导致系统出错,因为一些有益的软件也会采用挂钩的办法来实现其某些功能。
以上对本发明实施例所提供的一种杀死受保护的恶意计算机进程的方法进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式
及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。权利要求
1.一种杀死受保护的恶意计算机进程的系统,其特征在于,该系统是通过Win32应用程序和驱动程序两个模块来实现的, Win32应用程序模块包括 向进程窗口发WM_CLOSE消息一向目标进程窗口发送WM_CLOSE消息使其终止运行; 注入代码调用ExitProcess函数一向目标进程注入代码并调用ExitProcess函数使其终止运行; 调用 TerminateProcess 函数一调用 Windows 系统提供的 API 函数 TerminateProcess来使目标进程退出; 与内核驱动程序通信一向内核驱动程序发送目标进程信息并接收驱动程序的反馈信息; 运行日志及报告一记录程序的运行日志并生成报告以供用户阅读; 内核驱动程序模块包括 与Win32应用程序通信-负责接收Win32应用程序传入的目标进程的ID,并且在操作结束后再将结果反馈给Win32应用程序; 调用NtTerminateProcess函数-使用NtTerminateProcess函数来杀死进程; 调用PspTerminateProcess函数-使用更底层的内核函数PspTerminateProcess来杀死进程; 将进程代码的内存页面清O使用将存放有目标进程运行代码的内存页面清O的方法来杀死进程。
2.如权利要求I所述的系统,其特征在于,完成了对目标进程的杀死操作,就立刻反馈给日志及报告模块,不必再往下执行了。
3.如权利要求I所述的系统,其特征在于,如果是在驱动中完成的杀进程操作,那么还需要通过通信模块将信息反馈到Win32应用层。
4.一种杀死受保护的恶意计算机进程的方法,其特征在于,该方法的具体流程为首先取得恶意进程的ID,然后查找该进程是否存在主窗口,如果目标进程有主窗口的话,向进程主窗口发送WM_CL0SE消息使其主窗口关闭并终止运行;如果目标进程没有主窗口,目标进程已经注册成为系统服务进程,那么向目标进程注入代码并调用ExitPiOcess函数,也能达到杀死目标进程的目的; 如果上面两种方法都无法杀死目标进程,或者不适用于该目标进程,那么使用调用TerminateProcess函数的方法来杀死目标进程,这是在Win32应用层杀死目标进程的终极方法。
5.如权利要求4所述的方法,其特征在于,如果通过上述方法都无法杀死目标进程,那么该进程很可能已经受到内核驱动程序的保护,对于这种进程,也只能在内核驱动程序中去杀死它;与内核驱动程序通信这项功能将目标进程的ID传到内核驱动程序中,由内核驱动程序来完成杀进程操作; 当内核驱动程序获得进程ID后,可以通过调用PsLookupProcessByProcessId函数得到进程的EPR0CESS对象,然后同通过调用ObOpenObjectByPointer函数得到进程的内核句柄,最后调用NtTerminateProcess函数杀死进程;如果保护目标进程的驱动对NtTerminateProcess函数进行了修改挂钩,那么用上述的方法也无法杀死目标进程,这时采用调用PspTerminateProcess函数的方法来杀死目标进程,得到进程的EPR0CESS对象后就能调用此函数,这是一种比调用NtTerminateProcess函数更底层的方法; 但是如果保护目标进程的驱动连PspTerminateProcess函数也做了修改挂钩,则用将存放有目标进程代码的内存页面清O的方法来杀死目标进程。
6.如权利要求5所述的方法,其特征在于,将存放有目标进程代码的内存页面清O的方法是通过PsLookupProcessByProcessId函数得到目标进程的EPR0CESS对象,然后调用KeStackAttachProcess函数切换到进程目标进程的地址空间,再修改CRO寄存器去掉存放有目标进程代码的内存页面的写保护,最后调用RtlZeiOMemory函数将目标进程代码存放的内存页面清O来达到杀死目标进程的目的。
7.如权利要求6所述的方法,其特征在于,将存放有目标进程代码的内存页面清O的方法没有调用到系统中任何结束进程或线程的函数,因此即使保护目标进程的驱动程序在PspTerminateProcess函数做了手脚来保护目标进程,也无法阻挡这种杀进程的方法。
8.如权利要求4-7所述的方法,其特征在于,在驱动程序中,还能够通过恢复钩子后再杀死受保护的进程。
全文摘要
本发明公开了一种杀死受保护的恶意计算机进程的系统及方法,该系统是通过Win32应用程序和驱动程序两个模块来实现的,Win32应用程序模块主要包括向进程窗口发WM_CLOSE消息、注入代码调用ExitProcess函数、调用TerminateProcess函数、与内核驱动程序通信、运行日志及报告;内核驱动程序模块包含与Win32应用程序通信、调用NtTerminateProcess函数、调用PspTerminateProcess函数、将进程代码的内存页面清0。同时本发明还公开了一种杀死受保护的恶意计算机进程的方法。由于使用了内核驱动程序与Win32应用程序相结合的技术,并尝试多种杀进程的方法,使得各种类型的恶意进程基本上都能杀死,从而阻止恶意程序对计算机的攻击及数据安全。
文档编号G06F21/56GK102982283SQ201210491369
公开日2013年3月20日 申请日期2012年11月27日 优先权日2012年11月27日
发明者柯宗贵, 杨育斌, 黄文森 申请人:蓝盾信息安全技术股份有限公司