在另一个进程上调用SetProcessDEPPolicy?

时间:2011-08-22 16:16:42

标签: c# c++ autohotkey external-process dep

游戏(模拟人生3具体)的编码很差,让它随机停止崩溃的一种方法是将其添加到DEP例外列表中。如果我不需要,我真的不想这样做,所以我想知道是否有办法在外部进程上使用SetProcessDEPPolicy来禁用它上面的DEP?无论如何我都不是一个出色的程序员,所以你能提供的信息越多越好。

1 个答案:

答案 0 :(得分:0)

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

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例外列表更加可靠,并且具有相同的效果。