win7下用windbg工具查看结构信息:
.......
在这个结构中有我们关心的两个数据,一个是偏移0x88处的ActiveProcessLinks,另一个是偏移0xc4处的ObjectTable。
ActiveProcessLinks是活动进程链表,它的作用就是把一个个的EPROCESS结构链接在一起。它是一个_LIST_ENTRY的结构类型:
Flink是指向当前节点之后的指针,Blink是指向当前节点之前的指针,_LIST_ENTRY是一个双向链表。活动进程可以通过这个链表来遍历。
与ActiveProcessLinks不同的是,ObjectTable并不是一个双向链表,它指向的是进程的句柄表。而系统内所有这些句柄表结构都是通过_LIST_ENTRY类型的双向链表链接起来的,类似于ActiveProcessLinks将进程链接起来的方式。ObjectTable是一个_HANDLE_TABLE结构,具体如下:
偏移0x10处就是一个类型为_LIST_ENTRY的HandleTableList,即句柄表链。活动进程也可以通过这个链表遍历.
需要注意注意的是,ObjectTable结构体内偏移0x008处的UniqueProcessId就是当前EPROCESS对应进程的ID号。同时,ObjectTable结构体内偏移0x004处有一个指针QuotaProcess,指向了当前进程的EPROCESS结构(Sytem进程比较特殊,对应的指针为空)。因而,我们不仅能够得到进程的ID号,而且可以获得进程的其他信息.编码很简单就能实现了。
小结
Windows系统中的EPROCESS结构是一个非常重要的结构,与系统进程、线程管理密切相关。同时,在EPROCESS结构中还存在着其他重要的进程特征,通过分析该结构可以找到其他进程检测的方法