跳转至

获取进程句柄

一旦你知道游戏的 PID,就可以用名为 OpenProcess() 的 API 函数获取进程本身的句柄。这个函数允许你以所需的访问级别获取句柄,以便读写内存。这对游戏破解至关重要,因为任何对进程操作的函数都需要具有适当访问权限的句柄。

让我们看看 OpenProcess() 的原型:

HANDLE OpenProcess(DWORD DesiredAccess, BOOL
InheritHandle, DWORD ProcessId);

第一个参数 DesiredAccess 期望设置一个或多个进程访问标志,用于 OpenProcess() 返回的句柄。你可以使用许多标志,但以下是游戏破解中最常见的:

process vm operation:返回的句柄可以与 VirtualAllocEx()、VirtualFreeEx() 和 VirtualProtectEx() 一起使用,分别分配、释放和保护内存块。

process vm read:返回的句柄可以与 ReadProcessMemory() 一起使用。

process vm write:返回的句柄可以与 WriteProcessMemory() 一起使用,但它还必须具有 PROCESS_VM_OPERATION 权限。你可以通过把 PROCESS_VM_OPERATION |PROCESS_VM_WRITE 作为 DesiredAccess 参数传递来设置两个标志。

process create thread:返回的句柄可以与 CreateRemoteThread()一起使用。

process all access:返回的句柄可以用来做任何事。避免使用这个标志,因为它只能被启用调试权限的进程使用,并且与旧版 Windows 存在兼容性问题。

获取游戏句柄时,你通常可以把 OpenProcess() 函数的第二个参数 InheritHandle 设为 false。第三个参数 ProcessId 期望要打开的进程的 PID。