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直播授课