进程监控方法

文档序号:6358204阅读:416来源:国知局

专利名称::进程监控方法
技术领域
:本发明涉及进程监控
技术领域
,尤其涉及一种进程监控方法。
背景技术
:目前进程监控的一般做法都是通过注册系统的回调函数,当系统检测到有进程被创建的时候,就会调用已经注册好的回调函数。这时就可以根据回调函数中的参数得到进程ID,甚至进程名称和进程路径等信息。但是这种方法的缺陷是当我们得到这个进程的信息时候,这个进程已经创建成功,如果是病毒进程或木马进程的话,已经开始危害我们的软件、系统或电脑。假如我们要销毁这个进程还要在利用一些微软公司提供的API(ApplicationProgramminghterface,应用程序编程接口)。实现起来比较麻烦,且不容易操作。针对上述问题,提出了另一个的方法是HOOKObReferenceObjectByHandle来实现进程的监控,同样可以达到进程监控的目的。与上一种方法相比,Η00ΚObReferenceObjectByHandle的方法,在拦截到进程创建的时候,进程并没有创建成功。所以不必担心这个非法运行的进程对我们的软件、系统或电脑造成危害。但是,因为ObReferenceObjectByHandle这个API是系统底层的函数,所以在进行HOOKObReferenceObjectByHandle的时候,一些在系统内核的无关进程也一起被拦截了,给系统造成了损害,而且HOOKObReferenceObjectByHandle的方法实现起来也是繁琐,不利于推广应用。
发明内容(一)要解决的技术问题本发明要解决的技术问题是,针对上述缺陷,如何提供一种进程监控方法,其能够拦截正在创建的进程,大大降低了创建的非法进程对系统造成危害的可能,并且只拦截正在创建的进程,不会对系统中的其他已经运行的合法进程造成影响。(二)技术方案为解决上述技术问题,本发明提供了一种进程监控方法,所述进程监控方法包括步骤Sl获取NtCreateSection的API地址,用DetourNtCreateSection替换原来的NtCreateSection;S2根据DetourNtCreatekction对要创建的进程进行监控。优选地,所述步骤Sl具体包括步骤Sll获取NtCreateSection的服务ID号;步骤S12根据所获取的NtCreatekction的服务ID号计算得到所述NtCreateSection的API地址;步骤S13用DetourNtCreateSection替换原来的NtCreateSection。优选地,在步骤S12之后还进一步包括把源API地址记录到一个全局变量的步骤。优选地,在步骤S13之前还进一步包括使中断请求级别IRQL提升到延迟过程调用DPC级的步骤。优选地,所述步骤S2具体包括步骤S21根据DetourNtCreatekction中的最后一个参数FileHandle利用ObReferenceObjectAPI得到将要创建的进程的文件对象FileObject;步骤S22判断文件对象是否为空?如果文件对象为空,则进入步骤S27,否则,进入步骤S23;步骤S23通过IoQueryFileDosDeviceNameAPI根据FileObject得到正在创建进程的文件名;步骤S24根据所述文件名判断所述正在创建进程的文件是不是.exe文件?如果是,进入步骤S25,否则,进入步骤S27;步骤S25判断该正在创建进程的文件是不是在白名单中?如果是,进入步骤S27,否则,进入步骤S26;步骤S26调用ObDereferenceObjectAPI对这个文件对象的计数减1并返回STATUS_ACCESS_DENIED表示这个进程创建失败;步骤S27调用原始的NtCreateSecion。优选地,在所述步骤S25之前进一步包括根据文件句柄得到文件路径的步骤;则步骤S25具体包括根据文件名和文件路径判断该正在创建进程的文件是不是在白名单中?如果是,进入步骤S27,否则,进入步骤S26。(三)有益效果本发明提出了一种windows系统中的进程监控的方法,其可以在进程创建过程中拦截这个正在创建的进程,而不是在进程创建之后,使得系统更加安全。由于挂钩的地方是进程创建的必经之路,所以不会被木马、病毒等轻易绕过,可以达到安全的效果。而且本发明所述方法也没有HOOKObReferenceObjectByHandle方法那样繁琐,整个过程只是HOOK了一个API,流程清晰易懂。本发明使用的NtCreat必ection处于系统中相对比较高的内核层次位置,其只拦截正在创建的进程,不会对系统中的其他已经运行的合法进程造成影响。图1是本发明实施例所述的进程监控方法的流程图;图2是本发明实施例所述的进程监控方法中步骤Sl的流程图;图3是本发明实施例所述的进程监控方法中步骤S2的流程图。具体实施例方式下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。现有windows系统中进程创建方法包括以下步骤1打开可执行文件;在本步骤中,需要获取FILE_EXE⑶TE访问权限;2加载可执行映像(Executableimage)到内存中;3建立进程执行对象(ProcessExecutiveObject);在本步骤中,所述进程执行对象包括EPROCESS,KPR0CESS和PEB结构。4为新创建的进程分配地址空间;5建立进程的主线程的线程执行对象(ThreadExecutiveObject);在本步骤中,所述线程执行对象包括ETHREAD,KTHREAD和TEB结构;6建立主线程的堆栈;7建立主线程的执行上下文(Executioncontext);8通知Win32子系统新进程信息。上述步骤中任何一步的成功执行都要求其之前的所有步骤都必须成功完成。因此,如果我们决定终止上述步骤中的任何一步,接下来的操作也同样会失败,这样进程创建就会被终止。所有这些步骤都要调用对应的原生(Iiative)API函数。本发明所述的进程监控方法只考虑用户模式下创建Windows系统进程比如CreateProcess以及手动创建进程等等,由于内核创建进程之前的驱动加载需要在内核高层,比如应用层运行。因此可以从应用层得到正在创建的进程。图1是本发明实施例所述的进程监控方法的流程图;如图1所述,所述进程监控方法包括步骤Sl:NtCreateSection的APIjfttlt,ffiDetourNtCreateSectionNtCreateSection;图2是本发明实施例所述的进程监控方法中步骤Sl的流程图;如图2所述,步骤Sl具体包括步骤Sll获取NtCreatekction的服务ID号;在本步骤中,可以使用一些通用的辅助工具,例如KernelDetective或冰刃等工具实时看到NtCreateSection在Windows系统中的SSDT(SystemServicesDescriptorTable,系统服务描述符表)的服务ID号例如OXM;步骤S12根据所获取的NtCreatekction的服务ID号计算得到所述NtCreateSection的API地址;在本步骤中,使用SSDT的服务表首地址加上0)(54*4,得到NtCreatekction的API地址;在本步骤之后还可进一步包括把这个源API地址记录到一个全局变量的步骤,以便卸载的时候把源API地址替换回去;步骤S13用DetourNtCreateSection替换原来的NtCreateSection地址;在本步骤之前还可以进一步包括,使IRQLanterruptReQuestLevel,中断请求级别)提升到DPC(DeferredProcedureCall,延迟过程调用)级的步骤,防止被其他历程打断;然后用DetourNtCreateSection替换原来的NtCreateSection,实现Η00ΚNtCreateSection0S2根据DetourNtCreatekction对要创建的进程进行监控;图3是本发明实施例所述的进程监控方法中步骤S2的流程图;如图3所述,步骤S2具体包括步骤S21根据DetourNtCreatekction中的最后一个参数FileHandle利用ObReferenceObjectAPI可以得到将要创建的进程的文件对象(FileObject);步骤S22判断文件对象是否为空?如果文件对象为空,则进入步骤S27,否则,进入步骤S23;步骤S23通过IoQueryFileDosDeviceNameAPI根据FileObject得到正在创建进程的文件名;步骤S24根据所述文件名判断所述正在创建进程的文件是不是.exe文件?如果是,进入步骤S25,否则,进入步骤S27;步骤S25判断该正在创建进程的文件是不是在白名单(允许创建进程的文件列表)中?如果是,进入步骤S27,否则,进入步骤S26;在本步骤之前还可以包括根据文件句柄得到文件路径的步骤,则本步骤具体包括根据文件名和文件路径判断该正在创建进程的文件是不是在白名单中?如果是,进入步骤S27,否则,进入步骤S26;步骤S26调用ObDereferenceObjectAPI对这个文件对象的计数减1并返回STATUS_ACCESS_DENIED表示这个进程创建失败,实现对该进程的监控。在本步骤中,当所述文件对象的计数减到O的时候,这个文件对象会被释放。步骤S27调用原始的NtCreateSecion。综上所述,本发明公开了一种Windows系统中的进程监控方法,根据本发明所采用的方法,其可以在进程创建过程中拦截这个正在创建的进程,而不是在进程创建之后,使得系统更加安全。由于挂钩的地方是进程创建的必经之路,所以不会被木马、病毒等轻易绕过,可以达到安全的效果。而且本发明所述方法也没有HOOKObReferenceObjectByHandle方法那样繁琐,整个过程只是Η00Κ了一个API,流程清晰易懂。本发明使用的NtCreat必ection处于系统中相对比较高的内核层次位置,其只拦截正在创建的进程,不会对系统中的其他已经运行的合法进程造成影响。以上实施方式仅用于说明本发明,而并非对本发明的限制,有关
技术领域
的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。权利要求1.一种进程监控方法,其特征在于,所述进程监控方法包括步骤51获取NtCreatekction的API地址,用DetourNtCreatekction替换原来的NtCreateSection;52根据DetourNtCreatekction对要创建的进程进行监控。2.根据权利要求1所述的进程监控方法,其特征在于,所述步骤Sl具体包括步骤Sll获取NtCreateSection的服务ID号;步骤S12:根据所获取的NtCreatekction的服务ID号计算得到所述NtCreateSection的API地址;步骤S13用DetourNtCreateSection替换原来的NtCreateSection03.根据权利要求2所述的进程监控方法,其特征在于,在步骤S12之后还进一步包括把源API地址记录到一个全局变量的步骤。4.根据权利要求2所述的进程监控方法,其特征在于,在步骤S13之前还进一步包括使中断请求级别IRQL提升到延迟过程调用DPC级的步骤。5.根据权利要求1所述的进程监控方法,其特征在于,所述步骤S2具体包括步骤S21根据DetourNtCreatekction中的最后一个参数FileHandle利用ObReferenceObjectAPI得到将要创建的进程的文件对象FileObject;步骤S22判断文件对象是否为空?如果文件对象为空,则进入步骤S27,否则,进入步骤S23;步骤S23通过IoQueryFileDosDeviceNameAPI根据FileObject得到正在创建进程的文件名;步骤S24根据所述文件名判断所述正在创建进程的文件是不是.exe文件?如果是,进入步骤S25,否则,进入步骤S27;步骤S25判断该正在创建进程的文件是不是在白名单中?如果是,进入步骤S27,否则,进入步骤S26;步骤S26调用ObDereferenceObjectAPI对这个文件对象的计数减1并返回STATUS_ACCESS_DENIED表示这个进程创建失败;步骤S27调用原始的NtCreatekcion。6.根据权利要求5所述的进程监控方法,其特征在于,在所述步骤S25之前进一步包括根据文件句柄得到文件路径的步骤;则步骤S25具体包括根据文件名和文件路径判断该正在创建进程的文件是不是在白名单中?如果是,进入步骤S27,否则,进入步骤S26。全文摘要本发明公开了一种进程监控方法,涉及进程监控
技术领域
,所述进程监控方法包括步骤S1获取NtCreateSection的API地址,用DetourNtCreateSection替换原来的NtCreateSection;S2根据DetourNtCreateSection对要创建的进程进行监控。应用本发明的方法可以在进程创建过程中拦截正在创建的进程,而不是在进程创建之后,使得系统更加安全。由于挂钩的地方是进程创建的必经之路,所以不会被木马、病毒等轻易绕过,可以达到安全的效果。而且本发明所述方法也没有HOOKObReferenceObjectByHandle方法那样繁琐,整个过程只是HOOK了一个API,流程清晰易懂。本发明使用的NtCreateSection处于系统中相对比较高的内核层次位置,其只拦截正在创建的进程,不会对系统中的其他已经运行的合法进程造成影响。文档编号G06F21/22GK102147845SQ20111009665公开日2011年8月10日申请日期2011年4月18日优先权日2011年4月18日发明者万雪松,于晓军,赵辰清申请人:北京思创银联科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1