DIP Engine 2 Updated
very usefull thanks
Using the arguments:
Code:
DWORD DIPEngine_1 = 0x4BAAD2; // Update for CF[NA]
DWORD retDIPEngine_1 = ( DIPEngine_1 + 0x8 );
DWORD DIPEngine_2 = 0x4BBD9B; // Update for CF[NA]
DWORD retDIPEngine_2 = 0x4BBDB9; // Update for CF[NA]
VOID WINAPI DrawIndexedPrimitive( LPDIRECT3DDEVICE9 pDevice, INT BaseVertexIndex, UINT MinVertexIndex, UINT NumVertices, UINT startIndex, UINT primCount )
{
pDevice->SetRenderState( D3DRS_ZENABLE, D3DZB_FALSE );
pDevice->DrawIndexedPrimitive( D3DPT_TRIANGLELIST, BaseVertexIndex, MinVertexIndex, NumVertices, startIndex, primCount );
pDevice->SetRenderState( D3DRS_ZENABLE, D3DZB_TRUE );
}
__declspec( naked ) HRESULT WINAPI DIPMidfunction_1( VOID )
{
static LPDIRECT3DDEVICE9 pDevice;
static INT BaseVertexIndex;
static UINT MinVertexIndex;
__asm
{
MOV ECX, DWORD PTR DS:[EAX]
MOV EDX, DWORD PTR DS:[ECX + 0x148]
MOV DWORD PTR DS:[pDevice], EAX;
MOV ECX, DWORD PTR DS:[EBP + 0x18]
MOV DWORD PTR DS:[BaseVertexIndex], ECX
MOV ECX, DWORD PTR DS:[EBP + 0x8]
MOV DWORD PTR DS:[MinVertexIndex], ECX
PUSHAD
}
DrawIndexedPrimitive( pDevice, BaseVertexIndex, MinVertexIndex, NULL, NULL, NULL );
__asm
{
POPAD
JMP DWORD PTR DS:[retDIPEngine_1]
}
}
__declspec( naked ) HRESULT WINAPI DIPMidfunction_2( VOID )
{
static LPDIRECT3DDEVICE9 pDevice;
static UINT NumVertices, startIndex, primCount;
__asm
{
MOV EDX, DWORD PTR SS:[ESP + 0x14]
MOV ECX, DWORD PTR DS:[EAX]
MOV DWORD PTR DS:[primCount], EDX
PUSH EDX
MOV EDX, DWORD PTR SS:[ESP + 0x2C]
MOV DWORD PTR DS:[startIndex], EDX
PUSH EDX
MOV EDX, DWORD PTR SS:[ESP + 0x2C]
MOV DWORD PTR DS:[NumVertices], EDX
PUSH EDX
PUSH 0
PUSH 4
MOV DWORD PTR DS:[pDevice], EAX
PUSH EAX
MOV EAX, DWORD PTR DS:[ECX + 0x148]
CALL EAX
PUSHAD
}
DrawIndexedPrimitive( pDevice, NULL, NULL, NumVertices, startIndex, primCount );
__asm
{
POPAD
JMP DWORD PTR DS:[retDIPEngine_2]
}
}
void *DetourCreate( BYTE *src, const BYTE *dst, const int len )
{
BYTE *jmp = ( BYTE * )malloc( len + 5 );
DWORD dwBack;
VirtualProtect( src, len, PAGE_EXECUTE_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 );
}
DWORD WINAPI DIPHook( PVOID )
{
while( 1 )
{
if( memcmp( (PVOID)DIPEngine_1, (PVOID)(PBYTE)"\x8B\x08", 2 ) == 0 )
{
DetourCreate( (PBYTE)DIPEngine_1, (PBYTE)DIPMidfunction_1, 8 );
}
if( memcmp( (PVOID)DIPEngine_2, (PVOID)(PBYTE)"\x50", 2 ) == 0 )
{
DetourCreate( (PBYTE)DIPEngine_2, (PBYTE)DIPMidfunction_1, 7 );
}
Sleep( 100 );
}
return FALSE;
}
This thread is closed for replies.
Similar Threads
Blackshot Hacks & CheatsGarena Bypass + Cheat Engine + UPDATED HacksDA 60 Combat Arms BR Hack Coding/Source CodeHook DIP Engine
62 CrossFire Hack Coding / Programming / Source CodeHook DIP EngineAV 15 CrossFire Hack Coding / Programming / Source CodeEndScene Engine + DIP Engine[M 11 Combat Arms Europe HacksCombat Arms EU CBL Player Search Engine[UPDATE]
10


I said updated for crossfire. I know the same pattern isn't used for crossfire.![=]](/forum/images/emotions/=].gif)
