[发明专利]一种用于枚举系统进程的方法及装置无效
| 申请号: | 201210359817.9 | 申请日: | 2012-09-25 |
| 公开(公告)号: | CN102867139A | 公开(公告)日: | 2013-01-09 |
| 发明(设计)人: | 张辉 | 申请(专利权)人: | 北京奇虎科技有限公司;奇智软件(北京)有限公司 |
| 主分类号: | G06F21/50 | 分类号: | G06F21/50 |
| 代理公司: | 北京市德权律师事务所 11302 | 代理人: | 刘杰 |
| 地址: | 100088 北京市西城区新*** | 国省代码: | 北京;11 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 用于 枚举 系统 进程 方法 装置 | ||
技术领域
本发明涉及计算机技术领域,特别是涉及一种用于枚举系统进程的方法。本发明还涉及一种用于枚举系统进程的装置。
背景技术
Windows任务管理器可以枚举出系统当前的进程,并能够根据需要选择终止进程。为管理系统进程提供了很大的便利。
Windows任务管理器枚举系统当前进程是通过其Native API函数ZwQuerySystemInfomation来操作进程活动链表来实现的。具体的过程如下:
首先,获取当前任一进程的指针,例如可以通过PsGetCurrentProcess()来获取当前进程的PEPROCESS指针。
然后定位到记录该当前进程与其它进程链接信息的Activelist处,具体的操作方式为ActiveList=pCurrentEprocess+0x88,即当前进程指针移动一定的步长。其中0x88为winxp sp3下Activelist与pCurrentEprocess的步长,在不同win操作系统时该步长并不相同。
接着,以所定位的当前进程的Activelist遍历整个进程活动链表(Activelistlink)上每一进程的数据结构,即可获得当前的存在于进程活动链表的所有进程。
如上所述,因为windows任务管理器是基于ZwQuerySystemInformation来实现的,所以如果将进程对象从进程活动链表中移除,那么调用NtQuerySystemInfomation来枚举进程的任务管理器TaskMgr.exe中就不会看到目标进程了。同时,Windows的任务调度分配器使用的另一的数据结构,也就是说,进程是否被调度执行与进程活动链表无关,不会因为从进程活动链表删除就被CPU忽略,因此进程仍然会被执行。这很容易被一些恶意软件或者RootKit程序利用,在进程活动链表上不显示其存在,但是仍然被执行,这可能导致用户的计算机在不知不觉中被感染病毒、植入木马或者窃取了信息,对计算机造成潜在的或现实的威胁。因而有必要能够查找出这种被进程活动链表忽略而实质上又在被执行的隐藏进程。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的用于枚举系统进程的方法和相应的用于枚举系统进程的装置。
依据本发明的一个方面,提供了一种用于枚举系统进程的方法,包括:
获取系统进程和线程对象句柄表;
遍历所述系统进程和线程对象句柄表中进程对象体指针指向的进程对象,获得系统的进程;
集合所获得的所有进程,形成系统进程集合。
可选的,所述获取系统进程和线程对象句柄表包括:
获取内核进程控制区域地址;
将内核进程控制区域地址偏移固定的步长获取系统进程和线程对象句柄表地址;
根据其地址获取系统进程和线程对象句柄表
可选的,所述获取系统进程和线程对象句柄表包括:通过系统进程和线程对象句柄表的函数中特征搜索定位系统进程和线程对象句柄表。
可选的,所述特征搜索的特征串包括0x35ff和0x8e。
可选的,所述遍历所述系统进程和线程对象句柄表中进程对象体指针指向的进程对象包括:
在所述进程和线程对象句柄表中获取所有对象体指针;
在所述所有对象体指针中获取进程对象头指针;
遍历所述进程对象头指针指向的进程对象,获取所有进程。
可选的,所述
在所述进程和线程对象句柄表中获取对象体指针包括:
获取所述句柄表层数;
若获取的句柄表层数为一层,按照固定的步长遍历该层每一句柄表项,获取每一句柄表项中的指向进程对象的对象体指针地址;
若获取的句柄表层数大于一层,则首先指向句柄表最高层,由最高层按照固定步长遍历该层每一句柄表项;并获取每一句柄表项中的指向相邻下层句柄表项的成员指针;重复执行遍历每一层的句柄表项,直至最下层;并由该最下层的每一句柄表项中的指向进程对象的对象体指针地址;
由所述对象体指针地址获取对象体指针。
可选的,所述在所述所有对象体指针中获取进程对象头指针包括:
由对象体指针偏移一定步长获取相应的对象头指针;
在所述对象头指针中读取其指针类型信息;
选出所有类型为进程的对象头指针。
可选的,所述获取所述句柄表层数包括:
读取进程和线程对象句柄表中tablecode值的后两位值;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京奇虎科技有限公司;奇智软件(北京)有限公司,未经北京奇虎科技有限公司;奇智软件(北京)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210359817.9/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种喷码机的计数装置
- 下一篇:一种基于遥感像元的非点源污染计算方法





