首页
社区
课程
招聘
[求助]拦截ZwCreateThread之后主、从进程的判断
发表于: 2013-3-21 11:21 5360

[求助]拦截ZwCreateThread之后主、从进程的判断

2013-3-21 11:21
5360
有如下疑问:
拦截了ZwCreateThread之后,在判断创建的是当前进程的线程还是其他进程中的远程线程时,为什么看到网上代码都是通过eprocess进行判断的。如下:
CurrentProcess = PsGetCurrentProcess();
ObReferenceObjectByHandle( ProcessHandle ,0,*PsProcessType,KernelMode, &ProcessObject, NULL);
eprocess = ((ULONG)ProcessObject) & 0xFFFFFFFC;
num=*(ULONG *)(eprocess+0x1a0);
if(eprocess != (ULONG)Cprocess && num!=0)
{
....
}


为什么不直接用ZwCreateThread的参数ProcessHandle和NtCurrentProcess()的值比较呢,岂不是更简单?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 608
活跃值: (648)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
亲,NtCurrentProcess()的值是固定的0xFFFFFFFF
2013-3-21 11:41
0
雪    币: 4817
活跃值: (23)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
NtCurrentProcess是个宏,微软的定义是:
#define NtCurrentProcess() ( (HANDLE)(LONG_PTR) -1 )  ,是个伪句柄!
ProcessHandle可能是NtCurrentProcess(),也可能是真正的进程句柄,为了统一,所以使用了ObReferenceObjectByHandle,这个函数就可以不分情况,直接获取真实的进程句柄对应的EPROCESS。

如果你直接用NtCurrentProcess进行比较,那只能当ProcessHandle为NtCurrentProcess()是使用,如果传进来的是真正的进程句柄,那你怎么知道这个句柄是不是本进程了?你还是得首先用ObReferenceObjectByHandle获得EPROCESS指针,然后再PsGetCurrentProcess()获取本进程的EPROCESS做对比。
2013-3-21 11:52
0
雪    币: 14
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
非常感谢!明白了!
嗯,ProcessHandle可能是NtCurrentProcess(),也可能是真正的进程句柄!
2013-3-21 12:23
0
游客
登录 | 注册 方可回帖
返回
//