实现进程防杀的方法转让专利

申请号 : CN201110096654.5

文献号 : CN102156834B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 于晓军万雪松赵辰清

申请人 : 北京思创银联科技股份有限公司

摘要 :

本发明公开了一种实现进程防杀的方法,涉及进程监控技术领域,所述方法包括步骤:S1:申请一个五字节的全局数组,第一个字节代表跳转JMP指令,后四个字节代表跳转的大小,用所述五字节的全局数组替换ObReferenceObjectByHandle的前五个字节;S2:根据DetourObReferenceObjectByHandle实现进程防杀。应用本发明所述的方法,由于ObReferenceObjectByHandle相对于比较底层,所以任何非法的进程关闭和正常的进程关闭时都会调用ObReferenceObjectByHandle把句柄转化为File_Object,然后把进程关闭。所以我们可以HOOK ObReferenceObjectByHandle拦截将要关闭的进程,然后判断是否为正常的关闭进程,其不会被轻易的绕过,能够很好地保护进程不被非法关闭。

权利要求 :

1.一种实现进程防杀的方法,其特征在于,所述方法包括步骤:

S1:申请一个五字节的全局数组,第一个字节代表跳转JMP指令,后四个字节代表跳转的大小,用所述五字节的全局数组替换ObReferenceObjectByHandle的前五个字节;

S2:根据DetourObReferenceObjectByHandle实现进程防杀,其中所述步骤S2具体包括:

步骤S21:在DetourObReferenceObjectByHandle中调用原始的前五个字节已被替换的ObReferenceObjectByHandle并跳转到所述ObReferenceObjectByHandle的后五个字节;

步骤S22:根据ObReferenceObjectByHandle返回结果进行判断,如果调用失败,则进入步骤S27;否则,进入步骤S23;

步骤S23:根据DetourObReferenceObjectByHandle的第一个参数ObjectType判断将要进行的例程是不是进程类型?如果是,进入步骤S24;否则进入步骤S27;

步骤S24:根据DetourObReferenceObjectByHandle的第二个参数ACESS_MASK来判断将要进行的是进程创建还是进程销毁,如果是进程销毁,进入步骤S25;否则,进入步骤S27;

步骤S25:判断要进行进程销毁的进程是不是在白名单中?如果在,则进入步骤S26,否则,进入步骤S27;

步骤S26:返回状态STATUS_INVALID_HANDLE,表示注销进程失败;

步骤S27:调用ObReferenceObjectByHandle返回的状态。

2.根据权利要求1所述的方法,其特征在于,在所述步骤S1之前进一步包括:将ObReferenceObjectByHandle的前五个字节记录到一个全局变量的步骤。

3.根据权利要求1所述的方法,其特征在于,在所述步骤S1之前进一步包括:使中断请求级别IRQL提升到延迟过程调用DPC级的步骤。

4.根据权利要求1所述的方法,其特征在于,在所述步骤S25之前进一步包括根据DetourObReferenceObjectByHandle的句柄得到该进程的路径的步骤,则所述步骤S25具体包括:根据要进行进程销毁的进程的路径判断所述进程是不是在白名单中?如果在,则进入步骤S26,否则,进入步骤S27。

5.根据权利要求1-4中任一项所述的方法,其特征在于,所述跳转的大小为DetourObReferenceObjectByHandle-ObReferenceObjectByHandle-5。

6.根据权利要求1-4中任一项所述的方法,其特征在于,所述第一个字节的值为0XE9。

说明书 :

实现进程防杀的方法

技术领域

[0001] 本发明涉及进程监控技术领域,尤其涉及一种实现进程防杀的方法。

背景技术

[0002] 进程防杀就是保护用户的进程不被非法杀死,如果用户的进程被意外终止,可能造成计算机系统运行不稳定,尤其是计算机被病毒等恶意程序侵害的时候,一些关键的进程被杀,可能给用户带来非常大的经济损失。系统中重要的进程也需要有自我保护能力,这样就可以避免出现进程被杀而用户毫不知情的情况。
[0003] 目前,黑客一般通过任务管理器或黑客软件关闭进程来达到破坏系统以及窃取系统资料的目的。例如,当黑客要危害一个系统的时候,它会登陆,然后查看有没有一些已知的进程在监视它。如果有,它就会杀死监控它的进程。如果这个功能进程被杀死了,黑客就可以为所欲为了,但如果黑客杀不掉这个功能进程,则可以记录黑客在这个系统上做的任何事情,有利于抓获黑客。目前基于Windows系统的进程防杀技术中一般使用hook NtOpenProcess和NtTerminateProcess等实现进程保护,但以上的方法可能被很多邪恶的方法(比如清0、PspTerminateProcess、PspExitThread等等)绕过。
[0004] 因此,业界亟需一种不能被轻易绕过的进程防杀方法。

发明内容

[0005] (一)要解决的技术问题
[0006] 本发明要解决的技术问题是,针对上述缺陷,如何提供一种不能被轻易绕过的进程防杀方法,其能够更好地保护进程不被非法关闭。
[0007] (二)技术方案
[0008] 为解决上述技术问题,本发明提供了一种实现进程防杀的方法,所述方法包括步骤:
[0009] S1:申请一个五字节的全局数组,第一个字节代表跳转JMP指令,后四个字节代表跳转的大小,用所述五字节的全局数组替换ObReferenceObjectByHandle的前五个字节;
[0010] S2:根据DetourObReferenceObjectByHandle实现进程防杀。
[0011] 优选地,在所述步骤S1之前进一步包括:将ObReferenceObjectByHandle的前五个字节记录到一个全局变量的步骤。
[0012] 优选地,在所述步骤S1之前进一步包括:使中断请求级别IRQL提升到延迟过程调用DPC级的步骤。
[0013] 优选地,所述步骤S2具体包括:
[0014] 步骤S21:在DetourObReferenceObjectByHandle中调用原始的前五个字节已被替换的ObReferenceObjectByHandle并跳转到所述ObReferenceObjectByHandle的后五个字节;
[0015] 步骤S22:根据ObReferenceObjectByHandle返回结果进行判断,如果调用失败,则进入步骤S27;否则,进入步骤S23;
[0016] 步骤S23:根据DetourObReferenceObjectByHandle的第一个参数ObjectType判断将要进行的例程是不是进程类型?如果是,进入步骤S24;否则进入步骤S27;
[0017] 步骤S24:根据DetourObReferenceObjectByHandle的第二个参数ACESS_MASK来判断将要进行的是进程创建还是进程销毁,如果是进程销毁,进入步骤S25;否则,进入步骤S27;
[0018] 步骤S25:判断要进行进程销毁的进程是不是在白名单中?如果在,则进入步骤S26,否则,进入步骤S27;
[0019] 步骤S26:返回状态STATUS_INVALID_HANDLE,表示注销进程失败;
[0020] 步骤S27:调用ObReferenceObjectByHandle返回的状态。
[0021] 优选地,在所述步骤S25之前进一步包括根据DetourObReferenceObjectByHandle的句柄得到该进程的路径的步骤,则所述步骤S25具体包括:
[0022] 根据要进行进程销毁的进程的路径判断所述进程是不是在白名单中?如果在,则进入步骤S26,否则,进入步骤S27。
[0023] 优选地,所述跳转的大小为DetourObReferenceObjectByHandle-ObReferenceObjectByHandle-5。
[0024] 优选地,所述第一个字节的值为0XE9。
[0025] (三)有益效果
[0026] 本发明提出了一种实现进程防杀的方法,由于ObReferenceObjectByHandle相对于比较底层,所以任何非法的进程关闭和正常的进程关闭时都会调用ObReferenceObjectByHandle把句柄转化为File_Object,然后把进程关闭。所以我们可以HOOKObReferenceObjectByHandle拦截将要关闭的进程,然后判断是否为正常的关闭进程,其不会被轻易的绕过,能够很好地保护进程不被非法关闭。

附图说明

[0027] 图1是本发明实施例所述实现进程防杀的方法流程图;
[0028] 图2是本发明实施例所述的实现进程防杀的方法中步骤S2的流程图。

具体实施方式

[0029] 下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
[0030] 图1是本发明实施例所述实现进程防杀的方法流程图;如图1所述,所述实现进程防杀的方法包括步骤:
[0031] S1:申请一个五字节的全局数组,第一个字节代表跳转(JMP)指令,例如为0XE9,后四个字节代表跳转的大小,所述跳转的大小为DetourObReferenceObjectByHandle-ObReferenceObjectByHandle-5;用所述五字节的全局数组替换ObReferenceObjectByHandle的前五个字节;
[0032] 在本步 骤中,这 样只要 运行到ObReferenceObjectByHandle 则跳转 到DetourObReferenceObjectByHandle,即我们的中继功能函数。
[0033] 在本步骤之前进一步包括将ObReferenceObjectByHandle的前五个字节记录到一个全局变量的步骤,为了卸载时候进行反HOOK,恢复原始内容。
[0034] 在本步骤之前还可以进一步包括,使IRQL(Interrupt ReQuest Level,中断请求级别)提升到DPC(Deferred Procedure Call,延迟过程调用)级的步骤,防止被其他历程打断;
[0035] S2:根据DetourObReferenceObjectByHandle实现进程防杀;
[0036] 图2是本发明实施例所述的实现进程防杀的方法中步骤S2的流程图;如图2所述,步骤S2具体包括:
[0037] 步骤S21:在DetourObReferenceObjectByHandle中调用原始的前五个字节已被替换的ObReferenceObjectByHandle并跳转到所述ObReferenceObjectByHandle的后五个字节;
[0038] 步骤S22:根据ObReferenceObjectByHandle返回结果进行判断,如果调用失败,则进入步骤S27;否则,进入步骤S23;
[0039] 步骤S23:根据DetourObReferenceObjectByHandle的第一个参数ObjectType判断将要进行的例程是不是进程类型?如果是,进入步骤S24;否则进入步骤S27;
[0040] 步骤S24:根据DetourObReferenceObjectByHandle的第二个参数ACESS_MASK来判断将要进行的是进程创建还是进程销毁,因为本发明关心的是进程防杀,所以我们关注的是进程销毁,也就是说第二个参数是1的时候,进入步骤S25;否则,进入步骤S27;
[0041] 步骤S25:判断要进行进程销毁的进程是不是在白名单(要求进程防杀的文件列表)中?如果在,则进入步骤S26,否则,进入步骤S27;
[0042] 在本步骤之前还可以包括根据DetourObReferenceObjectByHandle的句柄得到该进程的路径的步骤,则本步骤具体包括:根据要进行进程销毁的进程的路径判断该进程是不是在白名单中?如果在,则进入步骤S26,否则,进入步骤S27;
[0043] 步骤S26:返回状态STATUS_INVALID_HANDLE,表示注销进程失败;
[0044] 步骤S27:调用ObReferenceObjectByHandle返回的状态。
[0045] 综上所述,本发明公开了一种Windows系统中的实现进程防杀的方法,根据本发明所采用的方法,利用ObReferenceObjectByHandle来做进程防杀是因为它比较底层,任何程序的正常关闭和非法关闭都要先通过句柄(handle)转化为FILE_OBJECT,而这个转化就是通过ObReferenceObjectByHandle来完成的,所以挂钩这个ObReferenceObjectByHandle我们就可以监控所有的进程关闭的操作了。挂钩这个API的好处比其他的API比如HookZwSetInformationFile以及hook NtOpenProcess和NtTerminateProcess要安全的多,比如说在一些非法的进程关闭时,ZwSetInformationFile是无法检测到,甚至很多黑客软件可以绕过NtOpenProcess,但是无法绕过ObReferenceObjectByHandle。而且本发明所述方法也没有hookNtOpenProcess和NtTerminateProcess方法那样繁琐,整个过程只是HOOK了一个API,流程清晰易懂。本发明使用的ObReferenceObjectByHandle可以得到我们需要的信息,比如进程的句柄,然后通过句柄可以得到进程ID,进而得到进程路径等信息。而不用做太多额外的工作。
[0046] 以上实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。