La forma de leer el PEB habitual junto con otros factores hacía que los AVs detectasen mi binario... así pues busqué formas diferentes de leer el PEB, y esta me ha gustado especialmente. Muy ofuscada.
[FASM]
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)?
Está comentado para que haya la mínima duda posible. Cualquier cosa preguntad.
Añado este code que es un byte más ligero que el método habitual:
push $30
pop esi
db $64
lodsd
Saludos.
Interesante uso de XLAT... aunque los procesadores siguen soportando la instruction, y es rara vez utilizada (por lo menos ahora los compiladores ya no la generan). :)
busque y trata de leer el PEB desde C++ solo para obtener ni APPNAME.
y no lo logre, no tengo los conocimientos suficientes de asm como para entender como lo haces en asm y asi pasarlo a C.
serias tan amable de dar un ejemplo ? asi lo estudio ya que estoy interesado en aprender ASM. pero quiero dar por hecho eso de leer el process block environment de mi APP en C-
xor eax, eax
mov eax, [FS:EAX+$30]
Esta sería la forma normal de leer el puntero al PEB en ASM, ahora tendrías que sacar RTL_USER_PROCESS_PARAMETERS desde el PEB y luego a ImagePathName y ahí ya parsear el nombre de tu ejecutable...
Solo me conecté hoy para darte las gracias por ese código. ¡Qué interesante!
Un honor Karmany, me alegro que te haya gustado :)
Muy bueno!
Ahora, pregunto: el byte 64h... para que es? para el loop?
Es el identificador del registro FS. Si lo pones delante de algunas instrucciones éstas en lugar de acceder a DS como lo harían de forma habitual acceden a FS :)
Edit:Añado otra alternativa.
Cita de: Karcrack en 11 Mayo 2012, 00:21 AM
Añado este code que es un byte más ligero que el método habitual:
push $30
pop esi
db $64
lodsd
Saludos.
Crack :P .
Muy Bueno. Si señor!
Gracias por compartir.
slds
Gracias por compartir esto Karcrack
Si realmente funciona sin ser detectado por los AVs ;-) ahora me toca implementarlo en C# :-(.
Lo has probado en virusTotal?
Saludos.
Si lo ponen en virustotal, será mandado a todos los AVs como muestra, igual al hacerlo público también está el riesgo, pero bue...
Nox.