实现进程防杀的方法

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

发明内容
(一)要解决的技术问题本发明要解决的技术问题是,针对上述缺陷,如何提供一种不能被轻易绕过的进程防杀方法,其能够更好地保护进程不被非法关闭。( 二 )技术方案为解决上述技术问题,本发明提供了一种实现进程防杀的方法,所述方法包括步骤Sl 申请一个五字节的全局数组,第一个字节代表跳转JMP指令,后四个字节代表跳转的大小,用所述五字节的全局数组替换ObReferenceObjectByHandle的前五个字节;S2 根据 DetourObReferenceObjectByHandle 实现进程防杀。优选地,在所述步骤Sl之前进一步包括将ObReferenceObjectByHandle的前五个字节记录到一个全局变量的步骤。优选地,在所述步骤Sl之前进一步包括使中断请求级别IRQL提升到延迟过程调用DPC级的步骤。优选地,所述步骤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 返回的状态。优选地,在所述步骤S25之前进一步包括根据 DetourObReferenceObjectByHandle的句柄得到该进程的路径的步骤,则所述步骤S25具体包括根据要进行进程销毁的进程的路径判断所述进程是不是在白名单中?如果在,则进入步骤S26,否则,进入步骤S27。优选地,所述跳转的大小为 DetourObReferenceObjectByHandle-ObReferenceObj ectByHandle_50优选地,所述第一个字节的值为0XE9。(三)有益效果本发明提出了一种实现进程防杀的方法,由于ObReferenceObjectByHandle 相对于比较底层,所以任何非法的进程关闭和正常的进程关闭时都会调用 ObReferenceObjectByHandle把句柄转化为File_0bject,然后把进程关闭。所以我们可以 HOOKObReferenceObjectByHandle拦截将要关闭的进程,然后判断是否为正常的关闭进程, 其不会被轻易的绕过,能够很好地保护进程不被非法关闭。


图1是本发明实施例所述实现进程防杀的方法流程图;图2是本发明实施例所述的实现进程防杀的方法中步骤S2的流程图。
具体实施例方式下面结合附图和实施例,对本发明的具体实施方式
作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。图1是本发明实施例所述实现进程防杀的方法流程图;如图1所述,所述实现进程防杀的方法包括步骤Sl 申请一个五字节的全局数组,第一个字节代表跳转(JMP)指令,例如为0XE9, 后四个字节代表跳转的大小,所述跳转的大小为DetourObReferenceObjectByHandle-ObR eference0bjectByHandle-5 ;用所述五字节的全局数组替换 ObReferenceObjectByHandle 的前五个字节;在本步骤中,这样只要运行到ObReferenceObjectByHandle则跳转到DetourObReferenceObjectByHandle,即我们的中继功能函数。在本步骤之前进一步包括将ObReferenceObjectByHandle的前五个字节记录到一个全局变量的步骤,为了卸载时候进行反Η00Κ,恢复原始内容。在本步骤之前还可以进一步包括,使IRQLanterrupt ReQuest Level,中断请求级别)提升到DPC(Deferred Procedure Call,延迟过程调用)级的步骤,防止被其他历程打断;S2 根据 DetourObReferenceObjectByHandle 实现进程防杀;图2是本发明实施例所述的实现进程防杀的方法中步骤S2的流程图;如图2所述,步骤S2具体包括步骤S21 在DetourObReferenceObjectByHandle中调用原始的前五个字节已被替换的 ObReferenceObjectByHandle 并跳转到所述 ObReferenceObjectByHandle 的后五个字节;步骤S22 根据ObReferenceObjectByHandle返回结果进行判断,如果调用失败, 则进入步骤S27 ;否则,进入步骤S23 ;步骤S23 根据 DetourObReferenceObjectByHandle 的第一个参数 ObjectType 判断将要进行的例程是不是进程类型?如果是,进入步骤S24 ;否则进入步骤S27 ;步骤S24 根据 DetourObReferenceObjectByHandle 的第二个参数 ACESS_MASK 来判断将要进行的是进程创建还是进程销毁,因为本发明关心的是进程防杀,所以我们关注的是进程销毁,也就是说第二个参数是1的时候,进入步骤S25 ;否则,进入步骤S27 ;步骤S25 判断要进行进程销毁的进程是不是在白名单(要求进程防杀的文件列表)中?如果在,则进入步骤S26,否则,进入步骤S27 ;在本步骤之前还可以包括根据DetourObReferenceObjectByHandle的句柄得到该进程的路径的步骤,则本步骤具体包括根据要进行进程销毁的进程的路径判断该进程是不是在白名单中?如果在,则进入步骤S26,否则,进入步骤S27 ;步骤S26 返回状态STATUS_INVALID_HANDLE,表示注销进程失败;步骤S27 调用 ObReferenceObjectByHandle 返回的状态。综上所述,本发明公开了一种Windows系统中的实现进程防杀的方法,根据本发明所采用的方法,利用ObReferenceOb jectByHandle来做进程防杀是因为它比较底层,任何程序的正常关闭和非法关闭都要先通过句柄(handle)转化为FILE_0BJECT,而这个转化就是通过 ObReferenceObjectByHandle 来完成的,所以挂钩这个 ObReferenceObjectByHandle 我们就可以监控所有的进程关闭的操作了。挂钩这个API的好处比其他的API比如 HookZwSetInformationFiIe 以及 hook NtOpenProcess 禾口 NtTerminateProcess 要安全的多,比如说在一些非法的进程关闭时,ZWetlnformationFile是无法检测到,甚至很多黑客软件可以绕过NtOpenProcess,但是无法绕过ObReferenceObjectByHandle。而且本发明所述方法也没有hookNtOpenProcess和NtTerminateProcess方法那样繁琐,整个过程只是Η00Κ 了一个API,流程清晰易懂。本发明使用的ObReferenceObjectByHandle可以得到我们需要的信息,比如进程的句柄,然后通过句柄可以得到进程ID,进而得到进程路径等信息。而不用做太多额外的工作。以上实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。
权利要求
1.一种实现进程防杀的方法,其特征在于,所述方法包括步骤51申请一个五字节的全局数组,第一个字节代表跳转JMP指令,后四个字节代表跳转的大小,用所述五字节的全局数组替换ObReferenceObjectByHandle的前五个字节;52根据 DetourObReferenceObjectByHandle 实现进程防杀。
2.根据权利要求1所述的方法,其特征在于,在所述步骤Sl之前进一步包括将 ObReferenceObjectByHandle的前五个字节记录到一个全局变量的步骤。
3.根据权利要求1所述的方法,其特征在于,在所述步骤Sl之前进一步包括使中断请求级别IRQL提升到延迟过程调用DPC级的步骤。
4.根据权利要求1所述的方法,其特征在于,所述步骤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 返回的状态。
5.根据权利要求4所述的方法,其特征在于,在所述步骤S25之前进一步包括根据 DetourObReferenceObjectByHandle的句柄得到该进程的路径的步骤,则所述步骤S25具体包括根据要进行进程销毁的进程的路径判断所述进程是不是在白名单中?如果在,则进入步骤S^,否则,进入步骤S27。
6.根据权利要求1-5中任一项所述的方法,其特征在于,所述跳转的大小为DetourObR eferenceObjectByHandle—ObReferenceObjectByHandle_50
7.根据权利要求1-5中任一项所述的方法,其特征在于,所述第一个字节的值为0XE9。
全文摘要
本发明公开了一种实现进程防杀的方法,涉及进程监控技术领域,所述方法包括步骤S1申请一个五字节的全局数组,第一个字节代表跳转JMP指令,后四个字节代表跳转的大小,用所述五字节的全局数组替换ObReferenceObjectByHandle的前五个字节;S2根据DetourObReferenceObjectByHandle实现进程防杀。应用本发明所述的方法,由于ObReferenceObjectByHandle相对于比较底层,所以任何非法的进程关闭和正常的进程关闭时都会调用ObReferenceObjectByHandle把句柄转化为File_Object,然后把进程关闭。所以我们可以HOOK ObReferenceObjectByHandle拦截将要关闭的进程,然后判断是否为正常的关闭进程,其不会被轻易的绕过,能够很好地保护进程不被非法关闭。
文档编号G06F21/00GK102156834SQ20111009665
公开日2011年8月17日 申请日期2011年4月18日 优先权日2011年4月18日
发明者万雪松, 于晓军, 赵辰清 申请人:北京思创银联科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1