在另一个进程上调用SetProcessDEPPolicy

本文关键字:调用 SetProcessDEPPolicy 进程 另一个 | 更新日期: 2023-09-27 18:06:25

如果一款游戏(游戏邦注:比如《模拟人生3》)的编码很糟糕,那么阻止它随机崩溃的方法之一便是将其添加到DEP例外列表中。我真的不想这样做,如果我不需要,所以我想知道是否有办法在外部进程上使用SetProcessDEPPolicy来禁用DEP ?无论如何,我不是一个优秀的程序员,所以你能提供的信息越多越好。

在另一个进程上调用SetProcessDEPPolicy

可以通过向远程进程注入一个线程来实现:

HMODULE hKernel32 = GetModuleHandle("kernel32");
// Procedures in kernel32.dll are loaded at the same address in all processes
// so find the address in our own process, then use it in the target process
FARPROC pSetProcessDEPPolicy = GetProcAddress(hKernel32, "SetProcessDEPPolicy");
HANDLE hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pSetProcessDEPPolicy, 0 /* disable DEP */, 0, NULL);
if (hThread == NULL) {
  // handle/report error
}
WaitForSingleObject(hThread);
CloseHandle(hThread);

然而,这通常是个坏主意;在进程启动和执行线程注入之间存在一个时间窗口,在此期间启用了DEP,防作弊或DRM功能可能会将线程注入视为试图破解程序。简单地设置DEP异常列表要可靠得多,并且具有相同的效果。