-
-
[求助] PsGetNextProcessThread 无法调用
-
发表于:
2018-8-5 22:16
4420
-
[求助] PsGetNextProcessThread 无法调用
求助大神,想在内核中枚举进程的线程,因为 ThreadListHead 偏移不好找,所以用PsResumeProcess定位PsGetNextProcessThread来枚举线程。
代码是这样的:
PEPROCESS pEProcess;
status = PsLookupProcessByProcessId((HANDLE)pid, &pEProcess);
if (NT_SUCCESS(status))
{
PETHREAD pEThread;
for (pEThread = PsGetNextProcessThread(pEProcess, NULL); pEThread != NULL; pEThread = PsGetNextProcessThread(pEProcess, pEThread))
{
//操作线程...
pEThread = (PETHREAD)PsGetNextProcessThread(pEProcess, pEThread);
}
}
但是一旦调用系统立马卡死(Win7 32位),Win10则是直接蓝屏,windbg调试显示 :
Access violation - code c0000005 (!!! second chance !!!)
nt!ObReferenceObjectSafe+0x3:
83ea13f5 8b0a mov ecx,dword ptr [edx]
看了看WRK的函数源码,对应 ObReferenceObjectSafe 第一行 ObjectHeader = OBJECT_TO_OBJECT_HEADER( Object );
经过测试,单单调用这一句 PsGetNextProcessThread(PsGetCurrentProcess(), NULL); 就会出现问题。这难道是BUG?
可是 PsEnumProcessThreads 、NtTerminateProcess函数都是这样调用的,难道是我调用不对
(经过ida和windbg反汇编,确认PsGetNextProcessThread地址获取正确)
求大神帮忙看看,这到底是什么问题
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课