一种用于枚举系统进程的方法及装置制造方法及图纸

技术编号:8366880 阅读:157 留言:0更新日期:2013-02-28 05:48
本发明专利技术公开了一种用于枚举系统进程的方法,包括:获取System进程的EPROCESS结构;以Mmsystem?range?start地址为起始点并以EPROCESS的长度作为步长遍历Mmsystem?range?start至System进程的EPROCESS结构之间的内存空间,获取每一步长对应的内存地址段中的内容;所述每一内存地址段中,对于起始地址为有效地址的内存地址段,判断其中的内容是否为合法的进程;若是,则记录该进程;若否,则忽略该内存地址段;集合所获得的所有合法进程,形成系统进程集合。本发明专利技术还公开一种用于枚举系统进程的装置。本发明专利技术能够枚举出系统所有进程;有利于减少一些恶意的隐藏进程对系统的威胁。

【技术实现步骤摘要】
一种用于枚举系统进程的方法及装置
本专利技术涉及计算机
,特别是涉及一种用于枚举系统进程的方法。本专利技术还涉及一种用于枚举系统进程的装置。
技术介绍
Windows任务管理器可以枚举出系统当前的进程,并能够根据需要选择终止进程。为管理系统进程提供了很大的便利。Windows任务管理器枚举系统当前进程是通过其NativeAPI函数ZwQuerySystemInfomation来操作进程活动链表来实现的。具体的过程如下:首先,获取当前任一进程的指针,例如可以通过PsGetCurrentProcess()来获取当前进程的PEPROCESS指针。然后定位到记录该当前进程与其它进程链接信息的Activelist处,具体的操作方式为ActiveList=pCurrentEprocess+0x88,即当前进程指针移动一定的步长。其中0x88为winxpsp3下Activelist与pCurrentEprocess的步长,在不同win操作系统时该步长并不相同。接着,以所定位的当前进程的Activelist遍历整个进程活动链表(Activelistlink)上每一进程的数据结构,即可获得当前的存在于进程活动链表的所有进程。如上所述,因为windows任务管理器是基于ZwQuerySystemInformation来实现的,所以如果将进程对象从进程活动链表中移除,那么调用NtQuerySystemInfomation来枚举进程的任务管理器TaskMgr.exe中就不会看到目标进程了。同时,Windows的任务调度分配器使用的另一的数据结构,也就是说,进程是否被调度执行与进程活动链表无关,不会因为从进程活动链表删除就被CPU忽略,因此进程仍然会被执行。这很容易被一些恶意软件或者RootKit程序利用,在进程活动链表上不显示其存在,但是仍然被执行,这可能导致用户的计算机在不知不觉中被感染病毒、植入木马或者窃取了信息,对计算机造成潜在的或现实的威胁。因而有必要能够查找出这种被进程活动链表忽略而实质上又在被执行的隐藏进程。
技术实现思路
鉴于上述问题,提出了本专利技术以便提供一种克服上述问题或者至少部分地解决上述问题的用于枚举系统进程的方法和相应的用于枚举系统进程的装置。依据本专利技术的一个方面,提供一种用于枚举系统进程的方法,包括:获取System进程的EPROCESS结构;以Mmsystemrangestart地址为起始点并以所述EPROCESS的长度作为步长遍历Mmsystemrangestart地址至所述System进程的EPROCESS结构之间的内存空间,获取每一步长对应的内存地址段中的内容;所述每一步长对应的内存地址段中,对于起始地址为有效地址的内存地址段,判断该内存地址段中的内容是否为合法的进程;若是,则记录该进程;若否,则忽略该内存地址段;集合所获得的所有合法进程,形成系统进程集合。可选的,所述获取System进程EPROCESS结构包括:在驱动加载的入口函数中调用函数PsGetCurrentProcess()获得System进程的EPROCESS结构。可选的,所述判断该内存地址段中的内容是否为进程包括:将内存地址段中的内容赋值给EPROCESS结构;判断被赋值的EPROCESS结构的成员变量ExitTime的值是否为零;判断被赋值的EPROCESS结构的成员变量_bject_type的类型值是否为process;若上述两个成员变量均为是,则内存地址段中的内容为合法的进程,否则为不合法进程。可选的,所述判断被赋值的EPROCESS结构的成员变量ExitTime的值是否为零包括:由被赋值的EPROCESS结构首地址偏移0x78,获得成员变量ExitTime;提取所述成员变量ExitTime的值;判断所述成员变量ExitTime的值是否等于零。可选的,所述判断被赋值的EPROCESS结构的成员变量_bject_type的类型值是否为Process包括:由被赋值的EPROCESS结构首地址偏移0x8,获得成员变量_bject_type;由所述成员变量_bject_type的首地址偏移0x40,获得成员type;提取所述成员type的值;判断所述成员type的值是否等于process。可选的,所述判断该内存地址段中的内容是否为合法的进程包括:获取当前进程的EPROCESS;获取该当前进程的EPROCESS的进程环境块地址;若所述进程环境块地址为零,则返回到所述获取当前进程的EPROCESS的步骤,或者通过遍历私有句柄表链或活动进程表链获得其它任一进程,获取该任一进程的EPROCESS的进程环境块地址并判断该地址是否为零;若非零,则提取所述进程环境块地址高四位的值作为参考值;获取所述内存地址段中由起始地址偏移1B0处的内容的高四位,作为待检值;判断所述待检值是否与参考值相同;若相同,则内存地址中的内容为合法的进程,否则为不合法进程。可选的,所述获取当前进程包括:通过PsGetCurrentProcess()获得当前的进程的EPROCESS。可选的,所述获取该当前进程的EPROCESS的进程环境块地址包括:由该当前进程的EPROCESS首地址偏移1B0获取其进程环境块成员变量;提取所述进程环境块成员变量的值。可选的,所述每一步长对应的内存地址中,对于起始地址为有效地址的内存地址段,判断该内存地址段中的内容是否为合法的进程包括:通过MmIsAddressInPageValid()函数验证该地址的有效性。可选的,还包括:将获取的进程集合与Windows任务管理器的进程表比对;找出不同于Windows任务管理器的进程表中的进程;以所述找出的进程作为内容向用户发送或者向用户发送提示消息或报警。根据本专利技术的另一方面,还提供一种用于枚举系统进程的装置,包括:System进程获取单元,用于获取System进程的EPROCESS结构;遍历单元,用于以Mmsystemrangestart地址为起始点并以所述EPROCESS的长度作为步长遍历Mmsystemrangestart地址至所述System进程的EPROCESS结构之间的内存空间,获取每一步长对应的内存地址段中的内容;判断单元,用于所述每一步长对应的内存地址段中,对于起始地址为有效地址的内存地址段,判断该内存地址段中的内容是否为合法的进程;若是,则记录该进程;若否,则忽略该内存地址段;集合单元,用于集合所获得的所有合法进程,形成系统进程集合。可选的,所述判断单元,包括:赋值单元,用于将内存地址段中的内容赋值给Eprocess结构;第一判断单元,用于判断被赋值的EPROCESS结构的成员变量ExitTime的值是否为零;第二判断单元,用于判断被赋值的EPROCESS结构的成员变量_bject_type的类型值是否为process。可选的,所述第一判断单元包括:第一偏移单元,用于由被赋值的EPROCESS结构首地址偏移0x78,获得成员变量ExitTime;第一提取单元,用于提取所述成员变量ExitTime的值;第一执行单元,用于判断所述成员变量ExitTime的值是否等于零。可选的,所述第二判断单元包括:第二偏移单元,用于由被赋值的EPROCESS结构首地址偏移0x8,获得成员变量_b本文档来自技高网
...
一种用于枚举系统进程的方法及装置

【技术保护点】
一种用于枚举系统进程的方法,其特征在于,包括:获取System进程的EPROCESS结构;以Mmsystem?range?start地址为起始点并以所述EPROCESS的长度作为步长遍历Mmsystem?range?start地址至所述System进程的EPROCESS结构之间的内存空间,获取每一步长对应的内存地址段中的内容;所述每一步长对应的内存地址段中,对于起始地址为有效地址的内存地址段,判断该内存地址段中的内容是否为合法的进程;若是,则记录该进程;若否,则忽略该内存地址段;集合所获得的所有合法进程,形成系统进程集合。

【技术特征摘要】
1.一种用于枚举系统进程的方法,其特征在于,包括:获取System进程的EPROCESS结构;以Mmsystemrangestart地址为起始点并以所述EPROCESS的长度作为步长遍历Mmsystemrangestart地址至所述System进程的EPROCESS结构之间的内存空间,获取每一步长对应的内存地址段中的内容;所述每一步长对应的内存地址段中,对于起始地址为有效地址的内存地址段,判断该内存地址段中的内容是否为进程;若是,则判断该内存地址段中的内容是否为合法的进程;若是,则记录该进程;若否,则忽略该内存地址段;集合所获得的所有合法进程,形成系统进程集合;其中,所述方法还包括:将获取的进程集合与Windows任务管理器的进程表比对;找出不同于Windows任务管理器的进程表中的进程;以所述找出的进程作为内容向用户发送或者向用户发送提示消息或报警;其中,所述判断该内存地址段中的内容是否为进程包括:将内存地址段中的内容赋值给EPROCESS结构;判断被赋值的EPROCESS结构的成员变量ExitTime的值是否为零;判断被赋值的EPROCESS结构的成员变量_bject_type的类型值是否为process;若上述两个成员变量均为是,则内存地址段中的内容为进程,否则不为进程。2.根据权利要求1所述的用于枚举系统进程的方法,其特征在于,所述获取System进程EPROCESS结构包括:在驱动加载的入口函数中调用函数PsGetCurrentProcess()获得System进程的EPROCESS结构。3.根据权利要求2所述的用于枚举系统进程的方法,其特征在于,所述判断被赋值的EPROCESS结构的成员变量ExitTime的值是否为零包括:由被赋值的EPROCESS结构首地址偏移0x78,获得成员变量ExitTime;提取所述成员变量ExitTime的值;判断所述成员变量ExitTime的值是否等于零。4.根据权利要求2所述的用于枚举系统进程的方法,其特征在于,所述判断被赋值的EPROCESS结构的成员变量_bject_type的类型值是否为process包括:由被赋值的EPROCESS结构首地址偏移0x8,获得成员变量_bject_type;由所述成员变量_bject_type的首地址偏移0x40,获得成员type;提取所述成员type的值;判断所述成员type的值是否等于process。5.根据权利要求2至4任一所述的用于枚举系统进程的方法,其特征在于,所述判断该内存地址段中的内容是否为合法的进程包括:获取当前进程的EPROCESS;获取该当前进程的EPROCESS的进程环境块地址;若所述进程环境块地址为零,则返回到所述获取当前进程的EPROCESS的步骤,或者通过遍历私有句柄表链或活动进程表链获得其它任一进程,获取该任一进程的EPROCESS的进程环境块地址并判断该地址是否为零;若非零,则提取所述进程环境块地址高四位的值作为参考值;获取所述内存地址段中由起始地址偏移1B0处的内容的高四位,作为待检值;判断所述待检值是否与参考值相同;若相同,则内存地址段中的内容为合法的进程,否则为不合法进程。6.根据权利要求5所述的用于枚举系统进程的方法,其特征在于,所述获取当前进程的EPROCESS包括:通过PsGetCurrentProcess()获得当前的进程的EPROCESS。7.根据权利要求5所述的用于枚举系统进程的方法,其特征在于,所述获取该当前进程的EPROCESS的进程环境块地址包括:由该当前进程的EPROCESS首地址偏移1B0获取其进程环境块成员变量;提取所述进程环境块成员变量的值。8...

【专利技术属性】
技术研发人员:张辉
申请(专利权)人:北京奇虎科技有限公司奇智软件北京有限公司
类型:发明
国别省市:

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

1