Вызов SetProcessDEPPolicy для другого процесса? - PullRequest
0 голосов
/ 22 августа 2011

Игра (в частности, Sims 3) плохо закодирована, и один из способов остановить ее случайное падение - добавить ее в список исключений DEP. Я действительно не хочу этого делать, если мне не нужно, поэтому мне было интересно, есть ли способ использовать SetProcessDEPPolicy во внешнем процессе, чтобы отключить DEP на нем? Я ни в коем случае не блестящий программист, поэтому, чем больше информации вы сможете дать, тем лучше.

1 Ответ

0 голосов
/ 22 августа 2011

Это можно сделать, внедрив поток в удаленный процесс:

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 и получить тот же эффект.

...