DIP Engine 2 Updated

Posts 16–24 of 24 · Page 2 of 2
Quote Originally Posted by Astr3Lune View Post
DWORD WINAPI StartRoutine( LPVOID )
{
while( TRUE )
{
if( memcmp( ( VOID * )DIPEngine, ( VOID * )( PBYTE )"\x8B\x07", 2 ) == 0 ) <=== Right?
{
Sleep( 100 );
DetourCreate( ( PBYTE )DIPEngine, ( PBYTE )DIPEngineMidfunction, 7 ); <== Right?
}
Sleep( 50 );
}

return 0;
}
Code:
if( memcmp( ( VOID * )DIPEngine, ( VOID * )( PBYTE )"\x50", 1 ) == 0 )
Quote Originally Posted by luizimloko View Post


Code:
if( memcmp( ( VOID * )DIPEngine, ( VOID * )( PBYTE )"\x50", 1 ) == 0 )


this is worked?

i'm not sure.
but if worked very thanks
Quote Originally Posted by luizimloko View Post


Code:
if( memcmp( ( VOID * )DIPEngine, ( VOID * )( PBYTE )"\x50", 1 ) == 0 )
not work for Crossfire indonesia
Quote Originally Posted by luizimloko View Post


you think that same pattern scan for CA works on CF ?
I said updated for crossfire. I know the same pattern isn't used for crossfire.
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;
}
Quote Originally Posted by luizimloko View Post
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;
}
working ??
Quote Originally Posted by sobasoba13 View Post
working ??
yes, but the xtrap detects
Quote Originally Posted by luizimloko View Post


yes, but the xtrap detects
Good job, unfortunately detected
Posts 16–24 of 24 · Page 2 of 2
This thread is closed for replies.

Similar Threads

Tags for this Thread

None

Talk with us