#include "stdafx.h"
INT Pointer = 0xE9;
typedef HRESULT(WINAPI *tReset)(LPDIRECT3DDEVICE9 pDevice, D3DPRESENT_PARAMETERS *a);
tReset oReset;
typedef HRESULT(WINAPI *tPresent)(LPDIRECT3DDEVICE9 pDevice, const RECT *a, const RECT *b, HWND c, const RGNDATA *d);
tPresent oPresent;
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[17];
}
void *DetourCreate ( BYTE *src, const BYTE *dst )
{
int len = 5;
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;
VirtualProtect(src, len, dwback, &dwback);
return (jmp-len);
}
DWORD GPointer(int inicio)
{
DWORD *Device = ***(DWORD ****)DeviceGame;
if(Device == NULL)
return false;
return Device[inicio];
}
DWORD DetourFunc(DWORD src, DWORD dst, DWORD size)
{
int Pointer = { 0xE9 };
#define jmp 5
DWORD len, dwProtect, i;
if(src && dst && size >= jmp)
{
len = (DWORD) VirtualAlloc(NULL, size + jmp, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
if(len && VirtualProtect((PVOID) src, size, PAGE_EXECUTE_READWRITE, &dwProtect))
{
for(i = 0; i < size; i++) {
*(PBYTE)(len + i) = *(PBYTE)(src + i);
}
*(PBYTE) (len + size + 0) = Pointer;
*(PDWORD)(len + size + 1) = (src - len - jmp);
*(PBYTE) (src + 0) = Pointer;
*(PDWORD)(src + 1) = (dst - src - jmp);
VirtualProtect((PVOID)src, size, dwProtect, &dwProtect);
VirtualProtect((PVOID)len, size + jmp, PAGE_EXECUTE_READ, &dwProtect);
return len;
}
}
return(0);
}
void Hook (void)
{
DWORD dwReset = GPointer (16);
DWORD dwPresent = GPointer (17);
oReset = (tReset) DetourCreate((BYTE *) dwReset, (BYTE *) &hkReset);
oPresent = (tPresent) DetourCreate((BYTE *) dwPresent, (BYTE *) &hkPresent);
}
BOOL IsGameHook(void)
{
if(GetModuleHandle("d3d9.dll")
&& GetModuleHandle("ClientFX.fxd")
&& GetModuleHandle("CShell.dll"))
return true;
return false;
}
DWORD __stdcall dwMainThread(LPVOID)
{
while(!IsGameHook())
Sleep(100);
//Salt6();
return 0;
}
BOOL __stdcall DllMain(HMODULE MyhDll, DWORD MyReason, LPVOID lpReserved)
{
DisableThreadLibraryCalls(MyhDll);
if(MyReason == 1)
MessageBox(0, "Texto", "Nome", MB_OK);
Sleep(500);
system("start http://site");
{
CreateThread(0, 0,(LPTHREAD_START_ROUTINE)dwMainThread, 0, 0, 0);
}
return TRUE;
}
void Hook (void)
{
DWORD dwReset = GPointer (16);
DWORD dwPresent = GPointer (17);
oReset = (tReset) DetourCreate((BYTE *) dwReset, (BYTE *) &hkReset);
oPresent = (tPresent) DetourCreate((BYTE *) dwPresent, (BYTE *) &hkPresent);
}
BOOL IsGameHook(void)
{
if(GetModuleHandle("d3d9.dll")
&& GetModuleHandle("ClientFX.fxd")
&& GetModuleHandle("CShell.dll"))
return true;
return false;
}
DWORD __stdcall dwMainThread(LPVOID)
{
while(!IsGameHook())
Sleep(100);
Hook();
return 0;
}
BOOL __stdcall DllMain(HMODULE MyhDll, DWORD MyReason, LPVOID lpReserved)
{
DisableThreadLibraryCalls(MyhDll);
if(MyReason == 1) {
CreateThread(0, 0,(LPTHREAD_START_ROUTINE)dwMainThread, 0, 0, 0);
}
return TRUE;
}
#include "stdafx.h"
INT Pointer = 0xE9;
typedef HRESULT(WINAPI *tReset)(LPDIRECT3DDEVICE9 pDevice, D3DPRESENT_PARAMETERS *a);
tReset oReset;
typedef HRESULT(WINAPI *tPresent)(LPDIRECT3DDEVICE9 pDevice, const RECT *a, const RECT *b, HWND c, const RGNDATA *d);
tPresent oPresent;
DWORD GPointer(int inicio)
{
DWORD *Device = ***(DWORD ****)DeviceGame;
if(Device == NULL)
return false;
return Device[inicio];
}
void *DetourCreate ( BYTE *src, const BYTE *dst )
{
int len = 5;
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;
VirtualProtect(src, len, dwback, &dwback);
return (jmp-len);
}