首页
社区
课程
招聘
[求助]vista下通过PsLookupProcessByProcessId获取PspCidTable失败
发表于: 2009-4-27 13:41 6036

[求助]vista下通过PsLookupProcessByProcessId获取PspCidTable失败

2009-4-27 13:41
6036
RT,本想发去初学者板块的,但哪里一般大牛都不去,所以发这里了。

特征码搜索的方式,以下是windbg得到的

////////////////////////////////////////////////////////2003 start
0: kd> u PsLookupProcessByProcessId+0x12
nt!PsLookupProcessByProcessId+0x12:
8094d0da 70c7            jo      nt!PsLookupProcessThreadByCid+0x97 (8094d0a3)
8094d0dc 45              inc     ebp
8094d0dd fc              cld
8094d0de 0d0000c0ff      or      eax,0FFC00000h
8094d0e3 7508            jne     nt!PsLookupProcessByProcessId+0x25 (8094d0ed)
8094d0e5 ff35e0d18a80    push    dword ptr [nt!PspCidTable (808ad1e0)]    //wo fuck
8094d0eb e8a8d80300      call    nt!ExMapHandleToPointer (8098a998)
8094d0f0 8bd8            mov     ebx,eax

////////////////////////////////////////////////////2003 end

/////////////////////////////////////////vista sp1 start

kd> u PsLookupProcessByProcessId+0x12
nt!PsLookupProcessByProcessId+0x12:
81a63326 db              ???
81a63327 66ff8e80000000  dec     word ptr [esi+80h]
81a6332e 57              push    edi
81a6332f ff7508          push    dword ptr [ebp+8]
81a63332 8b3db4f99581    mov     edi,dword ptr [nt!PspCidTable (8195f9b4)]   //wo fuck
81a63338 e811be0000      call    nt!ExMapHandleToPointer (81a6f14e)
81a6333d 8bf8            mov     edi,eax
81a6333f 85ff            test    edi,edi

/////////////////////////////////////////v sp1 end

于是我确定了xp 和 2k3下的特征码为0x35ff
所以判断vista的未0x3d8b

但是vista下返回的为null。。

我的代码

PVOID MyGetPspCidTable()
{
	UNICODE_STRING functionName;
	PSLOOKUPPROCESSBYPROCESSID PsLookupProcessByProcessId = NULL;
	PBYTE pointor,*PspCidTable;
	int i;


	RtlInitUnicodeString( &functionName, L"PsLookupProcessByProcessId" );

	PsLookupProcessByProcessId = MmGetSystemRoutineAddress( &functionName );

	if(!PsLookupProcessByProcessId)
		KdPrint(("get PsLookupProcessByProcessId error"));
		return NULL;
	pointor = (PBYTE)PsLookupProcessByProcessId;

	for(i=0;i<256;i++,pointor++)
	{
		if((*(PWORD)pointor) == 0x3d8b)  //v??
		{
			PspCidTable = *(PBYTE**)(pointor+2);
			break;
		}
	}

	if(i==256)
		return NULL;
	else
		return *PspCidTable;
}


希望各位不吝赐教。就算打击都没关系。

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

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
2
你自己都说了0x3d8b,代码还写成0x8b3d

别人要打击你,你真的都没话说
2009-4-27 13:51
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
哦,那个不是。我已经改了的。我已经改成了0x3d8b的
2009-4-27 13:53
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
4
从KPCR取多方便~
2009-4-27 17:43
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢楼上的,不知道kpcr是什么,还有,我想知道为什么我那个方法会错误而已。
2009-4-27 18:08
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
6
2009-4-27 21:30
0
游客
登录 | 注册 方可回帖
返回
//