首页
社区
课程
招聘
[答案]为什么每个进程都有四个不同的ID?
发表于: 2007-4-21 18:14 6755

[答案]为什么每个进程都有四个不同的ID?

2007-4-21 18:14
6755

为什么每个进程都有四个不同的ID(XP SP2)? 请高手指教!

0496   0x0000009C  \??\C:\WINDOWS\system32\csrss.exe
0497   0x0000009C  \??\C:\WINDOWS\system32\csrss.exe
0498   0x0000009C  \??\C:\WINDOWS\system32\csrss.exe
0499   0x0000009C  \??\C:\WINDOWS\system32\csrss.exe
0520   0x0000009C  \??\C:\WINDOWS\system32\winlogon.exe
0521   0x0000009C  \??\C:\WINDOWS\system32\winlogon.exe
0522   0x0000009C  \??\C:\WINDOWS\system32\winlogon.exe
0523   0x0000009C  \??\C:\WINDOWS\system32\winlogon.exe
0564   0x0000009C  C:\WINDOWS\system32\services.exe
0565   0x0000009C  C:\WINDOWS\system32\services.exe
0566   0x0000009C  C:\WINDOWS\system32\services.exe
0567   0x0000009C  C:\WINDOWS\system32\services.exe
0576   0x0000009C  C:\WINDOWS\system32\lsass.exe
0577   0x0000009C  C:\WINDOWS\system32\lsass.exe
0578   0x0000009C  C:\WINDOWS\system32\lsass.exe
0579   0x0000009C  C:\WINDOWS\system32\lsass.exe
.......
......
请注意 上面显示的是同一个进程有四个不同的ID 并不是一个EXE打开四次显示的
根据上面的原理 有一个神奇的关闭RootkitUnhooker的方法 就是将RootkitUnhooker的进程ID+1\+2\+3 然后就能轻易地将其关闭.因为RootkitUnhooker HOOK 了NtOpenProcess 直接用原来的进程ID 是无法将它的进程打开的


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 7
支持
分享
最新回复 (3)
雪    币: 218
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
NaX
2
记得西裤哥在驱动网有提过用这种方法关闭咔吧,希望高手们能指点一下它的原理!四个ID是怎么来的?为什么需要四个ID?
2007-4-22 10:32
0
雪    币: 218
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
NaX
3
NtOpenProcess->PsLookupProcessByProcessId->ExMapHandleToPointer->ExpLookupHandleTableEntry:
ExpLookupHandleTableEntry (
    IN PHANDLE_TABLE HandleTable,
    IN EXHANDLE Handle
    )
{
    ULONG i,j,k,l;      

    l = (Handle.Index >> 24) & 255;
    i = (Handle.Index >> 16) & 255;
    j = (Handle.Index >> 8)  & 255;
    k = (Handle.Index)       & 255;
  
     return &(HandleTable->Table[i][j][k]);
}

其中 EXHANDLE结构如下:

typedef struct _EXHANDLE {
    union {
        struct {       
            ULONG TagBits : 2;
            ULONG Index : 30; 
        };
        HANDLE GenericHandleOverlay;
    };
} EXHANDLE, *PEXHANDLE;

而 EXHANDLE.GenericHandleOverlay = 传过来的进程ID,由上可知  
EXHANDLE.Index = (GenericHandleOverlay/4) & 0x3FFFFFFF;
可见Index是ID整除4的结果,所以就有“四个ID”了。。。
2007-8-6 09:47
0
雪    币: 200
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
学习了,多谢!
2007-8-7 11:14
0
游客
登录 | 注册 方可回帖
返回
//