Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include "Hack.h"
- #include <iostream>
- #include <sstream> //Just for a convertion test
- typedef HRESULT(WINAPI *tReset)(LPDIRECT3DDEVICE9 pDevice, D3DPRESENT_PARAMETERS *a);
- tReset oReset;
- typedef HRESULT(WINAPI *tEndScene)(LPDIRECT3DDEVICE9 pDevice);
- tEndScene oEndScene;
- Hack hack;
- VOID CreateDevice(DWORD *dwVTable)
- {
- LPDIRECT3D9 pD3d9;
- LPDIRECT3DDEVICE9 pD3DDevice;
- pD3d9 = Direct3DCreate9(D3D_SDK_VERSION);
- if(pD3d9 == NULL)
- return;
- D3DPRESENT_PARAMETERS pPresentParms;
- ZeroMemory(&pPresentParms, sizeof(pPresentParms));
- pPresentParms.Windowed = TRUE;
- pPresentParms.BackBufferFormat = D3DFMT_UNKNOWN;
- pPresentParms.SwapEffect = D3DSWAPEFFECT_DISCARD;
- if(FAILED(pD3d9->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, GetDesktopWindow(), D3DCREATE_SOFTWARE_VERTEXPROCESSING, &pPresentParms, &pD3DDevice)))
- return;
- DWORD *dwTable = (DWORD *)pD3DDevice;
- dwTable = (DWORD *) dwTable[0];
- dwVTable[0] = dwTable[16];
- dwVTable[1] = dwTable[42];
- }
- VOID *Salta(BYTE *src, CONST BYTE *dst, CONST INT len)
- {
- BYTE *jmp = (BYTE *)malloc(len + 5);
- DWORD dwback;
- VirtualProtect(src, len, PAGE_READWRITE, &dwback);
- memcpy(jmp, src, len);
- jmp += len;
- jmp[0] = 0xE9;
- *(DWORD *)(jmp + 1) = (DWORD)(src + len - jmp) - 5;
- src[0] = 0xE9;
- *(DWORD *)(src + 1) = (DWORD)(dst - src) - 5;
- for(INT i = 5; i < len; i++) src[i] = 0x90;
- VirtualProtect(src, len, dwback, &dwback);
- return(jmp - len);
- }
- HRESULT STDMETHODCALLTYPE hkEndScene(IDirect3DDevice9 *pDevice)
- {
- std::cout << "EndScene called !!";
- hack.drawMenu(pDevice);
- return oEndScene(pDevice);
- }
- DWORD WINAPI Hook(LPVOID lpArgs)
- {
- DWORD dwD3D9 = 0;
- while (!dwD3D9) {
- Sleep(100);
- dwD3D9 = (DWORD)GetModuleHandle("d3d9.dll");
- }
- DWORD dwVTable[2] = { 0, 0 };
- CreateDevice(dwVTable);
- AllocConsole();
- freopen("CONOUT$", "w", stdout);
- std::cout << "index 0 : " << std::hex << dwVTable[0] << std::endl;
- std::cout << "index 1 : " << std::hex << dwVTable[1] << std::endl;
- oEndScene = (tEndScene)Salta((PBYTE)dwVTable[1], (PBYTE)&hkEndScene, 5);
- std::cout << "oEndScene " << std::hex << oEndScene << std::endl;
- return FALSE;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement