获取进程句柄¶
一旦你知道游戏的 PID,就可以用名为 OpenProcess() 的 API 函数获取进程本身的句柄。这个函数允许你以所需的访问级别获取句柄,以便读写内存。这对游戏破解至关重要,因为任何对进程操作的函数都需要具有适当访问权限的句柄。
让我们看看 OpenProcess() 的原型:
第一个参数 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。