I think this should work :
Code:
#include <windows.h>
#include <detours.h>
#include <d3d9.h>
#include <d3dx9.h>
#include <cstdio>
#pragma comment (lib,"detours.lib")
#pragma comment (lib,"d3d9.lib")
#pragma comment (lib,"d3dx9.lib")
using namespace std;
typedef HRESULT (WINAPI* EndSceneType)(LPDIRECT3DDEVICE9);
EndSceneType EndScene_orig = NULL;
bool bDataCompare(const BYTE* pData,const BYTE* bMask,const char* szMask)
{
for(;*szMask;++szMask,++pData,++bMask)
if(*szMask == 'x' && *pData != *bMask)
return false;
return (*szMask) == NULL;
}
DWORD dwFindPattern(DWORD dwAddress,DWORD dwLen, BYTE *bMask,char * szMask)
{
for(DWORD i = 0; i < dwLen; i++)
if(bDataCompare((BYTE*)(dwAddress+i),bMask,szMask))
return (DWORD)(dwAddress + i);
return 0;
}
HRESULT WINAPI EndSceneDetour(LPDIRECT3DDEVICE9 pDevice)
{
return EndScene_orig(pDevice);
}
int initHook(void)
{
DWORD *vTable;
HMODULE hMod;
do{
hMod = GetModuleHandleA("d3d9.dll");
Sleep(50);
}while(!hMod);
DWORD addy = dwFindPattern((DWORD)hMod,0x128000,(PBYTE)"\xC7\x06\x00\x00\x00\x00\x89\x86\x00\x00\x00\x00\x89\x86","xx????xx????xx");
if(addy)
{
memcpy(&vTable,(void *)(addy +0x2),4);
EndScene_orig = (EndSceneType)DetourFunction((PBYTE)vTable[42],(PBYTE)EndSceneDetour);
}
return true;
}
BOOL APIENTRY DllMain(HINSTANCE module,DWORD reason,LPVOID reserved)
{
switch(reason)
{
case DLL_PROCESS_ATTACH:
CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)initHook,NULL,NULL,NULL);
break;
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
Also MSDetours 1.5 is required ( i'll upload it as attachment)
And here the two Virus Scans :
VirusTotal - Free Online Virus, Malware and URL Scanner
MSDetours15.zip - Jottis Malwarescanner