进程监控方法技术

技术编号:6145165 阅读:273 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种进程监控方法,涉及进程监控技术领域,所述进程监控方法包括步骤:S1:获取NtCreateSection的API地址,用DetourNtCreateSection替换原来的NtCreateSection;S2:根据DetourNtCreateSection对要创建的进程进行监控。应用本发明专利技术的方法可以在进程创建过程中拦截正在创建的进程,而不是在进程创建之后,使得系统更加安全。由于挂钩的地方是进程创建的必经之路,所以不会被木马、病毒等轻易绕过,可以达到安全的效果。而且本发明专利技术所述方法也没有HOOK?ObReferenceObjectByHandle方法那样繁琐,整个过程只是HOOK了一个API,流程清晰易懂。本发明专利技术使用的NtCreateSection处于系统中相对比较高的内核层次位置,其只拦截正在创建的进程,不会对系统中的其他已经运行的合法进程造成影响。

【技术实现步骤摘要】

本专利技术涉及进程监控
,尤其涉及一种。
技术介绍
目前进程监控的一般做法都是通过注册系统的回调函数,当系统检测到有进程被 创建的时候,就会调用已经注册好的回调函数。这时就可以根据回调函数中的参数得到进 程ID,甚至进程名称和进程路径等信息。但是这种方法的缺陷是当我们得到这个进程的信息时候,这个进程已经创建 成功,如果是病毒进程或木马进程的话,已经开始危害我们的软件、系统或电脑。假如 我们要销毁这个进程还要在利用一些微软公司提供的API (Application Programming hterface,应用程序编程接口)。实现起来比较麻烦,且不容易操作。针对上述问题,提出了另一个的方法是HOOKObReferenceObjectByHandle 来实现进程的监控,同样可以达到进程监控的目的。与上一种方法相比,Η00Κ ObReferenceObjectByHandle的方法,在拦截到进程创建的时候,进程并没有创建成功。所 以不必担心这个非法运行的进程对我们的软件、系统或电脑造成危害。但是,因为ObReferenceObjectByHandle这个API是系统底层的函数,所以在进行 HOOK ObReferenceObjectByHandle的时候,一些在系统内核的无关进程也一起被拦截了, 给系统造成了损害,而且HOOK ObReferenceObjectByHandle的方法实现起来也是繁琐,不 利于推广应用。
技术实现思路
(一)要解决的技术问题本专利技术要解决的技术问题是,针对上述缺陷,如何提供一种,其能够 拦截正在创建的进程,大大降低了创建的非法进程对系统造成危害的可能,并且只拦截正 在创建的进程,不会对系统中的其他已经运行的合法进程造成影响。( 二 )技术方案为解决上述技术问题,本专利技术提供了一种,所述包括 步骤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 利用 ObReferenceObject API得到将要创建的进程的文件对象FileObject ;步骤S22 判断文件对象是否为空?如果文件对象为空,则进入步骤S27,否则,进 入步骤S23 ;步骤S23 通过 IoQueryFileDosDeviceName API 根据 FileObject 得到正在创建 进程的文件名;步骤S24 根据所述文件名判断所述正在创建进程的文件是不是.exe文件?如果 是,进入步骤S25,否则,进入步骤S27 ;步骤S25 判断该正在创建进程的文件是不是在白名单中?如果是,进入步骤 S27,否则,进入步骤S26 ;步骤S26 调用ObDereferenceObjectAPI对这个文件对象的计数减1并返回 STATUS_ACCESS_DENIED表示这个进程创建失败;步骤S27 调用原始的 NtCreateSecion。优选地,在所述步骤S25之前进一步包括根据文件句柄得到文件路径的步骤;则 步骤S25具体包括根据文件名和文件路径判断该正在创建进程的文件是不是在白名单 中?如果是,进入步骤S27,否则,进入步骤S26。(三)有益效果本专利技术提出了一种windows系统中的进程监控的方法,其可以在进程创建过程中 拦截这个正在创建的进程,而不是在进程创建之后,使得系统更加安全。由于挂钩的地方是 进程创建的必经之路,所以不会被木马、病毒等轻易绕过,可以达到安全的效果。而且本发 明所述方法也没有HOOK ObReferenceObjectByHandle方法那样繁琐,整个过程只是HOOK 了一个API,流程清晰易懂。本专利技术使用的NtCreat必ection处于系统中相对比较高的内核 层次位置,其只拦截正在创建的进程,不会对系统中的其他已经运行的合法进程造成影响。附图说明图1是本专利技术实施例所述的的流程图;图2是本专利技术实施例所述的中步骤Sl的流程图;图3是本专利技术实施例所述的中步骤S2的流程图。具体实施例方式下面结合附图和实施例,对本专利技术的具体实施方式作进一步详细描述。以下实施 例用于说明本专利技术,但不用来限制本专利技术的范围。现有windows系统中进程创建方法包括以下步骤1 打开可执行文件;在本步骤中,需要获取FILE_EXE⑶TE访问权限;2 加载可执行映像(Executable image)到内存中;3 建立进程执行对象(Process Executive Object);在本步骤中,所述进程执行对象包括EPROCESS,KPR0CESS和PEB结构。4 为新创建的进程分配地址空间;5 建立进程的主线程的线程执行对象(Thread ExecutiveObject); 在本步骤中,所述线程执行对象包括ETHREAD,KTHREAD和TEB结构;6 建立主线程的堆栈;7 建立主线程的执行上下文(Execution context);8 通知Win32子系统新进程信息。上述步骤中任何一步的成功执行都要求其之前的所有步骤都必须成功完成。因 此,如果我们决定终止上述步骤中的任何一步,接下来的操作也同样会失败,这样进程创建 就会被终止。所有这些步骤都要调用对应的原生(Iiative)API函数。本专利技术所述的只考虑用户模式下创建Windows系统进程比如 CreateProcess以及手动创建进程等等,由于内核创建进程之前的驱动加载需要在内核高 层,比如应用层运行。因此可以从应用层得到正在创建的进程。图1是本专利技术实施例所述的的流程图;如图1所述,所述进程监控方 法包括步骤Sl :NtCreateSection 的 API jfttlt, ffi DetourNtCreateSection NtCreateSection ;图2是本专利技术实施例所述的中步骤Sl的流程图;如图2所述,步骤 Sl具体包括步骤Sll 获取 NtCreatekction 的服务 ID 号;在本步骤中,可以使用一些通用的辅助工具,例如Kernel Detective或冰刃等工 具实时看到 NtCreateSection 在 Windows 系统中的 SSDT (System Services Descriptor Table,系统服务描述符表)的服务ID号例如OXM ;步骤S12 根据所获取的NtCreatekction的服务ID号计算得到所述 NtCrea本文档来自技高网...

【技术保护点】
1.一种进程监控方法,其特征在于,所述进程监控方法包括步骤:S1:获取NtCreateSection的API地址,用DetourNtCreateSection替换原来的NtCreateSection;S2:根据DetourNtCreateSection对要创建的进程进行监控。

【技术特征摘要】

【专利技术属性】
技术研发人员:于晓军万雪松赵辰清
申请(专利权)人:北京思创银联科技股份有限公司
类型:发明
国别省市:11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1