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

技术编号:8366883 阅读:215 留言:0更新日期:2013-02-28 05:48
本发明专利技术公开了一种用于枚举系统进程的方法,包括:获取当前进程的私有句柄表;遍历该当前进程的私有句柄表与其它进程的私有句柄表形成的句柄表链,获得其它进程私有句柄表;根据所述获得的其它进程的私有句柄表,获取每一私有句柄表所对应的进程;集合所获得的所有进程,形成系统进程集合。本发明专利技术还公开了一种用于枚举系统进程的装置。本发明专利技术能够枚举出系统所有进程,包括一些隐藏的进程;使得一些恶意软件或者Rootkit无处藏身,有利于减少一些恶意的隐藏进程对系统的威胁。

【技术实现步骤摘要】

本专利技术涉及计算机
,特别是涉及一种用于枚举系统进程的方法。本专利技术还涉及一种用于枚举系统进程的装置。
技术介绍
Windows任务管理器可以枚举出系统当前的进程,并能够根据需要选择终止进程。为管理系统进程提供了很大的便利。Windows任务管理器枚举系统当前进程是通过其Native API函数ZwQuerySystemInfomation来操作进程活动链表来实现的。具体的过程如下 首先,获取当前任一进程的指针,例如可以通过PsGetCurrentProcess O来获取当前进程的PEPR0CESS指针。然后定位到记录该当前进程与其它进程链接信息的Activelist处,具体的操作方式为ActiveList = pCurrentEprocess+0x88,即当前进程指针移动一定的步长。其中0x88为winxp sp3下Activelist与pCurrentEprocess的步长,在不同win操作系统时该步长并不相同。接着,以所定位的当前进程的Activelist遍历整个进程活动链表(Activelistlink)上每一进程的数据结构,即可获得当前的存在于进程活动链表的所有进程。如上所述,因为windows任务管理器是基于ZwQuerySystemInformation来实现的,所以如果将进程对象从进程活动链表中移除,那么调用NtQuerySystemInfomation来枚举进程的任务管理器TaskMgr. exe中就不会看到目标进程了。同时,Windows的任务调度分配器使用的另一的数据结构,也就是说,进程是否被调度执行与进程活动链表无关,不会因为从进程活动链表删除就被CPU忽略,因此进程仍然会被执行。这很容易被一些恶意软件或者RootKit程序利用,在进程活动链表上不显示其存在,但是仍然被执行,这可能导致用户的计算机在不知不觉中被感染病毒、植入木马或者窃取了信息,对计算机造成潜在的或现实的威胁。因而有必要能够查找出这种被进程活动链表忽略而实质上又在被执行的隐藏进程。
技术实现思路
鉴于上述问题,提出了本专利技术以便提供一种克服上述问题或者至少部分地解决上述问题的用于枚举系统进程的方法和相应的用于枚举系统进程的装置。依据本专利技术的一个方面,提供了一种用于枚举系统进程的方法,包括获取当如进程的私有句柄表;遍历该当前进程的私有句柄表与其它进程的私有句柄表形成的句柄表链,获得其它进程私有句柄表;根据所述获得的其它进程的私有句柄表,获取每一私有句柄表所对应的进程;集合所获得的所有进程,形成系统进程集合。可选的,所述获取该当前进程的私有句柄表包括获取指 向当前进程的指针;由所述当前进程的指针偏移获得当前进程的私有句柄表指针;根据所述当前进程的私有句柄表指针定位到该当前进程的私有句柄表。可选的,所述获取指向当前进程的指针包括通过PsGetCurrentProcess O 或 IoGetCurrentProcess O 获得当前进程的指针。可选的,所述由所述当前进程的指针偏移获得当前进程的私有句柄表指针的步骤中,偏移的步长由win系统版本决定。可选的,所述遍历该当前进程的私有句柄表与其它进程的私有句柄表形成的句柄表链,获得其它进程私有句柄表包括记录所述当前进程的私有句柄表的地址;由该当前进程的私有句柄表指针偏移获取私有句柄表链上相邻进程的私有句柄表;判断偏移后进程的私有句柄表地址是否与记录的当前进程的私有句柄表的地址相同;若是,终止遍历;若否,按照与前述偏移相同的方向继续执行指针偏移获取私有句柄表链上的其它进程私有句柄表;直到偏移后获得进程私有句柄表地址与记录的当前进程私有句柄表的地址相同为止。可选的,所述偏移的步长根据win系统的版本而确定。可选的,还包括对于所述获得系统的进程中的至少一个进程,按照该进程所在的SessionProcessLinks链表再做遍历,并将获得的进程表与所述获得系统的进程集合合并。可选的,还包括对于所述获得系统的进程中的至少一个进程,按照该进程所在Vm. WorkingSetExpansionLinks链表再做遍历,并将获得的进程表与所述获得系统的进程 口口O可选的,还包括如下步骤将获取的当前进程集合与Windows任务管理器的进程表比对;找出不同于Windows任务管理器的进程表中的进程;将所述找出的进程向用户发送提示消息或发送报警。根据本专利技术的另一方面,还提供一种用于枚举系统进程的装置,包括句柄表获取单元,用于获取该当前进程的私有句柄表;遍历单元,用于遍历该当前进程的私有句柄表与其它进程的私有句柄表形成的句柄表链,获得其它进程私有句柄表;执行单元,用于根据所述获得的其它进程的私有句柄表,获取每一私有句柄表所对应的进程;集合单元,用于集合所获得的所有进程,形成系统进程集合。可选的,所述句柄表获取单元包括进程指针获取单元,用于获取指向当前进程的指针;句柄表指针获取单元,用于由所述当前进程的指针偏移获得当前进程的私有句柄表指针;定位单元,用于根据所述当前进程的私有句柄表指针定位到该当前进程的私有句柄表可选的,所述遍历单元包括记录单元,用于记录所述当前进程的私有句柄表的地址;偏移单元,用于由该当前进程的私有句柄表指针偏移获取私有句柄表链上相邻进程的私有句柄表;判断单元,用于判断偏移后进程的私有句柄表地址是否与记录的当前进程的私有句柄表的地址相同;若是,终止遍历;若否,返回所述偏移单元;直到偏移后获得进程私有句柄表地址与记录的当前进·程私有句柄表的地址相同为止。可选的,还包括第二遍历单元,用于对于所述获得系统的进程中的至少一个进程,按照该进程所在的SessionProcessLinks链表再做遍历,并将获得的进程表与所述获得系统的进程集合I=I TT O可选的,还包括第三遍历单元,用于对于所述获得系统的进程中的至少一个进程,按照该进程所在Vm. WorkingSetExpansionLinks链表再做遍历,并将获得的进程表与所述获得系统的进程集合合并。可选的,还包括对比单元,用于将获取的当前进程集合与Windows任务管理器的进程表比对;提取单元,用于找出不同于Windows任务管理器的进程表中的进程;报警单元,用于将所述找出的进程向用户发送提示消息或发送报警。根据本专利技术提供的具体实施例,本专利技术公开了以下技术效果本专利技术的方法中,通过遍历进程的私有句柄表链获得私有句柄表对应的进程;由于任何进程都会有自己的私有句柄表,而且所有进程的私有句柄表链会链接在一起,形成双向链表,只要遍历该双向链表,即可获得所有的进程;包括一些隐藏的进程;也就是说,即使有些进程从进程活动链表中删除,通过本专利技术的方法仍然能够枚举出该进程,使得一些恶意软件或者Rootkit无处藏身,有利于减少一些恶意的隐藏进程对系统的威胁。上述说明仅是本专利技术技术方案的概述,为了能够更清楚了解本专利技术的技术手段,而可依照说明书的内容予以实施,并且为了让本专利技术的上述和其它目的、特征和优点能够更明显易懂,以下特举本专利技术的具体实施方式。附图说明通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本专利技术的限制。而且在整个附图中,用相同的参考符号表示相同的本文档来自技高网
...

【技术保护点】
一种用于枚举系统进程的方法,其特征在于,包括:获取当前进程的私有句柄表;遍历该当前进程的私有句柄表与其它进程的私有句柄表形成的句柄表链,获得其它进程私有句柄表;根据所述获得的其它进程的私有句柄表,获取每一私有句柄表所对应的进程;集合所获得的所有进程,形成系统进程集合。

【技术特征摘要】

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

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

1