Dxt-Code[V]
09-21-2011, 10:08 PM
yes... for realz...
void CTools::DetourFunction( BYTE* pbTarget, DWORD dwNewFunction, SIZE_T dwSize )
{
DWORD dwOldProtection = NULL;
SIZE_T iRequiredSize = 7;
VirtualProtect( pbTarget, dwSize, PAGE_READWRITE, &dwOldProtection );
*reinterpret_cast< BYTE* >( pbTarget ) = 0xB8; // asm: mov eax,
*reinterpret_cast< DWORD* >( pbTarget + 1 ) = dwNewFunction; // asm: 0x12345678;
*reinterpret_cast< BYTE* >( pbTarget + 5 ) = 0xFF; // asm: jmp
*reinterpret_cast< BYTE* >( pbTarget + 6 ) = 0xE0; // asm: eax;
for( int i = iRequiredSize; i < dwSize; i++ )
*reinterpret_cast< BYTE* >( pbTarget + i ) = 0x90; // asm: nop
VirtualProtect( pbTarget, dwSize, dwOldProtection, NULL );
}
Some more...
SIZE_T iRequiredSize = 7;
*reinterpret_cast< BYTE* >( pbTarget ) = 0xB8; // asm: mov eax,
*reinterpret_cast< DWORD* >( pbTarget + 1 ) = dwNewFunction; // asm: 0x12345678;
*reinterpret_cast< BYTE* >( pbTarget + 5 ) = 0x50; // asm: push eax;
*reinterpret_cast< BYTE* >( pbTarget + 6 ) = 0xC3; // asm: retn;
and some moooarrrrr... this one's detected i think... depends on game.
SIZE_T iRequiredSize = 6;
*reinterpret_cast< BYTE* >( pbTarget ) = 0x68; // asm: push
*reinterpret_cast< DWORD* >( pbTarget + 1 ) = dwNewFunction; // asm: 0x12345678;
*reinterpret_cast< BYTE* >( pbTarget + 5 ) = 0xC3; // asm: retn;
This is pretty... basic if you get the concept... :\
void CTools::DetourFunction( BYTE* pbTarget, DWORD dwNewFunction, SIZE_T dwSize )
{
DWORD dwOldProtection = NULL;
SIZE_T iRequiredSize = 7;
VirtualProtect( pbTarget, dwSize, PAGE_READWRITE, &dwOldProtection );
*reinterpret_cast< BYTE* >( pbTarget ) = 0xB8; // asm: mov eax,
*reinterpret_cast< DWORD* >( pbTarget + 1 ) = dwNewFunction; // asm: 0x12345678;
*reinterpret_cast< BYTE* >( pbTarget + 5 ) = 0xFF; // asm: jmp
*reinterpret_cast< BYTE* >( pbTarget + 6 ) = 0xE0; // asm: eax;
for( int i = iRequiredSize; i < dwSize; i++ )
*reinterpret_cast< BYTE* >( pbTarget + i ) = 0x90; // asm: nop
VirtualProtect( pbTarget, dwSize, dwOldProtection, NULL );
}
Some more...
SIZE_T iRequiredSize = 7;
*reinterpret_cast< BYTE* >( pbTarget ) = 0xB8; // asm: mov eax,
*reinterpret_cast< DWORD* >( pbTarget + 1 ) = dwNewFunction; // asm: 0x12345678;
*reinterpret_cast< BYTE* >( pbTarget + 5 ) = 0x50; // asm: push eax;
*reinterpret_cast< BYTE* >( pbTarget + 6 ) = 0xC3; // asm: retn;
and some moooarrrrr... this one's detected i think... depends on game.
SIZE_T iRequiredSize = 6;
*reinterpret_cast< BYTE* >( pbTarget ) = 0x68; // asm: push
*reinterpret_cast< DWORD* >( pbTarget + 1 ) = dwNewFunction; // asm: 0x12345678;
*reinterpret_cast< BYTE* >( pbTarget + 5 ) = 0xC3; // asm: retn;
This is pretty... basic if you get the concept... :\