Jump to content
Returning Members: Password Reset Required ×

Recommended Posts

Posted

Some thing for learning .... for long time forget mark

 

D3D8 HOOK: 

// Typedef of reset and present

HRESULT __stdcall nReset ( LPDIRECT3DDEVICE8 pDevice, D3DPRESENT_PARAMETERS* pPresentationParameters );
typedef HRESULT ( APIENTRY* Reset_t ) ( LPDIRECT3DDEVICE8 pDevice, D3DPRESENT_PARAMETERS* pPresentationParameters );
Reset_t pReset;


HRESULT __stdcall nPresent ( LPDIRECT3DDEVICE8 pDevice,CONST RECT* pSourceRect,CONST RECT* pDestRect,HWND hDestWindowOverride,CONST RGNDATA* pDirtyRegion );
typedef HRESULT ( APIENTRY* Present_t)( LPDIRECT3DDEVICE8 pDevice,CONST RECT* pSourceRect,CONST RECT* pDestRect,HWND hDestWindowOverride,CONST RGNDATA* pDirtyRegion );
Present_t pPresent;



HRESULT __stdcall nReset ( LPDIRECT3DDEVICE8 pDevice , D3DPRESENT_PARAMETERS* pPresentationParameters )
{
_asm PUSHAD;

Tools.AddLog("Hook Reset\n");

_asm POPAD;

return pReset(pDevice, pPresentationParameters);
}



HRESULT __stdcall nPresent ( LPDIRECT3DDEVICE8 pDevice,CONST RECT* pSourceRect, CONST RECT* pDestRect, HWND hDestWindowOverride, CONST RGNDATA* pDirtyRegion )
{
_asm PUSHAD;

Tools.AddLog("Hook Present\n");

_asm POPAD;

return pPresent (pDevice, pSourceRect, pDestRect, hDestWindowOverride, pDirtyRegion);
}


DWORD_PTR * Hook :: FindDevice ( DWORD Base, DWORD Len )
{
unsigned long i = 0, n = 0;

for( i = 0; i < Len; i++ )
{
if(*(BYTE *)(Base+i+0x00)==0xC7)n++;
if(*(BYTE *)(Base+i+0x01)==0x06)n++;
if(*(BYTE *)(Base+i+0x06)==0x89)n++;
if(*(BYTE *)(Base+i+0x07)==0x86)n++;
if(*(BYTE *)(Base+i+0x0C)==0x89)n++;
if(*(BYTE *)(Base+i+0x0D)==0x86)n++;
if( n == 6 ) return ( DWORD_PTR * ) ( Base + i + 2 ); n = 0;
}
return(0);
}


int __fastcall StaticHook ( void )
{

HMODULE hD3D8Dll;
do{
Tools.AddLog("%s - Loading d3d8.dll->",Tools.AddTime());
hD3D8Dll = GetModuleHandle("d3d8.dll");
Sleep(20);
Tools.AddLog("OK!\n");
} while(!hD3D8Dll);

Tools.AddLog("%s - Enable Device [Metin2]->",Tools.AddTime());
DWORD_PTR * VtablePtr = cHook.FindDevice((DWORD)hD3D8Dll,0x128000);
Tools.AddLog("OK!\n");

if ( VtablePtr == NULL )
{
MessageBox(NULL,"Device Not Found !! Please try again",0,MB_ICONSTOP);
ExitProcess(TRUE);
}

Tools.AddLog("%s - Type Device->",Tools.AddTime());
DWORD_PTR* VTable = 0;
*(DWORD_PTR*)&VTable = *(DWORD_PTR *)VtablePtr;
Tools.AddLog("OK!\n");

Tools.AddLog("%s - Hooking Class->",Tools.AddTime());
pPresent = (Present_t) Tools.bDetourA((PBYTE)VTable[15],(LPBYTE)nPresent,6);
pReset = (Reset_t) Tools.bDetourA((PBYTE)VTable[14],(LPBYTE)nReset,6);
Tools.AddLog("OK!\n");


return(0);
}



bool __stdcall DllMain ( HMODULE hDll, unsigned long Reason , LPVOID LPReserved )
{
DisableThreadLibraryCalls(hDll);
switch ( Reason )
{

case DLL_PROCESS_ATTACH :

CreateThread(0,0,(LPTHREAD_START_ROUTINE)StaticHoo k ,0,0,0);

break;

case DLL_PROCESS_DETACH : break;

}
return (1);
}
d3d9 hook:

// Typedef of reset and present

HRESULT __stdcall nReset ( LPDIRECT3DDEVICE9 pDevice, D3DPRESENT_PARAMETERS* pPresentationParameters );
typedef HRESULT ( APIENTRY* Reset_t ) ( LPDIRECT3DDEVICE8 pDevice, D3DPRESENT_PARAMETERS* pPresentationParameters );
Reset_t pReset;


HRESULT __stdcall nPresent ( LPDIRECT3DDEVICE9 pDevice,CONST RECT* pSourceRect,CONST RECT* pDestRect,HWND hDestWindowOverride,CONST RGNDATA* pDirtyRegion );
typedef HRESULT ( APIENTRY* Present_t)( LPDIRECT3DDEVICE9 pDevice,CONST RECT* pSourceRect,CONST RECT* pDestRect,HWND hDestWindowOverride,CONST RGNDATA* pDirtyRegion );
Present_t pPresent;



HRESULT __stdcall nReset ( LPDIRECT3DDEVICE9 pDevice , D3DPRESENT_PARAMETERS* pPresentationParameters )
{
_asm PUSHAD;

Tools.AddLog("Hook Reset\n");

_asm POPAD;

return pReset(pDevice, pPresentationParameters);
}



HRESULT __stdcall nPresent ( LPDIRECT3DDEVICE9 pDevice,CONST RECT* pSourceRect, CONST RECT* pDestRect, HWND hDestWindowOverride, CONST RGNDATA* pDirtyRegion )
{
_asm PUSHAD;

Tools.AddLog("Hook Present\n");

_asm POPAD;

return pPresent (pDevice, pSourceRect, pDestRect, hDestWindowOverride, pDirtyRegion);
}


DWORD_PTR * Hook :: FindDevice ( DWORD Base, DWORD Len )
{
unsigned long i = 0, n = 0;

for( i = 0; i < Len; i++ )
{
if(*(BYTE *)(Base+i+0x00)==0xC7)n++;
if(*(BYTE *)(Base+i+0x01)==0x06)n++;
if(*(BYTE *)(Base+i+0x06)==0x89)n++;
if(*(BYTE *)(Base+i+0x07)==0x86)n++;
if(*(BYTE *)(Base+i+0x0C)==0x89)n++;
if(*(BYTE *)(Base+i+0x0D)==0x86)n++;
if( n == 6 ) return ( DWORD_PTR * ) ( Base + i + 2 ); n = 0;
}
return(0);
}


int __fastcall StaticHook ( void )
{

HMODULE hD3D9Dll;
do{
Tools.AddLog("%s - Loading d3d9.dll->",Tools.AddTime());
hD3D9Dll = GetModuleHandle("d3d9.dll");
Sleep(20);
Tools.AddLog("OK!\n");
} while(!hD3D9Dll);

Tools.AddLog("%s - Enable Device d3d9->",Tools.AddTime());
DWORD_PTR * VtablePtr = cHook.FindDevice((DWORD)hD3D9Dll,0x128000);
Tools.AddLog("OK!\n");

if ( VtablePtr == NULL )
{
MessageBox(NULL,"Device Not Found !! Please try again",0,MB_ICONSTOP);
ExitProcess(TRUE);
}

Tools.AddLog("%s - Type Device->",Tools.AddTime());
DWORD_PTR* VTable = 0;
*(DWORD_PTR*)&VTable = *(DWORD_PTR *)VtablePtr;
Tools.AddLog("OK!\n");

Tools.AddLog("%s - Hooking Class->",Tools.AddTime());
pPresent = (Present_t) Tools.bDetourA((PBYTE)VTable[17],(LPBYTE)nPresent,6);
pReset = (Reset_t) Tools.bDetourA((PBYTE)VTable[16],(LPBYTE)nReset,6);
Tools.AddLog("OK!\n");


return(0);
}

 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...