一个游戏(具体来说是模拟人生 3)的代码很糟糕,让它停止随机崩溃的方法之一是将它添加到你的 DEP 例外列表中。如果不需要,我真的不想这样做,所以我想知道是否有办法在外部进程上使用 SetProcessDEPPolicy 来禁用 DEP?无论如何,我都不是一个出色的程序员,所以你能提供的信息越多越好。
问问题
1030 次
1 回答
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 例外列表要可靠得多,并且具有相同的效果。
于 2011-08-22T16:21:40.510 回答