我昨天在windbg下面探索了一下PspCidTable的结构,并找到了进程,
今天用程序完成,可惜windows7下面,几个结构都改掉了,
比如 object_header结构
lkd> dt _OBJECT_HEADER
nt!_OBJECT_HEADER
+0x000 PointerCount : Int4B
+0x004 HandleCount : Int4B
+0x004 NextToFree : Ptr32 Void
+0x008 Lock : _EX_PUSH_LOCK
+0x00c TypeIndex : UChar
+0x00d TraceFlags : UChar
+0x00e InfoMask : UChar
+0x00f Flags : UChar
+0x010 ObjectCreateInfo : Ptr32 _OBJECT_CREATE_INFORMATION
+0x010 QuotaBlockCharged : Ptr32 Void
+0x014 SecurityDescriptor : Ptr32 Void
+0x018 Body : _QUAD
已经没有OBJECT_TYPE了,
取Object body的时候用了
ULONG pObject = (ULONG)(pTable1[i].Object) & 0xFFFFFFF8 | 0x80000000;
pObject其实就是EPROCESS了,
然后判断是否是进程,用了foreverbell_大牛的方法
BOOLEAN IsProcess(PVOID Eprocess)
{
ULONG CurrentPeb = 0;
ULONG Peb = 0;
if (MmIsAddressValid(Eprocess))
{
CurrentPeb = (ULONG)PsGetProcessPeb(PsGetCurrentProcess()) & 0xFFFF0000;
Peb = (ULONG)PsGetProcessPeb(Eprocess) & 0xFFFF0000;
if (CurrentPeb == Peb) return TRUE;
}
return FALSE;
}
最后取完整路径的时候没有使用EPROCESS->Peb->RTL_USER_PROCESS_PARAMETERS->FULL_IMAGE_NAME这种方法,硬编码比较多,
而是先用ObOpenObjectByPointer取得进程的句柄,然后ZwQueryInformationProcess->ProcessImageFileName的方法取得完整的路径,不过这个时候的路径是
\Device\HarddiskVolume2\XXX这个样子的,还需要转换成DosPath,即可完成
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!