Desvio Base Combined v2

Posts 1–15 of 15 · Page 1 of 1
Desvio Base Combined v2
Metodo de Desvio que eu uso é esse na minha Base Combined Original espero que ajude se virem para fazer que funcione nao vou ajudar a por na base

int AsmDet(BYTE *src, int minlen)
{
int i,len;

for (len=0; len<minlen; len+=i)
{
i=mlde32((void *)src);
if (i<=0) return 0;
src+=i;
}
return len;
}

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);
}

DWORD E9Detours1( 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);
}

void *E9Detours2(BYTE *src, const BYTE *dst, int minlen)
{
BYTE *jmp, *org;
DWORD dwBack;
int len;


len=AsmDet(src,(minlen<6)?6:minlen);
if (len==0 && minlen>=6) len=minlen;
if (len==0) return 0;

org=jmp = (BYTE*)malloc(len+5+1);
jmp[0]=len;
jmp++;

VirtualProtect(src, len, PAGE_EXECUTE_READWRITE, &dwBack);
memcpy(jmp, src, len);
jmp += len;
jmp[0] = 0xE9;
*(DWORD*)(jmp+1) = (DWORD)(src+len - jmp) - 5;

src[0] = 0x68;
*(DWORD*)(src+1) = (DWORD)(dst);
src[5] = 0xc3;
for (int i=6; i<len; i++) src[i] = 0x90;
VirtualProtect(src, len, dwBack, &dwBack);

return &org[1];
}

DWORD B8Detours( DWORD SrcVA, DWORD DstVA, DWORD Size )
{
#define SIZEOF_MOVEAX_JMPEAX 12

DWORD DetourVA, dwProtect, i;

if ( SrcVA && DstVA && Size >= SIZEOF_MOVEAX_JMPEAX )
{
DetourVA = (DWORD) VirtualAlloc(
NULL, Size + SIZEOF_MOVEAX_JMPEAX,
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 ) = 0xB8;
*(DWORD*)( DetourVA + Size + 1 ) = ( SrcVA + Size );
*(WORD*)( DetourVA + Size + 5 ) = 0xE0FF;

*(BYTE*)( SrcVA + 0 ) = 0xB8;
*(DWORD*)( SrcVA + 1 ) = ( DstVA );
*(WORD*)( SrcVA + 5 ) = 0xE0FF;

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

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

return DetourVA;
}
}
return(0);
}



void UnlinkModule(HINSTANCE hDll)
{
DWORD dwPEB_LDR_DATA = 0;
_asm
{
pushad;
pushfd;
mov eax, fs:[30h]
mov eax, [eax+0Ch]
mov dwPEB_LDR_DATA, eax

InLoadOrderModuleList:
mov esi, [eax+0Ch]
mov edx, [eax+10h]

LoopInLoadOrderModuleList:
lodsd
mov esi, eax
mov ecx, [eax+18h]
cmp ecx, hDll
jne SkipA
mov ebx, [eax]
mov ecx, [eax+4]
mov [ecx], ebx
mov [ebx+4], ecx
jmp InMemoryOrderModuleList

SkipA:
cmp edx, esi
jne LoopInLoadOrderModuleList

InMemoryOrderModuleList:
mov eax, dwPEB_LDR_DATA
mov esi, [eax+14h]
mov edx, [eax+18h]

LoopInMemoryOrderModuleList:
lodsd
mov esi, eax
mov ecx, [eax+10h]
cmp ecx, hDll
jne SkipB
mov ebx, [eax]
mov ecx, [eax+4]
mov [ecx], ebx
mov [ebx+4], ecx
jmp InInitializationOrderModuleList

SkipB:
cmp edx, esi
jne LoopInMemoryOrderModuleList

InInitializationOrderModuleList:
mov eax, dwPEB_LDR_DATA
mov esi, [eax+1Ch]
mov edx, [eax+20h]

LoopInInitializationOrderModuleList:
lodsd
mov esi, eax
mov ecx, [eax+08h]
cmp ecx, hDll
jne SkipC
mov ebx, [eax]
mov ecx, [eax+4]
mov [ecx], ebx
mov [ebx+4], ecx
jmp Finished

SkipC:
cmp edx, esi
jne LoopInInitializationOrderModuleList

Finished:
popfd;
popad;
}
}


Credito ?

@Black Diamond
Quote Originally Posted by Black Diamond View Post
Metodo de Desvio que eu uso é esse na minha Base Combined Original espero que ajude se virem para fazer que funcione nao vou ajudar a por na base

int AsmDet(BYTE *src, int minlen)
{
int i,len;

for (len=0; len<minlen; len+=i)
{
i=mlde32((void *)src);
if (i<=0) return 0;
src+=i;
}
return len;
}

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);
}

DWORD E9Detours1( 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);
}

void *E9Detours2(BYTE *src, const BYTE *dst, int minlen)
{
BYTE *jmp, *org;
DWORD dwBack;
int len;


len=AsmDet(src,(minlen<6)?6:minlen);
if (len==0 && minlen>=6) len=minlen;
if (len==0) return 0;

org=jmp = (BYTE*)malloc(len+5+1);
jmp[0]=len;
jmp++;

VirtualProtect(src, len, PAGE_EXECUTE_READWRITE, &dwBack);
memcpy(jmp, src, len);
jmp += len;
jmp[0] = 0xE9;
*(DWORD*)(jmp+1) = (DWORD)(src+len - jmp) - 5;

src[0] = 0x68;
*(DWORD*)(src+1) = (DWORD)(dst);
src[5] = 0xc3;
for (int i=6; i<len; i++) src[i] = 0x90;
VirtualProtect(src, len, dwBack, &dwBack);

return &org[1];
}

DWORD B8Detours( DWORD SrcVA, DWORD DstVA, DWORD Size )
{
#define SIZEOF_MOVEAX_JMPEAX 12

DWORD DetourVA, dwProtect, i;

if ( SrcVA && DstVA && Size >= SIZEOF_MOVEAX_JMPEAX )
{
DetourVA = (DWORD) VirtualAlloc(
NULL, Size + SIZEOF_MOVEAX_JMPEAX,
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 ) = 0xB8;
*(DWORD*)( DetourVA + Size + 1 ) = ( SrcVA + Size );
*(WORD*)( DetourVA + Size + 5 ) = 0xE0FF;

*(BYTE*)( SrcVA + 0 ) = 0xB8;
*(DWORD*)( SrcVA + 1 ) = ( DstVA );
*(WORD*)( SrcVA + 5 ) = 0xE0FF;

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

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

return DetourVA;
}
}
return(0);
}



void UnlinkModule(HINSTANCE hDll)
{
DWORD dwPEB_LDR_DATA = 0;
_asm
{
pushad;
pushfd;
mov eax, fs:[30h]
mov eax, [eax+0Ch]
mov dwPEB_LDR_DATA, eax

InLoadOrderModuleList:
mov esi, [eax+0Ch]
mov edx, [eax+10h]

LoopInLoadOrderModuleList:
lodsd
mov esi, eax
mov ecx, [eax+18h]
cmp ecx, hDll
jne SkipA
mov ebx, [eax]
mov ecx, [eax+4]
mov [ecx], ebx
mov [ebx+4], ecx
jmp InMemoryOrderModuleList

SkipA:
cmp edx, esi
jne LoopInLoadOrderModuleList

InMemoryOrderModuleList:
mov eax, dwPEB_LDR_DATA
mov esi, [eax+14h]
mov edx, [eax+18h]

LoopInMemoryOrderModuleList:
lodsd
mov esi, eax
mov ecx, [eax+10h]
cmp ecx, hDll
jne SkipB
mov ebx, [eax]
mov ecx, [eax+4]
mov [ecx], ebx
mov [ebx+4], ecx
jmp InInitializationOrderModuleList

SkipB:
cmp edx, esi
jne LoopInMemoryOrderModuleList

InInitializationOrderModuleList:
mov eax, dwPEB_LDR_DATA
mov esi, [eax+1Ch]
mov edx, [eax+20h]

LoopInInitializationOrderModuleList:
lodsd
mov esi, eax
mov ecx, [eax+08h]
cmp ecx, hDll
jne SkipC
mov ebx, [eax]
mov ecx, [eax+4]
mov [ecx], ebx
mov [ebx+4], ecx
jmp Finished

SkipC:
cmp edx, esi
jne LoopInInitializationOrderModuleList

Finished:
popfd;
popad;
}
}


Credito ?

@Black Diamond
Base Combined? Qual é essa?
Ta com erros?
Ñ esta com erro a detours esta completa




Detours.h

extern "C" INT __cdecl mlde32(VOID *codeptr);

int AsmDet(BYTE *src, int minlen);
void *DetourFunc(BYTE *src, const BYTE *dst, const int len);
DWORD E9Detours1( DWORD SrcVA, DWORD DstVA, DWORD Size );
void *E9Detours2(BYTE *src, const BYTE *dst, int minlen = 0);
DWORD B8Detours( DWORD SrcVA, DWORD DstVA, DWORD Size );
void UnlinkModule(HINSTANCE hDll);
Valeeu Black Diamond.
Se é foda.
Agora vou tentar fazer o meu funcionar.
Muito bom @Black Diamond .
Vejo que vai bem
Verei se posto uma release se eu tiver tempo meu caro (;
boa sorte ai ...
Quote Originally Posted by Black Diamond View Post
Metodo de Desvio que eu uso é esse na minha Base Combined Original espero que ajude se virem para fazer que funcione nao vou ajudar a por na base

int AsmDet(BYTE *src, int minlen)

void *DetourFunc(BYTE *src, const BYTE *dst, const int len)

DWORD E9Detours1(DWORD SrcVA, DWORD DstVA, DWORD Size)

void *E9Detours2(BYTE *src, const BYTE *dst, int minlen)

DWORD B8Detours(DWORD SrcVA, DWORD DstVA, DWORD Size)

void UnlinkModule(HINSTANCE hDll)


Credito ?

@Black Diamond
@Black Diamond, porque no final de tudo tem...

Credito ?

@Black Diamond

Se quiser, eu digo quem fez todas essas funções.
Quote Originally Posted by Cachaa2 View Post
@Black Diamond, porque no final de tudo tem...

Credito ?

@Black Diamond

Se quiser, eu digo quem fez todas essas funções.

leecharada !!!!
vai seu flod nao tinha credito aonde eu achei esse desvio se tivese eu colocava
so postei porque ta funcionado

vc nao virao que eu puiz ponto de ? seu lixo
Good job irei testar.
Good Job. '-' funciona perfeitamente.
Posts 1–15 of 15 · Page 1 of 1
This thread is closed for replies.

Similar Threads

Tags for this Thread

None

Need help?