【发布时间】:2014-07-10 12:50:20
【问题描述】:
我为了教育目的而挂钩 NtQuerySystemInformation,我进入了一个用于 SYSTEM_PROCESS_INFORMATION 的工作结构。然后我想到了一些问题:
1 - 可以使用这种结构吗?
2 - 官方结构是什么?
3 - 人们是如何发现这种无证结构的?
这是我正在谈论的代码的一部分,包含结构:
//here is what i'm talking about
type
PProcessInfo = ^TProcessInfo;
TProcessInfo=record
dwOffset : dword;
dwThreadCount : dword;
dwUnkown1 : array[0..5] of dword;
ftCreationTime : TFileTime;
dwUnkown2 : dword;
dwUnkown3 : dword;
dwUnkown4 : dword;
dwUnkown5 : dword;
dwUnkown6 : dword;
pszProcessName : PWideChar;
dwBasePriority : dword;
dwProcessID : dword;
dwParentProcessID : dword;
dwHandleCount : dword;
dwUnkown7 : dword;
dwUnkown8 : dword;
dwVirtualBytesPeak : dword;
dwVirtualBytes : dword;
dwPageFaults : dword;
dwWorkingSetPeak : dword;
dwWorkingSet : dword;
dwUnkown9 : dword;
dwPagedPool : dword;
dwUnkown10 : dword;
dwNonPagedPool : dword;
dwPageFileBytesPeak : dword;
dwPageFileBytes : dword;
dwPrivateBytes : dword;
dwUnkown11 : dword;
dwUnkown12 : dword;
dwUnkown13 : dword;
dwUnkown14 : dword;
ThreadInfo : PThreadInfo;
end;
//finish here, below is just some little snippet of the code
function NtQuerySystemInformationCallbackProc(dt : dword; buf : pointer; bufsize : dword; retlen : pointer) : dword; stdcall;
type
PBA = ^TBA;
TBA = array[0..1000000] of byte;
var
tmpbuf: PBA;
ProcessInfo ,LastPinfo : PProcessInfo;
cp: DWORD;
curproc:string;
begin
Result := NtQuerySystemInformationNextHook(dt,buf,bufsize,retlen);
if dt<>5 then exit;
if result<>0 then exit;
cp := 0;
tmpbuf := buf;
continues....
没有更多未记录的结构,但这是我唯一可以正常工作的结构。
【问题讨论】:
-
1 - 如果未记录,则不受支持。 2- 官方结构 -msdn.microsoft.com/en-us/library/windows/desktop/…, 3 - 逆向工程、反汇编、从符号中检索。
-
如果你想使用它,请使用 Jedi ApiLib 项目中 JwaNative 单元中的声明