阅读:2516回复:3
VWIN32_GetCurrentProcessHandle以后怎么取得进程id啊?
谢谢。
vtoolsd写的vxd filemon里面用这个以后 CurProc = VWIN32_GetCurrentProcessHandle(); // // Now, map the ring3 PCB // ring3proc = (PVOID) SelectorMapFlat( Get_Sys_VM_Handle(), (DWORD) (*(PDWORD) ((char *) CurProc + 0x38)) | 0x7, 0 ); if( ring3proc == (PVOID) -1 ) { strcpy( ProcessName, \"???\"); } else { // // copy out the process name (max 8 characters) // name = ((char *)ring3proc) + 0xF2; if( name[0] >= \'A\' && name[0] < \'z\' ) { strcpy( ProcessName, name ); ProcessName[8] = 0; } else { strcpy( ProcessName, \"???\" ); } 取得进程名称 进程id怎么取得呢? |
|
沙发#
发布于:2005-03-22 19:58
还有人做98呢,可以
看看win95奥秘那本书,Pid = CurProc^ObsfucatorDWORD,ObsfuncatorDWORD,是每次系统重启的时候,计算的,是全局的 只要根据当前的进程,或线程计算出Obsfucator = CurPid ^CurPPDB,就可以了,当时我是ring3程序OurPid= GetCurrentProcessId(),传到驱动,驱动可以获得CurPPDB = VWIN32_GetCurrentProcessHandle(), 这样Obsfucator就可以算出来了,那本书上Matt是通过另一种方法算 出ObsfuncatorDWORD的,但在98上,好像硬编码需要修改,我也 记不太清了 |
|
板凳#
发布于:2005-03-22 21:16
先谢谢楼上的兄弟
我看了一下 struct _SYSTEM_PROCESSES { ULONG NextEntryDelta; ULONG ThreadCount; ULONG Reserved[6]; LARGE_INTEGER CreateTime; LARGE_INTEGER UserTime; LARGE_INTEGER KernelTime; UNICODE_STRING ProcessName; KPRIORITY BasePriority; ULONG ProcessId; ULONG InheritedFromProcessId; ULONG HandleCount; ULONG Reserved2[2]; VM_COUNTERS VmCounters; IO_COUNTERS IoCounters; struct _SYSTEM_THREADS Threads[1]; }; filemon取processname是偏移38,那么取processid应该就是偏移48对吧. 可是取出来好像还是和系统的API GetCurrentProcessid差一点点 例如: driver api 4294967295 4294658577 |
|
地板#
发布于:2005-03-22 21:32
搞定了
取magic DWORD hId; hId=GetCurrentThreadId(); _asm{ mov eax,FS:[18h] mov num,eax } num-=8; num=num^hId; |
|