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:
xor eax, eax
mov eax, [FS:eax+$30]
Forma que he ideado:
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:
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):
xor eax, eax
cmovz eax, [FS:eax+$30]
Saludos :D
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
Otra sencillita
push dword[fs:0x30]
pop eax
No tienes permitido ver los links.
Registrarse o Entrar a mi cuenta
Otra sencillita
push dword[fs:0x30]
pop eax
Demasiado explícito. El concepto es evitar el [fs:0x30].
Uno usando FPU ;D
push $30
pop eax
push eax
fld dword[FS:eax]
fstp dword[esp]
pop eax
ret
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:
xor eax, eax
lea eax, [FS:eax+$30]
ret
El prefijo es superfluo...