atualizar detours
ae me ajudem essa aki e minha detours.cpp axo q ela ta desatualizada algem pod me ajuda a aualiza so falta isso eu axo =_
#include "Files.h"
#include "detours.h"
INT Pointer [] = {0x90, 0x68, 0xE9, 0xc3};
INT DetourASMlen(BYTE *src, INT minlen)
{
_asm {
PUSHAD;
NOP;
MOV EAX, 1;
NOP;
POPAD;
}
INT i, len;
_asm {
PUSHAD;
NOP;
MOV EAX, 1;
NOP;
POPAD;
}
for(len = 0; len < minlen; len += i) {
i = mlde32((VOID *)src);
if(i <= 0)
return 0;
src += i;
}
_asm {
PUSHAD;
NOP;
MOV EAX, 1;
NOP;
POPAD;
}
return len;
}
VOID *DetourCreate(BYTE *src, CONST BYTE *dst, INT minlen)
{
_asm {
PUSHAD;
NOP;
MOV EAX, 1;
NOP;
POPAD;
}
BYTE *jmp, *org;
DWORD dwBack;
INT len;
_asm {
PUSHAD;
NOP;
MOV EAX, 1;
NOP;
POPAD;
}
len = DetourASMlen(src, (minlen < 6)?6:minlen);
if(len == 0 && minlen >= 6)
len = minlen;
if(len == 0)
return 0;
_asm {
PUSHAD;
NOP;
MOV EAX, 1;
NOP;
POPAD;
}
org = jmp = (BYTE *)malloc(len + 5 + 1);
jmp[0] = len;
jmp++;
_asm {
PUSHAD;
NOP;
MOV EAX, 1;
NOP;
POPAD;
}
VirtualProtect(src, len, PAGE_EXECUTE_READWRITE, &dwBack);
memcpy(jmp, src, len);
jmp += len;
jmp[0] = Pointer[2];
*(DWORD *)(jmp + 1)=(DWORD)(src + len - jmp) - 5;
_asm {
PUSHAD;
NOP;
MOV EAX, 1;
NOP;
POPAD;
}
src[0] = Pointer[1];
*(DWORD *)(src + 1) = (DWORD)(dst);
src[5] = Pointer[
3];
for(INT i = 6; i < len; i++)
src[i] = Pointer[0];
VirtualProtect(src, len, dwBack, &dwBack);
_asm {
PUSHAD;
NOP;
MOV EAX, 1;
NOP;
POPAD;
}
return &org[1];
}
VOID DetourRemove(BYTE *src, BYTE *restore, INT len)
{
DWORD dwBack;
len = *(BYTE *)(restore - 1);
VirtualProtect(src, len, PAGE_EXECUTE_READWRITE, &dwBack);
memcpy(src, restore, len);
restore[0] = Pointer[2];
*(DWORD *)(restore + 1) = (DWORD)(src - restore) - 5;
VirtualProtect(src, len, dwBack, &dwBack);
}
#include "Files.h"
#include "detours.h"
INT Pointer [] = {0x90, 0x68, 0xE9, 0xc3};
INT DetourASMlen(BYTE *src, INT minlen)
{
_asm {
PUSHAD;
NOP;
MOV EAX, 1;
NOP;
POPAD;
}
INT i, len;
_asm {
PUSHAD;
NOP;
MOV EAX, 1;
NOP;
POPAD;
}
for(len = 0; len < minlen; len += i) {
i = mlde32((VOID *)src);
if(i <= 0)
return 0;
src += i;
}
_asm {
PUSHAD;
NOP;
MOV EAX, 1;
NOP;
POPAD;
}
return len;
}
VOID *DetourCreate(BYTE *src, CONST BYTE *dst, INT minlen)
{
_asm {
PUSHAD;
NOP;
MOV EAX, 1;
NOP;
POPAD;
}
BYTE *jmp, *org;
DWORD dwBack;
INT len;
_asm {
PUSHAD;
NOP;
MOV EAX, 1;
NOP;
POPAD;
}
len = DetourASMlen(src, (minlen < 6)?6:minlen);
if(len == 0 && minlen >= 6)
len = minlen;
if(len == 0)
return 0;
_asm {
PUSHAD;
NOP;
MOV EAX, 1;
NOP;
POPAD;
}
org = jmp = (BYTE *)malloc(len + 5 + 1);
jmp[0] = len;
jmp++;
_asm {
PUSHAD;
NOP;
MOV EAX, 1;
NOP;
POPAD;
}
VirtualProtect(src, len, PAGE_EXECUTE_READWRITE, &dwBack);
memcpy(jmp, src, len);
jmp += len;
jmp[0] = Pointer[2];
*(DWORD *)(jmp + 1)=(DWORD)(src + len - jmp) - 5;
_asm {
PUSHAD;
NOP;
MOV EAX, 1;
NOP;
POPAD;
}
src[0] = Pointer[1];
*(DWORD *)(src + 1) = (DWORD)(dst);
src[5] = Pointer[
3];
for(INT i = 6; i < len; i++)
src[i] = Pointer[0];
VirtualProtect(src, len, dwBack, &dwBack);
_asm {
PUSHAD;
NOP;
MOV EAX, 1;
NOP;
POPAD;
}
return &org[1];
}
VOID DetourRemove(BYTE *src, BYTE *restore, INT len)
{
DWORD dwBack;
len = *(BYTE *)(restore - 1);
VirtualProtect(src, len, PAGE_EXECUTE_READWRITE, &dwBack);
memcpy(src, restore, len);
restore[0] = Pointer[2];
*(DWORD *)(restore + 1) = (DWORD)(src - restore) - 5;
VirtualProtect(src, len, dwBack, &dwBack);
}




