Detours.
Beide gehen.
DWORD Detour(DWORD DetourSrc,DWORD DetourtVlca,DWORD SizeDetour )
{
#define SizeDetour 5
DWORD DetourPre, dwProtect, i;
if (DetourSrc && DetourtVlca && SizeDetour >= SizeDetour)
{
DetourPre = (DWORD) VirtualAlloc
(
NULL, SizeDetour + SizeDetour,
MEM_COMMIT, PAGE_EXECUTE_READWRITE);
if
(
DetourPre && VirtualProtect( (VOID*)DetourSrc, SizeDetour, PAGE_EXECUTE_READWRITE, &dwProtect))
{
for (i=0; i < SizeDetour; i++)
{
*(BYTE*)( DetourPre + i ) = *(BYTE*)( DetourSrc + i );}
*(BYTE*) (DetourPre + SizeDetour + 0 ) = 0x90;
*(BYTE*) (DetourPre + SizeDetour + 0 ) = 0x90;
*(BYTE*) (DetourPre + SizeDetour + 0 ) = 0xE9;
*(DWORD*)(DetourPre + SizeDetour + 1 ) = ( DetourSrc - DetourPre - SizeDetour );
*(BYTE*) ( DetourSrc + 0 ) = 0x90;
*(BYTE*) ( DetourSrc + 0 ) = 0x90;
*(BYTE*) ( DetourSrc + 0 ) = 0xE9;
*(DWORD*)( DetourSrc + 1 ) = ( DetourtVlca - DetourSrc - SizeDetour );
VirtualProtect( (VOID*)DetourSrc, SizeDetour, dwProtect, &dwProtect );
VirtualProtect( (VOID*)DetourPre, SizeDetour +
SizeDetour, PAGE_EXECUTE_READ, &dwProtect );
return DetourPre;
}
}
return (0);
}
DWORD Detour2(DWORD DetourSrc,DWORD DetourtVlca,DWORD SizeDetour )
{
#define SizeDetour 5
DWORD DetourPre, dwProtect, i;
if (DetourSrc && DetourtVlca && SizeDetour >= SizeDetour)
{
DetourPre = (DWORD) VirtualAlloc
(
NULL, SizeDetour + SizeDetour,
MEM_COMMIT, PAGE_EXECUTE_READWRITE);
if
(
DetourPre && VirtualProtect( (VOID*)DetourSrc, SizeDetour, PAGE_EXECUTE_READWRITE, &dwProtect))
{
for (i=0; i < SizeDetour; i++)
{
*(BYTE*)( DetourPre + i ) = *(BYTE*)( DetourSrc + i );}
*(BYTE*) (DetourPre + SizeDetour + 0 ) = 0xE8;
*(BYTE*) (DetourPre + SizeDetour + 0 ) = 0x90;
*(BYTE*) (DetourPre + SizeDetour + 0 ) = 0xE9;
*(DWORD*)(DetourPre + SizeDetour + 1 ) = ( DetourSrc - DetourPre - SizeDetour );
*(BYTE*) ( DetourSrc + 0 ) = 0xE8;
*(BYTE*) ( DetourSrc + 0 ) = 0x90;
*(BYTE*) ( DetourSrc + 0 ) = 0xE9;
*(DWORD*)( DetourSrc + 1 ) = ( DetourtVlca - DetourSrc - SizeDetour );
VirtualProtect( (VOID*)DetourSrc, SizeDetour, dwProtect, &dwProtect );
VirtualProtect( (VOID*)DetourPre, SizeDetour +
SizeDetour, PAGE_EXECUTE_READ, &dwProtect );
return DetourPre;
}
}
return (0);
}