Advertisement
Guest User

Untitled

a guest
Aug 30th, 2015
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.16 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include "Hack.h"
  3.  
  4. #include <iostream>
  5. #include <sstream> //Just for a convertion test
  6.  
  7. typedef HRESULT(WINAPI *tReset)(LPDIRECT3DDEVICE9 pDevice, D3DPRESENT_PARAMETERS *a);
  8. tReset oReset;
  9.  
  10. typedef HRESULT(WINAPI *tEndScene)(LPDIRECT3DDEVICE9 pDevice);
  11. tEndScene oEndScene;
  12.  
  13. Hack hack;
  14.  
  15. VOID CreateDevice(DWORD *dwVTable)
  16. {
  17.     LPDIRECT3D9 pD3d9;
  18.     LPDIRECT3DDEVICE9 pD3DDevice;
  19.     pD3d9 = Direct3DCreate9(D3D_SDK_VERSION);
  20.     if(pD3d9 == NULL)
  21.         return;
  22.     D3DPRESENT_PARAMETERS pPresentParms;
  23.     ZeroMemory(&pPresentParms, sizeof(pPresentParms));
  24.     pPresentParms.Windowed = TRUE;
  25.     pPresentParms.BackBufferFormat = D3DFMT_UNKNOWN;
  26.     pPresentParms.SwapEffect = D3DSWAPEFFECT_DISCARD;
  27.     if(FAILED(pD3d9->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, GetDesktopWindow(), D3DCREATE_SOFTWARE_VERTEXPROCESSING, &pPresentParms, &pD3DDevice)))
  28.         return;
  29.     DWORD *dwTable = (DWORD *)pD3DDevice;
  30.     dwTable = (DWORD *) dwTable[0];
  31.     dwVTable[0] = dwTable[16];
  32.     dwVTable[1] = dwTable[42];
  33. }
  34.  
  35. VOID *Salta(BYTE *src, CONST BYTE *dst, CONST INT len)
  36. {
  37.     BYTE *jmp = (BYTE *)malloc(len + 5);
  38.     DWORD dwback;
  39.     VirtualProtect(src, len, PAGE_READWRITE, &dwback);
  40.     memcpy(jmp, src, len);
  41.     jmp += len;
  42.     jmp[0] = 0xE9;
  43.     *(DWORD *)(jmp + 1) = (DWORD)(src + len - jmp) - 5;
  44.     src[0] = 0xE9;
  45.     *(DWORD *)(src + 1) = (DWORD)(dst - src) - 5;
  46.     for(INT i = 5; i < len; i++) src[i] = 0x90;
  47.     VirtualProtect(src, len, dwback, &dwback);
  48.    
  49.     return(jmp - len);
  50. }
  51.  
  52.  
  53. HRESULT STDMETHODCALLTYPE hkEndScene(IDirect3DDevice9 *pDevice)
  54. {
  55.     std::cout << "EndScene called !!";
  56.     hack.drawMenu(pDevice);
  57.     return oEndScene(pDevice);
  58. }
  59.  
  60. DWORD WINAPI Hook(LPVOID lpArgs)
  61. {
  62.     DWORD dwD3D9 = 0;
  63.  
  64.     while (!dwD3D9) {
  65.         Sleep(100);
  66.         dwD3D9 = (DWORD)GetModuleHandle("d3d9.dll");
  67.     }
  68.  
  69.     DWORD dwVTable[2] = { 0, 0 };
  70.     CreateDevice(dwVTable);
  71.  
  72.  
  73.     AllocConsole();
  74.     freopen("CONOUT$", "w", stdout);
  75.     std::cout << "index 0 : " << std::hex << dwVTable[0] << std::endl;
  76.     std::cout << "index 1 : " << std::hex << dwVTable[1] << std::endl;
  77.  
  78.     oEndScene = (tEndScene)Salta((PBYTE)dwVTable[1], (PBYTE)&hkEndScene, 5);
  79.     std::cout << "oEndScene " << std::hex << oEndScene << std::endl;
  80.  
  81.     return FALSE;
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement