Detour Fuction

HeXel

Folding Member
Alguem me podia ajudar a escrever uma Detour Function sem usar a microsoft detours 2.1 ?

Este caso também não funciona para o que vou usar:
Código:
 void *DetourFunc(BYTE *src, const BYTE *dst, const int len)
{
    BYTE *jmp = (BYTE*)malloc(len+5);
    DWORD dwBack;
    VirtualProtect(src, len, PAGE_READWRITE, &dwBack);
    memcpy(jmp, src, len);    
    jmp += len;
    jmp[0] = 0xE9;
    *(DWORD*)(jmp+1) = (DWORD)(src+len - jmp) - 5;
    src[0] = 0x50;
    src[1] = 0x58;
    src[2] = 0xE9;
    *(DWORD*)(&src[3]) = (DWORD)(dst - src) - 7;
    for (int i=7; i<len; i++)  src[i] = 0x90;
    VirtualProtect(src, len, dwBack, &dwBack);
    return (jmp-len);
}
Nem este caso:
Código:
void *DetourFunc(BYTE *src, const BYTE *dst, const int len)
{
    BYTE *jmp = (BYTE*)malloc(len+5);
    DWORD dwback;

    VirtualProtect(src, len, PAGE_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;

    VirtualProtect(src, len, dwback, &dwback);

    return (jmp-len);
}

Obrigado !
 
Última edição:
O que eu queria era mesmo mudar os bytes

por exemplo:

Código:
    src[0] = 0x00;
    src[1] = 0x00;
    src[2] = 0x00;
    src[3] = 0x00;
    src[4] = 0x00;
    *(DWORD*)(&src[3]) = (DWORD)(dst - src) - 7;
    for (int i=7; i<len; i++)  src[i] = 0x90;
    VirtualProtect(src, len, dwBack, &dwBack);
    return (jmp-len);
}

Só que eu não percebo muito de assembly e não o sei fazer ...

Algum expert em linha ?
 
Back
Topo