OldSchoolHack

Register / Login English

D3D-Hook Problem

icon Thread: D3D-Hook Problem

Join Date: Dec 2009

Posts: 10

Hi Leute,
ich hab ein kleines Problem mit meinem D3D-Hook, wenn ich die DLL in Counter Strike, oder irgend eine andere D3D-Anwendung injecte stürzt das Programm sofort ab.
Die EndScene Adresse in der D3D9.dll habe ich schon gefunden:

http://www.myimg.de/?img=EndScene5e6dc.jpg

Hier der Souce Code:
TEXT Code:
  1.  
  2. #include <windows.h>
  3. #include <cstdio>
  4. #include <d3d9.h>
  5. #include <d3dx9.h>
  6.  
  7.  
  8.  
  9. //LPDIRECT3DDEVICE9 pDevice;
  10. const D3DCOLOR txtPink = D3DCOLOR_ARGB(255, 255, 0, 255); // Alpha, Rot, Grün, Blau
  11. void InitHook();
  12. void *DetourFunc(BYTE *src, const BYTE *dst, const int len);
  13. typedef HRESULT(__stdcall* EndScene_t)(LPDIRECT3DDEVICE9);
  14. void DrawRect (LPDIRECT3DDEVICE9 Device_t, int X, int Y, int L, int H, D3DCOLOR color);
  15. EndScene_t pEndScene;
  16.  
  17.  
  18.  
  19. HRESULT __stdcall hkEndScene(LPDIRECT3DDEVICE9 pDevice)
  20. {
  21. DrawRect (pDevice, 10, 10, 200, 200, txtPink);
  22. return pEndScene(pDevice);
  23. }
  24.  
  25.  
  26. int WINAPI DllMain(HINSTANCE hInst,DWORD reason,LPVOID reserved)
  27. {
  28. switch(reason)
  29. {
  30. case DLL_PROCESS_ATTACH:
  31. // Hier kommt unser Code rein
  32. CreateThread(0, 0, (LPTHREAD_START_ROUTINE) InitHook, 0, 0, 0);
  33. break;
  34. }
  35. return true;
  36. }
  37.  
  38.  
  39.  
  40. void InitHook()
  41. { HMODULE hModule = NULL;
  42. while( !hModule )
  43. {
  44. hModule = GetModuleHandleA( "d3d9.dll" ); // Handle zur DLL holen
  45. Sleep( 100 ); // 100ms warten
  46. }
  47.  
  48.  
  49. pEndScene = ( EndScene_t )DetourFunc((PBYTE)0x74A447AF,(PBYTE)hkEndScene, 5);
  50.  
  51.  
  52. }
  53.  
  54. void DrawRect (LPDIRECT3DDEVICE9 Device_t, int X, int Y, int L, int H, D3DCOLOR color)
  55. {
  56. D3DRECT rect = {X, Y, X+L, Y+H};
  57. Device_t->Clear(1, &rect, D3DCLEAR_TARGET, color, 0, 0); // bei Google gibt’s näheres
  58. }
  59.  
  60.  
  61. void *DetourFunc(BYTE *src, const BYTE *dst, const int len) // credits to gamedeception
  62. {
  63. BYTE *jmp = (BYTE*)malloc(len+5);
  64. DWORD dwback;
  65. VirtualProtect(src, len, PAGE_READWRITE, &dwback);
  66. memcpy(jmp, src, len); jmp += len;
  67. jmp[0] = 0xE9;
  68. *(DWORD*)(jmp+1) = (DWORD)(src+len - jmp) - 5;
  69. src[0] = 0xE9;
  70. *(DWORD*)(src+1) = (DWORD)(dst - src) - 5;
  71. VirtualProtect(src, len, dwback, &dwback);
  72. return (jmp-len);
  73. }
  74.  

Normalerweise müsste man jetzt oben links ein pinkes Viereck sehen.

Ich hoffe ihr könnt mir helfen, danke schon mal im vorraus.

Mfg SiZeXtreme

__________________

Wer zuerst malt, malt zuerst.