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

技术编号:8271300 阅读:195 留言:0更新日期:2013-01-31 03:29
本发明专利技术公开了一种用于枚举系统进程的方法,包括:获取微软客户端和服务端运行时子系统进程对象的数据结构;获取所述数据结构中的对象表指向的句柄表;遍历所述句柄表的所有句柄表项,获得每一句柄表项所指向的进程对象,进而获得每一进程对象所对应的进程;集合所获得的所有进程,形成系统进程集合。本发明专利技术还公开了一种用于枚举系统进程的装置。本发明专利技术能够枚举出系统所有进程,包括一些隐藏的进程;使得一些恶意软件或者Rootkit无处藏身,有利于减少一些恶意的隐藏进程对系统的威胁。

【技术实现步骤摘要】
本专利技术涉及计算机
,特别是涉及一种用于枚举系统进程的方法。本专利技术还涉及一种用于枚举系统进程的装置。
技术介绍
Windows任务管理器可以枚举出系统当前的进程,并能够根据需要选择终止进程。为管理系统进程提供了很大的便利。Windows任务管理器枚举系统当前进程是通过其Native API函数ZwQuerySystemInfomation来操作进程活动链表来实现的。具体的过程如下首先,获取当前任一进程的指针,例如可以通过PsGetCurrentProcessO来获取当前进程的PEPR0CESS指针。然后定位到记录该当前进程与其它进程链接信息的Activelist处,具体的操作方式为ActiveList = pCurrentEprocess+0x88,即当前进程指针移动一定的步长。其中0x88为winxp sp3下Activelist与pCurrentEprocess的步长,在不同win操作系统时该步长并不相同。接着,以所定位的当前进程的Activelist遍历整个进程活动链表(Activelistlink)上每一进程的数据结构,即可获得当前的存在于进程活动链表的所有进程。如上所述,因为windows任务管理器是基于ZwQuerySystemInformation来实现的,所以如果将进程对象从进程活动链表中移除,那么调用NtQuerySystemInfomation来枚举进程的任务管理器TaskMgr. exe中就不会看到目标进程了。同时,Windows的任务调度分配器使用的另一的数据结构,也就是说,进程是否被调度执行与进程活动链表无关,不会因为从进程活动链表删除就被CPU忽略,因此进程仍然会被执行。这很容易被一些恶意软件或者RootKit程序利用,在进程活动链表上不显示其存在,但是仍然被执行,这可能导致用户的计算机在不知不觉中被感染病毒、植入木马或者窃取了信息,对计算机造成潜在的或现实的威胁。因而有必要能够查找出这种被进程活动链表忽略而实质上又在被执行的隐藏进程。
技术实现思路
鉴于上述问题,提出了本专利技术以便提供一种克服上述问题或者至少部分地解决上述问题的用于枚举系统进程的方法和相应的用于枚举系统进程的装置。依据本专利技术的一个方面,提供了一种用于枚举系统进程的方法,包括获取微软客户端和服务端运行时子系统进程对象的数据结构;获取所述数据结构中的对象表指向的句柄表;遍历所述句柄表的所有句柄表项,获得每一句柄表项所指向的进程对象,进而获得每一进程对象所对应的进程;集合所获得的所有进程,形成系统进程集合。可选的,所述获取微软客户端和服务端运行时子系统进程对象的数据结构包括获取当前进程的私有句柄表;遍历该当前进程的私有句柄表与其它进程的私有句柄表形成的句柄表链,获得其它进程私有句柄表;根据所述获得的其它进程的私有句柄表,获取私有句柄表所对应的进程对象的数据结构;直至获取所述微软客户端和服务端运行时子系统进程对象的数据结构为止。可选的,所述获取微软客户端和服务端运行时子系统进程对象的数据结构包括获取系统进程和线程对象句柄表; 遍历所述系统进程和线程对象句柄表中进程对象体指针指向的进程对象,获得相应的进程对象的数据结构,直至获取所述微软客户端和服务端运行时子系统进程对象的数据结构为止。可选的,所述获取所述数据结构中的对象表指向的句柄表包括在所述数据结构中由起始位置偏移固定的步长获取所述数据结构中的对象表指向的句柄表。可选的,所述遍历所述句柄表的所有句柄表项,获得每一句柄表项所指向的进程对象包括获取所述句柄表层数;若获取的句柄表层数为一层,按照固定的步长遍历该层每一句柄表项,并根据每一句柄表项中的指向进程对象的成员指针,获取其进程对象;若获取的句柄表层数大于一层,则首先指向句柄表最高层,由最高层按照固定步长遍历该层每一句柄表项;并获取每一句柄表项中的指向相邻下层句柄表项的成员指针;重复执行遍历每一层的句柄表项,直至最下层;并由该最下层的每一句柄表项中的指向进程对象的成员指针,获取其进程对象。可选的,所述获取所述句柄表层数包括读取句柄表中TableCode值的后两位;根据所述后两位判断句柄表层数。可选的,所述首先指向句柄表最高层包括获取句柄表中TableCode指针;将所述TableCode指针定位到句柄表最高层。可选的,还包括对于所述获得系统的进程中的至少一个进程,按照该进程所在的SessionProcessLinks链表再做遍历,并将获得的进程表与所述获得系统的进程集合合并。可选的,还包括对于所述获得系统的进程中的至少一个进程,按照该进程所在Vm. WorkingSetExpansionLinks链表再做遍历,并将获得的进程表与所述获得系统的进程 口口 O可选的,还包括将获取的进程集合与Windows任务管理器的进程表比对;找出不同于Windows任务管理器的进程表中的进程;以所述找出的进程作为内容向用户发送或者向用户发送提示消息或报警。根据本专利技术的另一方面,还提供一种用于枚举系统进程的装置,包括csrss进程对象获取单元,用于获取微软客户端和服务端运行时子系统进程对象的数据结构;句柄表获取单元,用于获取所述数据结构中的对象表指向的句柄表;遍历单元,用于遍历所 述句柄表的所有句柄表项,获得每一句柄表项所指向的进程对象,进而获得每一进程对象所对应的进程;集合单元,用于集合所获得的所有进程,形成系统进程集合。可选的,所述进程对象获取单元包括私有句柄表获取单元,用于获取当前进程的私有句柄表;第二遍历单元,用于遍历该当前进程的私有句柄表与其它进程的私有句柄表形成的句柄表链,获得其它进程私有句柄表;执行单元,用于根据所述获得的其它进程的私有句柄表,获取私有句柄表所对应的进程对象的数据结构;直至获取所述微软客户端和服务端运行时子系统进程对象的数据结构为止。可选的,所述进程对象获取单元包括进程和线程对象句柄表获取单元,用于获取系统进程和线程对象句柄表;第三遍历单元,用于遍历所述系统进程和线程对象句柄表中进程对象体指针指向的进程对象,获得相应的进程对象的数据结构,直至获取所述微软客户端和服务端运行时子系统进程对象的数据结构为止。可选的,所述遍历单元包括句柄表层数获取单元,用于获取所述句柄表层数;遍历执行单元,用于根据句柄表层数遍历句柄表项,若获取的句柄表层数为一层,按照固定的步长遍历该层每一句柄表项,并根据每一句柄表项中的指向进程对象的成员指针,获取其进程对象;若获取的句柄表层数大于一层,则首先指向句柄表最高层,由最高层按照固定步长遍历该层每一句柄表项;并获取每一句柄表项中的指向相邻下层句柄表项的成员指针;重复执行遍历每一层的句柄表项,直至最下层;并由该最下层的每一句柄表项中的指向进程对象的成员指针,获取其进程对象。可选的,所述句柄表层数获取单元包括读取单元,用于读取句柄表中TableCode值的后两位;判断单元,用于根据所述后两位判断句柄表层数。可选的,所述遍历执行单元还包括TableCode指针获取单元,用于获取句柄表中TableCode指针;定位单元,用于将所述TableCode指针定位到句柄表最高层。可选的,还包括第四遍历单元,用于对于所述获得系统的进程中的至少一个进程,按照该进程所在的SessionProcess本文档来自技高网
...

【技术保护点】
一种用于枚举系统进程的方法,其特征在于,包括:获取微软客户端和服务端运行时子系统进程对象的数据结构;获取所述数据结构中的对象表指向的句柄表;遍历所述句柄表的所有句柄表项,获得每一句柄表项所指向的进程对象,进而获得每一进程对象所对应的进程;集合所获得的所有进程,形成系统进程集合。

【技术特征摘要】
1.一种用于枚举系统进程的方法,其特征在于,包括 获取微软客户端和服务端运行时子系统进程对象的数据结构; 获取所述数据结构中的对象表指向的句柄表; 遍历所述句柄表的所有句柄表项,获得每一句柄表项所指向的进程对象,进而获得每一进程对象所对应的进程; 集合所获得的所有进程,形成系统进程集合。2.根据权利要求I所述的用于枚举系统进程的方法,其特征在于,所述获取微软客户端和服务端运行时子系统进程对象的数据结构包括 获取当如进程的私有句柄表;· 遍历该当前进程的私有句柄表与其它进程的私有句柄表形成的句柄表链,获得其它进程私有句柄表; 根据所述获得的其它进程的私有句柄表,获取私有句柄表所对应的进程对象的数据结构;直至获取所述微软客户端和服务端运行时子系统进程对象的数据结构为止。3.根据权利要求I所述的用于枚举系统进程的方法,其特征在于,所述获取微软客户端和服务端运行时子系统进程对象的数据结构包括 获取系统进程和线程对象句柄表; 遍历所述系统进程和线程对象句柄表中进程对象体指针指向的进程对象,获得相应的进程对象的数据结构,直至获取所述微软客户端和服务端运行时子系统进程对象的数据结构为止。4.根据权利要求I所述的用于枚举系统进程的方法,其特征在于,所述获取所述数据结构中的对象表指向的句柄表包括 在所述数据结构中由起始位置偏移固定的步长获取所述数据结构中的对象表指向的句柄表。5.根据权利要求I所述的用于枚举系统进程的方法,其特征在于,所述遍历所述句柄表的所有句柄表项,获得每一句柄表项所指向的进程对象包括 获取所述句柄表层数; 若获取的句柄表层数为一层,按照固定的步长遍历该层每一句柄表项,并根据每一句柄表项中的指向进程对象的成员指针,获取其进程对象; 若获取的句柄表层数大于一层,则首先指向句柄表最高层,由最高层按照固定步长遍历该层每一句柄表项;并获取每一句柄表项中的指向相邻下层句柄表项的成员指针;重复执行遍历每一层的句柄表项,直至最下层;并由该最下层的每一句柄表项中的指向进程对象的成员指针,获取其进程对象。6.根据权利要求5所述的用于枚举系统进程的方法,其特征在于,所述获取所述句柄表层数包括 读取句柄表中TableCode值的后两位; 根据所述后两位判断句柄表层数。7.根据权利要求5所述的用于枚举系统进程的方法,其特征在于,所述首先指向句柄表最闻层包括 获取句柄表中TableCode指针;将所述TableCode指针定位到句柄表最高层。8.根据权利要求I所述的用于枚举系统进程的方法,其特征在于还包括对于所述获得系统的进程中的至少一个进程,按照该进程所在的SessionProcessLinks链表再做遍历,并将获得的进程表与所述获得系统的进程集合合并。9.根据权利要求I所述的用于枚举系统进程的方法,其特征在于还包括对于所述获得系统的进程中的至少一个进程,按照该进程所在Vm. WorkingSetExpansionLinks链表再做遍历,并将获得的进程表与所述获得系统的进程集合合并。10.根据权利要求I所述的用于枚举系统进程的方法,其特征在于,还包括 将获取的进程集合与Windows任务管理器的进程表比对; 找出不同于Windows任务管理器的进程表中的进程;以所述找出的进程作为内容向用户发送或者向用户发送提示消息或报警。11.一种用于枚举系统进程的装置,其特征在于,包括 csrss进...

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

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

1