Benvenuto! Per postare e godere delle funzionalità del forum registrati, occorrono pochi secondi ed è gratis!

Detours

maurow
Messaggi: 6,041
Discussioni: 2,066
Registrato: 03-2011
Mix: 8,107
DWORD E9Detours( DWORD SrcVA, DWORD DstVA, DWORD Size )
{
DWORD DetourVA, dwProtect, i;

#define SIZEOF_JMP_REL 5

if ( SrcVA && DstVA && Size >= SIZEOF_JMP_REL )
{
DetourVA = (DWORD) VirtualAlloc(
NULL, Size + SIZEOF_JMP_REL,
MEM_COMMIT, PAGE_EXECUTE_READWRITE );

if ( DetourVA && VirtualProtect( (VOID*)SrcVA, Size, PAGE_EXECUTE_READWRITE, &dwProtect ) )
{
for ( i=0; i < Size; i++ ) {
*(BYTE*)( DetourVA + i ) = *(BYTE*)( SrcVA + i );
}

*(BYTE*)( DetourVA + Size + 0 ) = 0xE9;
*(DWORD*)( DetourVA + Size + 1 ) = ( SrcVA - DetourVA - SIZEOF_JMP_REL );

*(BYTE*)( SrcVA + 0 ) = 0xE9;
*(DWORD*)( SrcVA + 1 ) = ( DstVA - SrcVA - SIZEOF_JMP_REL );

VirtualProtect( (VOID*)SrcVA, Size, dwProtect, &dwProtect );

VirtualProtect( (VOID*)DetourVA, Size +
SIZEOF_JMP_REL, PAGE_EXECUTE_READ, &dwProtect );

return DetourVA;
}
}
return (0);
}

crediti : ExoduS


La libertà non si insegna, è una scelta individuale.
25/12/2012, 22:36
#1
Cerca


Messaggi in questa discussione
Detours - da MAUROW - 25/12/2012, 22:36
[Nessun oggetto] - da Pocciox - 25/12/2012, 23:56
[Nessun oggetto] - da digger - 26/12/2012, 1:10
[Nessun oggetto] - da Pocciox - 26/12/2012, 19:33
[Nessun oggetto] - da digger - 26/12/2012, 19:36



Utenti che stanno guardando questa discussione: 1 Ospite(i)