2011-08-22 51 views
0

一個遊戲(具體的模擬人生3)編碼不好,讓其停止隨機崩潰的一種方法是將其添加到DEP例外列表中。如果我不需要,我真的不想這麼做,所以我想知道是否有一種方法可以在外部進程上使用SetProcessDEPPolicy來禁用DEP?我不是一個出色的程序員,所以你可以提供的信息越多越好。在另一個進程上調用SetProcessDEPPolicy?

回答

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

+0

那麼最好如果我的程序啓動了另一個應用程序,而不是說聽着它的啓動? (請注意,我不知道如何在C++中啓動一個應用程序,我只涉及到c#和ahk,但我可能會想到它) – Dragonshadow

+0

@Dragonshadow,啓動應用程序並不會使這更簡單(有辦法與應用程序的啓動同步,然後注入線程,但它們非常複雜)。你爲什麼如此堅持不爲違規應用設置DEP黑名單? – bdonlan

+0

有問題的計算機會運行在硬件問題上,我現在不能採取,所以重新開始賭博是否會回來。設置DEP黑名單需要重新啓動計算機。 – Dragonshadow