2016-04-09 60 views
0

所以我一直在玩C++和注入DLL,這是相當新的,但很快學習。我試圖掛鉤EndScene,只是不能得到它的工作。我已經嘗試使用模式掃描來查找並鉤住它,我試圖創建一個虛擬的d3d設備並通過它的VTable找到EndScene。每次失敗時,我都會收到訪問衝突,所以我只能假設我的地址有錯誤,或者我完全錯過了某些內容。我嘗試了很多不同的方式,但由於知識有限,需要多一點幫助。試圖掛鉤D3D EndScene

DWORD dEndScene = 0x10066D50; 
HMODULE hBaseAddress = GetModuleHandle("d3d9.dll"); 

BYTE* pEndFunction = (BYTE*)reinterpret_cast<uintptr_t>(hBaseAddress); 
pEndFunction = pEndFunction + dEndScene; 

fEndScene = (oEndScene)DetourFunction(pEndFunction, (PBYTE)EndScene); 

回答

0

該vtable很可能寫保護。您可以使用VirtualProtect

而一些稍有不同的方法:

是否有可能創建其前更換Direct3DCreate9(防爆)?然後,您只需爲所需的接口創建代理對象,然後可以正常委派,在之前/之後執行某些操作,或者完全執行不同的操作。

或者,如果您可以獲得IDirect3DDevice9實例指針,那麼可以通過編輯它引用的vtable(同樣是VirtualProtect,但不需要知道函數在哪裏居住,哪種情況可能會在各種情況下發生變化)。