Hook DIP Engine

Ir em baixo

Hook DIP Engine

Mensagem por RonaldoWynnek em Sab Out 06, 2012 9:58 am

Código:
#include
#include
#include
 
#pragma comment(lib, "d3d9.lib")
#pragma comment(lib, "d3dx9.lib")

// NUMPAD1 => Types of chams.
// NUMPAD2 => Types of colors for front and back.
// LEFT and Right => Change colors.
 
// Change here the version of your Combat Arms => CABR or CAEU or CANA or CAKR
#define CABR
 
// Actual Address: 06/03/2012
 
#ifdef CABR
// Combat Arms Brazil
#define GameStatus      0x377F0DDC
#define DIPEngine      0x006A086A
#endif
 
#ifdef CAEU
// Combat Arms Europe
#define GameStatus      0x37806FC4
#define DIPEngine      0x006A3E0A
#endif
 
#ifdef CANA
// Combat Arms North American
#define GameStatus      0x37806FC4
#define DIPEngine      0x006A3E1A
#endif
 
#ifdef CAKR
// Combat Arms Korean
#define GameStatus      0x3774C6F0
#define DIPEngine      0x006A358A
#endif
 
DWORD retDIPEngine = (DIPEngine  0x8);
 
INT chams;
INT color[2];
INT indexcolor;
 
#define Red    D3DCOLOR_ARGB( 255, 255, 000, 000 )
#define Green  D3DCOLOR_ARGB( 255, 000, 255, 000 )
#define Blue    D3DCOLOR_ARGB( 255, 000, 000, 255 )
#define Black  D3DCOLOR_ARGB( 255, 000, 000, 000 )
 
VOID SetLightChams(LPDIRECT3DDEVICE9 pDevice, FLOAT A, FLOAT R, FLOAT G, FLOAT B)
{
    D3DMATERIAL9 pMaterial;
    ZeroMemory(&pMaterial, sizeof(D3DMATERIAL9));
    pDevice->SetRenderState(D3DRS_LIGHTING, TRUE);
    //Ambient
    pMaterial.Ambient.a = (A/255);
    pMaterial.Ambient.r = (R/255);
    pMaterial.Ambient.g = (G/255);
    pMaterial.Ambient.b = (B/255);
    //Diffuse
    pMaterial.Diffuse.a = (A/255);
    pMaterial.Diffuse.r = (R/255);
    pMaterial.Diffuse.g = (G/255);
    pMaterial.Diffuse.b = (B/255);
    //Specular
    pMaterial.Specular.a = (A/255);
    pMaterial.Specular.r = (R/255);
    pMaterial.Specular.g = (G/255);
    pMaterial.Specular.b = (B/255);
    pDevice->SetMaterial(&pMaterial);
}
 
__declspec( naked ) HRESULT WINAPI DIPMidfunction( )
{
    static LPDIRECT3DDEVICE9 pDevice;
    static INT BaseVertexIndex;
    static UINT MinVertexIndex, NumVertices, startIndex, primCount;
 
    __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
        MOV ECX, DWORD PTR DS:[EBP  0x10]
        MOV DWORD PTR DS:[NumVertices], ECX
        MOV ECX, DWORD PTR DS:[EBP  0xC]
        MOV DWORD PTR DS:[startIndex], ECX
        MOV ECX, DWORD PTR DS:[EBP  0x14]
        MOV DWORD PTR DS:[primCount], ECX
        PUSHAD
    }
 
    if( chams ) {
 
        pDevice->SetRenderState( D3DRS_ZENABLE, D3DZB_FALSE );
 
        if( chams == 1 ) {
            if( color[0] == 1 ) SetLightChams( pDevice, 255, 255, 000, 000 );
            if( color[0] == 2 ) SetLightChams( pDevice, 255, 000, 255, 000 );
            if( color[0] == 3 ) SetLightChams( pDevice, 255, 000, 000, 255 );
            if( color[0] == 4 ) SetLightChams( pDevice, 255, 000, 000, 000 );
        }
        if( chams == 2 ) {
            pDevice->SetRenderState( D3DRS_LIGHTING, D3DZB_TRUE );
            pDevice->SetRenderState( D3DRS_SHADEMODE, D3DSHADE_FLAT );
            pDevice->SetRenderState( D3DRS_FOGENABLE, D3DZB_FALSE );
            if( color[0] == 1 ) pDevice->SetRenderState( D3DRS_AMBIENT, Red  );
            if( color[0] == 2 ) pDevice->SetRenderState( D3DRS_AMBIENT, Green );
            if( color[0] == 3 ) pDevice->SetRenderState( D3DRS_AMBIENT, Blue  );
            if( color[0] == 4 ) pDevice->SetRenderState( D3DRS_AMBIENT, Black );
        }
        if( chams > 2 ) {
            pDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, D3DZB_TRUE );
            pDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVDESTCOLOR );
            if( chams == 3 ) pDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_INVSRCCOLOR );
            if( chams == 4 ) pDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_INVSRCALPHA );
        }
 
        pDevice->DrawIndexedPrimitive( D3DPT_TRIANGLELIST, BaseVertexIndex, MinVertexIndex, NumVertices, startIndex, primCount );
 
        pDevice->SetRenderState( D3DRS_ZENABLE, D3DZB_TRUE );
 
        if( chams == 1 ) {
            if( color[1] == 1 ) SetLightChams( pDevice, 255, 255, 000, 000 );
            if( color[1] == 2 ) SetLightChams( pDevice, 255, 000, 255, 000 );
            if( color[1] == 3 ) SetLightChams( pDevice, 255, 000, 000, 255 );
            if( color[1] == 4 ) SetLightChams( pDevice, 255, 000, 000, 000 );
        }
        if( chams == 2 ) {
            if( color[1] == 1 ) pDevice->SetRenderState( D3DRS_AMBIENT, Red  );
            if( color[1] == 2 ) pDevice->SetRenderState( D3DRS_AMBIENT, Green );
            if( color[1] == 3 ) pDevice->SetRenderState( D3DRS_AMBIENT, Blue  );
            if( color[1] == 4 ) pDevice->SetRenderState( D3DRS_AMBIENT, Black );
        }
        if( chams > 2 ) {
            pDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, D3DZB_TRUE );
            pDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVDESTCOLOR );
            if( chams == 3 ) pDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_INVSRCCOLOR );
            if( chams == 4 ) pDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_INVSRCALPHA );
        }
    } else {
        pDevice->SetRenderState( D3DRS_ZENABLE, D3DZB_TRUE );
    }
 
    __asm
    {
        POPAD
        JMP retDIPEngine
    }
}
 
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 );
}
 
VOID Hook( VOID )
{
    while( TRUE ) {
        if( *(BYTE *)GameStatus == 1 ) {
 
            DetourCreate( (PBYTE)DIPEngine, (PBYTE)DIPMidfunction, 8 );
 
            if( GetAsyncKeyState(VK_NUMPAD1)&1 ) {
                chams  ;
                if(chams > 4) chams = 0;
            }
 
            if( GetAsyncKeyState(VK_NUMPAD2)&1 ) indexcolor = !indexcolor;
 
            if( GetAsyncKeyState(VK_LEFT)&1 ) {
                color[indexcolor]--;
                if(color[indexcolor] < 0) color[indexcolor] = 4;
            }
 
            if( GetAsyncKeyState(VK_RIGHT)&1 ) {
                color[indexcolor]  ;
                if(color[indexcolor] > 4) color[indexcolor] = 0;
            }
        }
        else
            memcpy( (VOID *)DIPEngine, (CONST VOID *)(PBYTE)"\x8B\x08\x8B\x91\x48\x01\x00\x00", 8 );
 
        Sleep(100);
    }
}
 
BOOL CheckModules( VOID )
{
    if( GetModuleHandleA("d3d9.dll") != NULL
        && GetModuleHandleA("CShell.dll") != NULL
        && GetModuleHandleA("ClientFX.fxd") != NULL )
        return TRUE;
 
    return FALSE;
}
 
DWORD WINAPI StartRoutine( LPVOID )
{
    while( !CheckModules( ) )
        Sleep(100);
 
    Hook( );
 
    return 0;
}
 
BOOL WINAPI DllMain( HMODULE hDll, DWORD dwReason, LPVOID lpReserved )
{
    DisableThreadLibraryCalls( hDll );
 
    if( dwReason == DLL_PROCESS_ATTACH ) {
        CreateThread( NULL, NULL, (LPTHREAD_START_ROUTINE)StartRoutine, NULL, NULL, NULL );
    }
 
    return TRUE;
}


Créditos

Detour -> Azorbix
Types of chams -> Pheron or Phenomand
Midfunction -> Shadow_ && Gellin
WE11ington
E outros não citados aqui.



Spoiler:




Create by:.gta
avatar
RonaldoWynnek
Combat Arms
Combat Arms

Turner Cheats Evolution

Jogo : Combat Arms
Mensagens : 124
Cash : 2445
Obrigado : 23
Data de inscrição : 30/08/2012
Idade : 20
Conquistas : Nenhum troféu

Ver perfil do usuário http://turnercheats.forumbrasil.net/

Voltar ao Topo Ir em baixo

Voltar ao Topo


 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum