CN102945346B - 一种用于枚举系统进程的方法及装置 - Google Patents
一种用于枚举系统进程的方法及装置 Download PDFInfo
- Publication number
- CN102945346B CN102945346B CN201210362962.2A CN201210362962A CN102945346B CN 102945346 B CN102945346 B CN 102945346B CN 201210362962 A CN201210362962 A CN 201210362962A CN 102945346 B CN102945346 B CN 102945346B
- Authority
- CN
- China
- Prior art keywords
- privately owned
- owned handle
- handle table
- current process
- current
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 335
- 230000026676 system process Effects 0.000 title claims abstract description 35
- 230000008569 process Effects 0.000 claims abstract description 304
- 241001280173 Crassula muscosa Species 0.000 claims abstract description 26
- 230000002776 aggregation Effects 0.000 claims description 3
- 238000004220 aggregation Methods 0.000 claims description 3
- 238000010586 diagram Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 5
- 230000008901 benefit Effects 0.000 description 3
- 238000004590 computer program Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000000605 extraction Methods 0.000 description 2
- 241000700605 Viruses Species 0.000 description 1
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 239000007943 implant Substances 0.000 description 1
- 238000004321 preservation Methods 0.000 description 1
- 230000009897 systematic effect Effects 0.000 description 1
Landscapes
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明公开了一种用于枚举系统进程的方法,包括:获取当前进程的私有句柄表;遍历该当前进程的私有句柄表与其它进程的私有句柄表形成的句柄表链,获得其它进程私有句柄表;根据所述获得的其它进程的私有句柄表,获取每一私有句柄表所对应的进程;集合所获得的所有进程,形成系统进程集合。本发明还公开了一种用于枚举系统进程的装置。本发明能够枚举出系统所有进程,包括一些隐藏的进程;使得一些恶意软件或者Rootkit无处藏身,有利于减少一些恶意的隐藏进程对系统的威胁。
Description
技术领域
本发明涉及计算机技术领域,特别是涉及一种用于枚举系统进程的方法。本发明还涉及一种用于枚举系统进程的装置。
背景技术
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程序利用,在进程活动链表上不显示其存在,但是仍然被执行,这可能导致用户的计算机在不知不觉中被感染病毒、植入木马或者窃取了信息,对计算机造成潜在的或现实的威胁。因而有必要能够查找出这种被进程活动链表忽略而实质上又在被执行的隐藏进程。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的用于枚举系统进程的方法和相应的用于枚举系统进程的装置。
依据本发明的一个方面,提供了一种用于枚举系统进程的方法,包括:
获取当前进程的私有句柄表;
遍历该当前进程的私有句柄表与其它进程的私有句柄表形成的句柄表链,获得其它进程私有句柄表;
根据所述获得的其它进程的私有句柄表,获取每一私有句柄表所对应的进程;
集合所获得的所有进程,形成系统进程集合。
可选的,所述获取该当前进程的私有句柄表包括:
获取指向当前进程的指针;
由所述当前进程的指针偏移获得当前进程的私有句柄表指针;
根据所述当前进程的私有句柄表指针定位到该当前进程的私有句柄表。
可选的,所述获取指向当前进程的指针包括:
通过PsGetCurrentProcess()或IoGetCurrentProcess()获得当前进程的指针。
可选的,所述由所述当前进程的指针偏移获得当前进程的私有句柄表指针的步骤中,偏移的步长由win系统版本决定。
可选的,所述遍历该当前进程的私有句柄表与其它进程的私有句柄表形成的句柄表链,获得其它进程私有句柄表包括:
记录所述当前进程的私有句柄表的地址;
由该当前进程的私有句柄表指针偏移获取私有句柄表链上相邻进程的私有句柄表;
判断偏移后进程的私有句柄表地址是否与记录的当前进程的私有句柄表的地址相同;若是,终止遍历;
若否,按照与前述偏移相同的方向继续执行指针偏移获取私有句柄表链上的其它进程私有句柄表;直到偏移后获得进程私有句柄表地址与记录的当前进程私有句柄表的地址相同为止。
可选的,所述偏移的步长根据win系统的版本而确定。
可选的,还包括:对于所述获得系统的进程中的至少一个进程,按照该进程所在的SessionProcessLinks链表再做遍历,并将获得的进程表与所述获得系统的进程集合合并。
可选的,还包括:对于所述获得系统的进程中的至少一个进程,按照该进程所在Vm.WorkingSetExpansionLinks链表再做遍历,并将获得的进程表与所述获得系统的进程集合合并。
可选的,还包括如下步骤:
将获取的当前进程集合与Windows任务管理器的进程表比对;
找出不同于Windows任务管理器的进程表中的进程;
将所述找出的进程向用户发送提示消息或发送报警。
根据本发明的另一方面,还提供一种用于枚举系统进程的装置,包括:
句柄表获取单元,用于获取该当前进程的私有句柄表;
遍历单元,用于遍历该当前进程的私有句柄表与其它进程的私有句柄表形成的句柄表链,获得其它进程私有句柄表;
执行单元,用于根据所述获得的其它进程的私有句柄表,获取每一私有句柄表所对应的进程;
集合单元,用于集合所获得的所有进程,形成系统进程集合。
可选的,所述句柄表获取单元包括:
进程指针获取单元,用于获取指向当前进程的指针;
句柄表指针获取单元,用于由所述当前进程的指针偏移获得当前进程的私有句柄表指针;
定位单元,用于根据所述当前进程的私有句柄表指针定位到该当前进程的私有句柄表
可选的,所述遍历单元包括:
记录单元,用于记录所述当前进程的私有句柄表的地址;
偏移单元,用于由该当前进程的私有句柄表指针偏移获取私有句柄表链上相邻进程的私有句柄表;
判断单元,用于判断偏移后进程的私有句柄表地址是否与记录的当前进程的私有句柄表的地址相同;若是,终止遍历;
若否,返回所述偏移单元;直到偏移后获得进程私有句柄表地址与记录的当前进程私有句柄表的地址相同为止。
可选的,还包括:
第二遍历单元,用于对于所述获得系统的进程中的至少一个进程,按照该进程所在的SessionProcessLinks链表再做遍历,并将获得的进程表与所述获得系统的进程集合合并。
可选的,还包括:
第三遍历单元,用于对于所述获得系统的进程中的至少一个进程,按照该进程所在Vm.WorkingSetExpansionLinks链表再做遍历,并将获得的进程表与所述获得系统的进程集合合并。
可选的,还包括:
对比单元,用于将获取的当前进程集合与Windows任务管理器的进程表比对;
提取单元,用于找出不同于Windows任务管理器的进程表中的进程;报警单元,用于将所述找出的进程向用户发送提示消息或发送报警。
根据本发明提供的具体实施例,本发明公开了以下技术效果:本发明的方法中,通过遍历进程的私有句柄表链获得私有句柄表对应的进程;由于任何进程都会有自己的私有句柄表,而且所有进程的私有句柄表链会链接在一起,形成双向链表,只要遍历该双向链表,即可获得所有的进程;包括一些隐藏的进程;也就是说,即使有些进程从进程活动链表中删除,通过本发明的方法仍然能够枚举出该进程,使得一些恶意软件或者Rootkit无处藏身,有利于减少一些恶意的隐藏进程对系统的威胁。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明的用于枚举系统进程的方法的实施例的流程图;
图2示出了根据本发明一个实施例中多个进程的进程结构体通过其私有句柄表形成句柄表链的示意图;
图3示出了根据本发明一种用于枚举系统进程的装置的实施例的流程图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
请参考图1,其为本发明的一种用于枚举系统进程的实施例的流程图。本实施例中,包括如下步骤:
步骤100,获取当前进程的私有句柄表。
在windows系统中,每一个进程都有一个句柄表(handletable),该句柄表称为进程的私有句柄表。所述进程的私有句柄表是一个_HANDLE_TABLE结构,系统中所有进程的私有句柄表以双向链表的形式链接在一起。故若获取当前进程的私有句柄表,并按照一定的步长遍历所述双向链表,即可获得系统中所有的进程。
所述获取当前进程的私有句柄表的一种具体实现方式如下:a,获取指向当前进程的指针;b,由所述当前进程的指针偏移获得当前进程的私有句柄表指针;c,根据所述当前进程的私有句柄表指针定位到该当前进程的私有句柄表。
具体而言,可以通过PsGetCurrentProcess()或IoGetCurrentProcess()获得当前进程的指针。在windows系统中,由于受调度资源的限制,同一进程在执行时也会被划分到不同的时间段部分的执行,不同的进程在执行时穿插在一起,固在某一时间区间内,可能有多个进程在同时进行。而在某一时间点上,在多数情形正在执行的是一个进程(当然也不排除在包括中央处理单元、内存等系统资源充裕的情况下,两个或两个以上的进程并行运行)。通过所述PsGetCurrentProcess()或IoGetCurrentProcess()函数即可得到在调用函数时刻指向正在运行的进程的指针,即指向当前进程的进程结构体_EPROCESS的指针pCurrentProcess。本实施例中当前进程即指调用所述函数时刻正在运行的进程。所述获得的当前进程可以是windows系统中的任何进程,
在获得指向当前任一进程的指针pCurrentProcess后,将所述指针偏移固定的步长,可得到该当前任一进程的私有句柄表。以windowsXP为例,指向当前进程的指针pCurrentProcess偏移0xc4(十六进制),即可得到所述当前进程的私有句柄表,即
pHandleTable=pCurrentProcess+0xc4,
需要说明的是,在windowsXP中,对于任何的进程而言,指针pCurrentProcess与私有句柄表之间的偏移步长均为0xc4(十六进制)。在其它不同版本的window系统中,例如window2000、vista、win7等,偏移步长则有所不同,本领域技术人员可以根据各个windows的版本获得相应的步长。
根据所述当前进程的私有句柄表指针即可定位到该当前进程的私有句柄表。
步骤110,遍历该当前进程的私有句柄表与其它进程的私有句柄表形成的句柄表链,获得其它进程私有句柄表。
如前所述,windows系统中,系统中所有进程的私有句柄表以双向链表的形式链接在一起。如图2所示,其为多个进程的进程结构体通过其私有句柄表形成句柄表链的示意图。进程的私有句柄表为_HANDLE_TABLE结构,对于任一句柄表,由pHandleTable偏移0xlc(十六进制)即可指向其类型为_LIST_ENTRY的成员变量HandleTableList,即句柄表链。每一个HandleTableList都具有Flink和Blink两个成员,Flink成员是一个向前链接,指向下一个LIST_ENTRY结构;Blink成员则是一个向后链接,指向前一个LIST_ENTRY结构。整个链表形成封闭环形,也就是说,最后一个Flink指向链表中的第一个LIST_ENTRY结构,而第一个Blink则指向最后一个。由图2可以看出,系统内所有进程的句柄表都是通过_LIST_ENTRY类型的双向链表链接起来的。故按照一定的步长遍历该双向链表,即可获得系统中所有的进程。
本步骤的遍历该当前进程的私有句柄表与其它进程的私有句柄表形成的句柄表链,获得其它进程私有句柄表的具体实施方法如下:
A、记录所述当前进程的私有句柄表的地址;B、由该当前进程的私有句柄表指针偏移获取私有句柄表链上相邻进程的私有句柄表;C、判断偏移后进程的私有句柄表地址是否与记录的当前进程的私有句柄表的地址相同;若是,终止遍历;D、若否,按照与前述偏移相同的方向继续执行指针偏移获取私有句柄表链上的其它进程私有句柄表;直到偏移后获得进程私有句柄表地址与记录的当前进程私有句柄表的地址相同为止。
具体而言,如果要遍历整个链表,它需要保存第一个(或者当前)HandleTableList的地址,用于以判断是否已遍历了整个链表。向前或者向后偏移一定的步长(所述偏移的步长根据win系统的版本而确定,这里不再赘述)获得相邻的HandleTableList,进而获得其所在的私有句柄表。并判断该相邻的HandleTableList的地址是否与之前记录的第一个HandleTableList的地址相同,若相同,表明遍历已经完成,则终止遍历,若否,继续按照与前述相同偏移相同的方向偏移相同的步长,并在此判断所得到的HandleTableList的地址,直至偏移获得的HandleTableList的地址与第一个相同,即表明完成了整个链表的遍历。其中,每一次偏移获得的HandleTableList的地址偏移-0x1c(十六进制)即可获得其所在的私有句柄表的pHandleTable。
步骤120根据所述获得的其它进程的私有句柄表,获取每一私有句柄表所对应的进程;
遍历完成整个双向链表之后,即可得到链表上所有的私有句柄表。对于任一私有句柄表,通过遍历已经获得了其成员变量HandleTableList的地址。在句柄表中,pHandleTable偏移0x04处,结构成员为指向该句柄表所在进程结构体的指针,也就是说,在获得HandleTableList的地址后,通过地址偏移即可找到其所在进程结构体的指针,进而能够得到该进程结构体,也就是找到了该进程。系统的所有进程均可以通过如上所述的方式而获得。
步骤130,集合所获得的所有进程,形成系统进程表。
本发明的上述实施例的方法中,通过遍历进程的私有句柄表链获得私有句柄表对应的进程;由于任何进程都会有自己的私有句柄表,而且所有进程的私有句柄表链会链接在一起,形成双向链表,只要遍历该双向链表,即可获得所有的进程;包括一些隐藏的进程;也就是说,即使有些进程从进程活动链表中删除,通过本发明的方法仍然能够枚举出该进程,使得一些恶意软件或者Rootkit无处藏身,有利于减少一些恶意的隐藏进程对系统的威胁。
对于所述获得系统的进程中的至少一个进程,还可以按照该进程所在的SessionProcessLinks链表再做遍历,并将获得的进程表与所述获得系统的进程集合合并。
WINDBG中数据结构如下:
kd>dt_eprocess81c2c6d8
nt!_EPROCESS
+0x0b0VirtualSize:0x3933000
+0x0b4SessionProcessLinks:_LIST_ENTRY[0x81dfce54-0x81ec80d4]
由上述结构可知,进程的SessionProcessLinks也是_LIST_ENTRY结构的环形双向链表,对于每一进程,通过遍历该SessionProcessLinks,均可得到一个进程的列表。对通过上述实施例的方法得到进程列表中的任一或多个进程,再通过SessionProcessLinks遍历,可得到一个或多个进程表,将获得的进程表与上述实施例中得到的进程表集合,并去除重复进程,即可得到更为完整的进程表。
此外,对于所述获得系统的进程中的至少一个进程,按照该进程所在Vm.WorkingSetExpansionLinks链表再做遍历,并将获得的进程表与所述获得系统的进程集合合并。其中,Vm.WorkingSetExpansionLinks遍历的原理同SessionProcessLinks遍历,这里不再赘述。
通过上述实施例获得进程列表,还可以继续执行如下的步骤:
I.将获取的当前进程表与Windows任务管理器的进程表比对;II.找出不同于Windows任务管理器的进程表中的进程;III.将所述找出的进程向用户发送提示消息或发送报警。也就是说,通过将本发明的实施例获得的进程表与前述背景技术中的方法所获得进程表进行比对,并将本发明的实施例的方法获得的进程表与背景技术中所获得的方法所不同的进程找出并提示用户或发出报警。用户可以根据该提示或报警对所找出的不同进程进一步分析,判断是否恶意进程。
以上公开了本发明的一种用于枚举系统进程的方法的实施例,与此相应的,本发明还公开了一种用于枚举系统进程的装置。请参靠图3,其为本发明的一种用于枚举系统进程的装置的一种实施例的示意图。由于该装置的实施例与前述的方法的实施例基本相同,下面仅简单描述本实施例中的装置。
本实施例的一种用于枚举系统进程的装置包括:
句柄表获取单元200,用于获取该当前进程的私有句柄表;遍历单元210,用于遍历该当前进程的私有句柄表与其它进程的私有句柄表形成的句柄表链,获得其它进程私有句柄表;执行单元220,用于根据所述获得的其它进程的私有句柄表,获取每一私有句柄表所对应的进程;集合单元230,用于集合所获得的所有进程,形成系统进程集合。
可选的,所述句柄表获取单元200包括:进程指针获取单元,用于获取指向当前进程的指针;句柄表指针获取单元,用于由所述当前进程的指针偏移获得当前进程的私有句柄表指针;定位单元,用于根据所述当前进程的私有句柄表指针定位到该当前进程的私有句柄表
可选的,所述遍历单元210包括:记录单元,用于记录所述当前进程的私有句柄表的地址;偏移单元,用于由该当前进程的私有句柄表指针偏移获取私有句柄表链上相邻进程的私有句柄表;判断单元,用于判断偏移后进程的私有句柄表地址是否与记录的当前进程的私有句柄表的地址相同;若是,终止遍历;若否,返回所述偏移单元;直到偏移后获得进程私有句柄表地址与记录的当前进程私有句柄表的地址相同为止。
可选的,本实施例的装置还包括:第二遍历单元,用于对于所述获得系统的进程中的至少一个进程,按照该进程所在的SessionProcessLinks链表再做遍历,并将获得的进程表与所述获得系统的进程集合合并。
可选的,本实施例的装置还包括:第三遍历单元,用于对于所述获得系统的进程中的至少一个进程,按照该进程所在Vm.WorkingSetExpansionLinks链表再做遍历,并将获得的进程表与所述获得系统的进程集合合并。
可选的,本实施例的装置还包括:对比单元,用于将获取的当前进程表与Windows任务管理器的进程表比对;提取单元,用于找出不同于Windows任务管理器的进程表中的进程;报警单元,用于将所述找出的进程向用户发送提示消息或发送报警。
应用本发明实施例的装置可获得与上述方法实施例相同的技术效果,这里不再赘述。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的用于枚举系统进程的装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
Claims (9)
1.一种用于枚举系统进程的方法,其特征在于,包括:
获取当前进程的私有句柄表;
遍历该当前进程的私有句柄表与其它进程的私有句柄表形成的句柄表链,获得其它进程私有句柄表;
根据所述获得的其它进程的私有句柄表,获取每一私有句柄表所对应的进程;
对于获得系统的进程中的至少一个进程,按照该进程所在的SessionProcessLinks链表和/或Vm.WorkingSetExpansionLinks链表再做遍历,并去除重复进程;
集合所获得的所有进程,形成系统进程集合。
2.根据权利要求1所述的用于枚举系统进程的方法,其特征在于,所述获取该当前进程的私有句柄表包括:
获取指向当前进程的指针;
由所述当前进程的指针偏移获得当前进程的私有句柄表指针;
根据所述当前进程的私有句柄表指针定位到该当前进程的私有句柄表。
3.根据权利要求2所述的用于枚举系统进程的方法,其特征在于,所述获取指向当前进程的指针包括:
通过PsGetCurrentProcess()或IoGetCurrentProcess()获得当前进程的指针。
4.根据权利要求2所述的用于枚举系统进程的方法,其特征在于,所述由所述当前进程的指针偏移获得当前进程的私有句柄表指针的步骤中,偏移的步长由win系统版本决定。
5.根据权利要求1所述的用于枚举系统进程的方法,其特征在于,所述遍历该当前进程的私有句柄表与其它进程的私有句柄表形成的句柄表链,获得其它进程私有句柄表包括:
记录所述当前进程的私有句柄表的地址;
由该当前进程的私有句柄表指针偏移获取私有句柄表链上相邻进程的私有句柄表;
判断偏移后进程的私有句柄表地址是否与记录的当前进程的私有句柄表的地址相同;若是,终止遍历;
若否,按照与前述偏移相同的方向继续执行指针偏移获取私有句柄表链上的其它进程私有句柄表;直到偏移后获得进程私有句柄表地址与记录的当前进程私有句柄表的地址相同为止。
6.根据权利要求5所述的用于枚举系统进程的方法,其特征在于,所述偏移的步长根据win系统的版本而确定。
7.一种用于枚举系统进程的装置,其特征在于,包括:
句柄表获取单元,用于获取当前进程的私有句柄表;
遍历单元,用于遍历该当前进程的私有句柄表与其它进程的私有句柄表形成的句柄表链,获得其它进程私有句柄表;
执行单元,用于根据所述获得的其它进程的私有句柄表,获取每一私有句柄表所对应的进程;
第二遍历单元,用于对于获得系统的进程中的至少一个进程,按照该进程所在的SessionProcessLinks链表再做遍历;
第三遍历单元,用于对于所述获得系统的进程中的至少一个进程,按照该进程所在Vm.WorkingSetExpansionLinks链表再做遍历;
集合单元,用于去除重复进程后,集合所获得的所有进程,形成系统进程集合。
8.根据权利要求7所述的用于枚举系统进程的装置,其特征在于,所述句柄表获取单元包括:
进程指针获取单元,用于获取指向当前进程的指针;
句柄表指针获取单元,用于由所述当前进程的指针偏移获得当前进程的私有句柄表指针;
定位单元,用于根据所述当前进程的私有句柄表指针定位到该当前进程的私有句柄表。
9.根据权利要求7所述的用于枚举系统进程的装置,其特征在于,所述遍历单元包括:
记录单元,用于记录所述当前进程的私有句柄表的地址;
偏移单元,用于由该当前进程的私有句柄表指针偏移获取私有句柄表链上相邻进程的私有句柄表;
判断单元,用于判断偏移后进程的私有句柄表地址是否与记录的当前进程的私有句柄表的地址相同;若是,终止遍历;
若否,返回所述偏移单元;直到偏移后获得进程私有句柄表地址与记录的当前进程私有句柄表的地址相同为止。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210362962.2A CN102945346B (zh) | 2012-09-25 | 2012-09-25 | 一种用于枚举系统进程的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210362962.2A CN102945346B (zh) | 2012-09-25 | 2012-09-25 | 一种用于枚举系统进程的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102945346A CN102945346A (zh) | 2013-02-27 |
CN102945346B true CN102945346B (zh) | 2016-03-30 |
Family
ID=47728287
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210362962.2A Active CN102945346B (zh) | 2012-09-25 | 2012-09-25 | 一种用于枚举系统进程的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102945346B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105488415B (zh) * | 2015-11-30 | 2019-09-03 | 福建天晴数码有限公司 | 扫描系统进程的方法和装置 |
CN106022118A (zh) * | 2016-05-20 | 2016-10-12 | 北京金山安全软件有限公司 | 安全保护处理方法及装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101414304A (zh) * | 2008-11-27 | 2009-04-22 | 山东省计算中心 | 基于KPCR结构的Windows系统物理内存分析方法 |
CN101770551A (zh) * | 2008-12-30 | 2010-07-07 | 中国科学院软件研究所 | 一种基于硬件模拟器的处理隐藏进程的方法 |
-
2012
- 2012-09-25 CN CN201210362962.2A patent/CN102945346B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101414304A (zh) * | 2008-11-27 | 2009-04-22 | 山东省计算中心 | 基于KPCR结构的Windows系统物理内存分析方法 |
CN101770551A (zh) * | 2008-12-30 | 2010-07-07 | 中国科学院软件研究所 | 一种基于硬件模拟器的处理隐藏进程的方法 |
Non-Patent Citations (2)
Title |
---|
Windows平台下Rootkit检测;张登银等;《计算机技术与发展》;20110731;第21卷(第7期);141-144 * |
内核Rootkit进程隐藏与检测技术研究;李钢等;《仪器仪表学报》;20100831;第31卷(第8期);127-130 * |
Also Published As
Publication number | Publication date |
---|---|
CN102945346A (zh) | 2013-02-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Interlandi et al. | Titian: Data provenance support in spark | |
CA2856268C (en) | Methods of detection of software exploitation | |
US8307010B2 (en) | Data feature tracking through hierarchical node sets | |
CN104636409B (zh) | 促进搜索结果的显示的方法、设备和产生搜索结果的方法 | |
CN110741354B (zh) | 呈现代码实体调用之间的差异 | |
US20170286693A1 (en) | Security analysis using relational abstraction of data structures | |
US10909179B2 (en) | Malware label inference and visualization in a large multigraph | |
CN102902765B (zh) | 一种用于解除文件占用的方法及装置 | |
CN103150506A (zh) | 一种恶意程序检测的方法和装置 | |
CN104268473A (zh) | 应用程序检测方法和装置 | |
CN102867144A (zh) | 一种用于检测和清除计算机病毒的方法和装置 | |
US10325844B2 (en) | Modifying execution flow in save-to-return code scenarios | |
Haeusler et al. | ChronoSphere: a graph-based EMF model repository for IT landscape models | |
KR20080096518A (ko) | 해석가능한 코드를 실행시키는 것과 연관된 위험의 사정을용이하게 하는 컴퓨터 구현 방법, 컴퓨터 프로그램 제품,및 컴퓨팅 시스템 | |
CN102945343B (zh) | 一种用于枚举系统进程的方法及装置 | |
CN102945346B (zh) | 一种用于枚举系统进程的方法及装置 | |
CN103135947A (zh) | 一种显示Windows盘符的方法和装置 | |
KR101767481B1 (ko) | 프로그램 분석 장치 및 프로그램 분석 제공 방법 | |
CN102902575B (zh) | 一种用于枚举系统进程的方法及装置 | |
US9852048B2 (en) | Simulating process variable changes during process runtime | |
US20170075956A1 (en) | Context based access path selection | |
CN105224583B (zh) | 日志文件的清理方法及装置 | |
CN102708054A (zh) | 二进制程序循环写内存安全漏洞的检测方法 | |
US9898268B2 (en) | Enhanced local commoning | |
CN102867139A (zh) | 一种用于枚举系统进程的方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20220715 Address after: Room 801, 8th floor, No. 104, floors 1-19, building 2, yard 6, Jiuxianqiao Road, Chaoyang District, Beijing 100015 Patentee after: BEIJING QIHOO TECHNOLOGY Co.,Ltd. Address before: 100088 room 112, block D, 28 new street, new street, Xicheng District, Beijing (Desheng Park) Patentee before: BEIJING QIHOO TECHNOLOGY Co.,Ltd. Patentee before: Qizhi software (Beijing) Co.,Ltd. |