如何从wow64进程中检索特定内核对象的64位地址

How to retrieve the 64-bit address for a specific kernel object from a wow64 process

本文关键字:内核 对象 地址 64位 检索 wow64 进程      更新时间:2023-10-16

是否可以从32位WOW64进程中获取内核对象的64位地址?

例如,我想获得具有给定pid的进程的64位内核地址。此值将是内核记录器进程事件的"UniqueProcessKey"。

我可以使用NtDll:获得32位地址

NtQuerySystemInformation
typedef struct _SYSTEM_HANDLE {
    ULONG ProcessId;
    BYTE ObjectTypeNumber;
    BYTE Flags;
    USHORT Handle;
    PVOID Object;
    ACCESS_MASK GrantedAccess;
} SYSTEM_HANDLE, *PSYSTEM_HANDLE;

但我需要64位地址。提前谢谢。

我找到了答案。

前提是,由于wow64是一个位于64位进程地址空间内的模拟器,因此应该可以调用Nt…函数的64位版本。事实证明你可以。有如下功能:

32-bit:                      64-bit:
NtQuerySystemInformation     NtWow64GetNativeSystemInformation
NtQueryInformationProcess    NtWow64QueryInformationProcess64

然而,存在一个问题。NtWow64GetNativeSystemInformation不支持SystemHandleInformation类,至少在Win7上是这样。因此,我无法获得地址。

无论如何,如果你需要在一个32位的wow进程中处理64位进程,由于某些依赖性,你无法逃脱,那么SO还有一些其他线程值得研究:

如何获取GDI句柄列表

从32位进程中获取64位进程的命令行字符串