Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- D3D11 DirectX Hook by agrippa1994
- Credits: unknowncheats.me
- */
- #include <Windows.h>
- #include <iostream>
- #include <d3d11.h>
- #include <d3d10.h>
- #pragma comment(lib,"d3d11.lib")
- #pragma comment(lib,"d3d10.lib")
- DWORD g_dwPresent;
- DWORD g_dwClearRenderTargetView;
- DWORD g_dwDrawIndexed;
- void InitHooks();
- BOOL WINAPI DllMain(HANDLE hDllHandle, DWORD dwReason, void *pReserved)
- {
- if(dwReason == DLL_PROCESS_ATTACH)
- {
- CreateThread(0,0,(LPTHREAD_START_ROUTINE)InitHooks,0,0,0);
- return TRUE;
- }
- return FALSE;
- }
- void WINAPI Present(IDXGISwapChain *pSwap)
- {
- printf("Render\n");
- }
- void WINAPI ClearTargetRenderView(ID3D11DeviceContext *pCon)
- {
- printf("ClearTargetRenderView\n");
- }
- void WINAPI DrawIndexed(ID3D11DeviceContext *pCon,UINT IndexCount, UINT StartIndexLocation, UINT BaseVertexLocation)
- {
- printf("DrawIndexed: %d %d %d\n",IndexCount,StartIndexLocation,BaseVertexLocation);
- }
- void __declspec(naked) MidPresent()
- {
- __asm mov edi, edi
- __asm push ebp
- __asm mov ebp, esp
- __asm pushad
- __asm mov eax, [ebp + 0x8]
- __asm push eax
- __asm call Present
- __asm popad
- __asm jmp g_dwPresent
- }
- void __declspec(naked) MidClearTargetRenderView()
- {
- __asm mov edi, edi
- __asm push ebp
- __asm mov ebp, esp
- __asm pushad
- __asm mov eax, [ebp + 0x8]
- __asm push eax
- __asm call ClearTargetRenderView
- __asm popad
- __asm jmp g_dwClearRenderTargetView
- }
- void __declspec(naked) MidDrawIndexed()
- {
- __asm mov edi, edi
- __asm push ebp
- __asm mov ebp, esp
- __asm pushad
- __asm mov edx, 0x14
- __asm Label:
- __asm mov eax, [ebp + edx]
- __asm push eax
- __asm sub edx, 0x4
- __asm cmp edx, 0x4
- __asm jne Label
- __asm call DrawIndexed
- __asm popad
- __asm jmp g_dwDrawIndexed
- }
- bool SetJmp(BYTE *pSrc,DWORD dwTo,size_t uiLen)
- {
- DWORD dwOld;
- if(!VirtualProtect((void *)pSrc,uiLen,PAGE_EXECUTE_READWRITE,&dwOld))
- return false;
- memset(pSrc,0x90,uiLen);
- *pSrc = 0xE9;
- *(DWORD *)(BYTE *)(pSrc + 0x1) = dwTo - (DWORD)pSrc - 0x5;
- VirtualProtect((void *)pSrc,uiLen,dwOld,NULL);
- return true;
- }
- void InitHooks()
- {
- ID3D11Device *pDev;
- ID3D11DeviceContext *pCon;
- IDXGISwapChain *pSwap;
- DXGI_SWAP_CHAIN_DESC scd;
- memset(&scd,0,sizeof(scd));
- HWND hWnd = FindWindowA(0,"Far Cry® 3");
- scd.BufferCount = 1;
- scd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
- scd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
- scd.OutputWindow = hWnd;
- scd.SampleDesc.Count = 4;
- scd.Windowed = ((GetWindowLong(hWnd, GWL_STYLE) & WS_POPUP) != 0) ? false : true;
- scd.BufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED;
- scd.BufferDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED;
- scd.SwapEffect = DXGI_SWAP_EFFECT_DISCARD;
- D3D11CreateDeviceAndSwapChain(NULL,D3D_DRIVER_TYPE_HARDWARE,NULL,NULL,NULL,NULL,D3D11_SDK_VERSION,
- &scd,&pSwap,&pDev,NULL,&pCon);
- if(pSwap == NULL || pDev == NULL || pCon == NULL)
- return;
- AllocConsole();
- freopen("conout$","w",stdout);
- DWORD *vTable = NULL;
- memcpy(&vTable,(void *)pSwap,4);
- g_dwPresent = vTable[8] + 0x5;
- SetJmp((BYTE *)vTable[8],(DWORD)MidPresent,5);
- memcpy(&vTable,(void *)pCon,4);
- g_dwClearRenderTargetView = vTable[50] + 0x5;
- SetJmp((BYTE *)vTable[50],(DWORD)MidClearTargetRenderView,5);
- g_dwDrawIndexed = vTable[12]+0x5;
- SetJmp((BYTE *)vTable[12],(DWORD)MidDrawIndexed,5);
- pSwap->Release();
- pCon->Release();
- pDev->Release();
- while(1)
- {
- Sleep(100);
- if(GetAsyncKeyState(VK_F12))
- break;
- }
- FreeConsole();
- return;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement