前面看到用PspCidTable可以枚举所有进程,今天又看到系统中有个全局变量PsActiveProcessHead保存所有进程。通过这个全局变量也可以枚举所有进程。当然这种方法的原理同EPROCESS遍历是一样的。PsActiveProcessHead队列其实是保存
EPROCESS->ActiveProcessLinks LIST_ENTRY数据结构的。
void DisplayList()
{
PLIST_ENTRY List = PsActiveProcessHead->Blink;
while( List != PsActiveProcessHead )
{
char* name = ((char*)List-ActiveProcessLinksOffset)+FileNameOffset;
DbgPrint("name = %s/n",name);
List=List->Blink;
}
}
最好的办法还是从进程名为”system”开始枚举,这种方法Rootkit那本书上讲的有,就不写在这儿了。