[ASM-ABUSE] Obtener dirección del PEB sin advertir a los AVs

Iniciado por Karcrack, Junio 16, 2013, 06:12:07 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Junio 16, 2013, 06:12:07 PM Ultima modificación: Julio 10, 2013, 10:27:22 AM por Expermicid
Debido a que la forma habitual de obtener el puntero del PEB estaba haciendo que me saltasen los AVs he diseñado otra que se los salta :-* :-*

Forma habitual:
Código: asm
        xor eax, eax
        mov eax, [FS:eax+$30]


Forma que he ideado:
Código: asm
        push $30
        pop  esi
        db $64
        lodsd

(Ambas establecen EAX al puntero del PEB)
Utiliza un byte menos :P :P


Añado más métodos:


Forma ofuscada:
Código: asm
   push $30     ;v
   pop  ebx     ;>EBX = 0x30
   mov  cl, 4   ;>CL  = 4

@@:mov  al, cl  ;>AL  = CL        <<<
   db   $64     ;v                  ^
   xlatb        ;>AL  = FS:[EBX+AL] ^
   shl  eax, 8  ;>EAX <<= 8         ^
   loop @B      ;>>>>>>>>>>>>>>>>>>>^ (--ECX>0)?

Forma muy similar pero con opcodes diferentes :D (Se podría variar con muchos otros movs condicionales):
Código: asm
   xor   eax, eax
   cmovz eax, [FS:eax+$30]


Saludos :D
I code for $$$.

(PGP ID 0xCC050E77)
ASM, C, C++, VB6... skilled [malware] developer

Muy buena karcrack.

Se podria hacer tambien usando LEA?

Saludos

No creo ya que lea no lee de memoria nada :-\ Igualmente he visto un par de instrucciones que pueden ser interesantes si tengo tiempo les echare un vistazo y actualizo :D
I code for $$$.

(PGP ID 0xCC050E77)
ASM, C, C++, VB6... skilled [malware] developer


No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Otra sencillita

Código: ASM
push dword[fs:0x30]
pop eax


Demasiado explícito. El concepto es evitar el [fs:0x30].

Uno usando FPU ;D
Código: asm
        push $30
        pop  eax
        push eax
        fld  dword[FS:eax]
        fstp dword[esp]
        pop  eax
        ret     
I code for $$$.

(PGP ID 0xCC050E77)
ASM, C, C++, VB6... skilled [malware] developer

yo lo decia por que si ves la descripcion de "lea", dice que hace como si accediera a memoria, pero te devuelve la direccion a la que accede. por lo tanto segun esa definicion cabe la duda de si hara tambien la traduccion de los segmentos.

Saludos

Sí, yo miré la definición de la instrucción en el manual de Intel pero al no retornar la lectura de ningún modo no sirve de nada... Si prueba esto verás que devuelve $30:
Código: asm
        xor eax, eax
        lea eax, [FS:eax+$30]
        ret

El prefijo es superfluo...
I code for $$$.

(PGP ID 0xCC050E77)
ASM, C, C++, VB6... skilled [malware] developer