TITLE Modify MBR 1.44 .8086 _TEXT segment byte assume cs:_TEXT, ds:_TEXT, es:_TEXT, ss:_TEXT org 0 beg: cli ;Самокопирование по адресу 0:600h xor ax,ax mov ss,ax mov sp,7C00h mov si,sp push ax pop es push ax pop ds sti cld mov di,600h mov cx,100h repnz movsw ;copy to 0:600 db 0EAh ;jmp far на копию dw $-beg+600h + 4,0 mov si,600h + offset TT ;signature call tele @i13: ; Блок проверки перехваченных векторов mov cx,CIQ @lp: mov ax,cx dec ax mov si,600h + offset I13 add si,ax add si,ax mov di,600h + offset Irpt add di,ax xor ax,ax mov al, byte ptr [di] mov di,ax push cx cmp word ptr [di],0F000h je @i1Cp call televir jmp @i21 @i1Cp: call IOk @i21: pop cx loop @lp @goon: ;Поиск загрузочного раздела mov si,600h + 1BEh mov bl,4 @activ: cmp byte ptr [si],80h je @isac cmp byte ptr [si],0 jne @er add si,10h dec bl jnz @activ int 18h ;ROM BASIC @isac: mov dx,[si] mov cx,[si+2] mov bp,si @npt: add si,10h dec bl jz @boot cmp byte ptr [si],0 jz @npt @er: mov si,600h + offset Inv ;Сообщение об ошибке call tele @self: jmp @self ;Блокировка @boot: mov di,5 ;Загрузка @rpbt: mov bx,7C00h mov ax,0201h push di int 13h pop di jnc @onbt xor ax,ax int 13h dec di jnz @rpbt mov si,600h + offset Erl call tele jmp @self @onbt: mov si,600h + offset Mis mov di,7C00h + 1FEh cmp word ptr [di],0AA55h ;Проверка DOS boot signature je @1 call tele jmp @self @1: mov si,bp db 0EAh ;jmp far на загрузчик dw 7C00h,0 ;0:7C00 tele proc near ; Процедура вывода на экран @ns: lodsb cmp al,0 jne @type ret @type: push si mov bx,7 mov ah,0Eh int 10h pop si jmp @ns tele endp televir proc near ;Процедура печати сообщения о перехвате mov di,600h + offset VIR + 4 mov cx,2 repnz movsb mov si,600h + offset VIR call tele xor ax,ax int 16h ret televir endp IOk proc near ;Сообщение Ок mov di,600h + offset Ok + 4 mov cx,2 repnz movsb mov si,600h + offset Ok call tele ret IOk endp Inv db 'Invalid partition table',0 Erl db 'Error loading OS',0 Mis db 'Missing OS',0 CIQ equ 7 Irpt db 13h*4+2,21h*4+2,08h*4+2,09h*4+2,1Ch*4+2,17h*4+2,12h*4+2 I13 db '13' I21 db '21' I08 db '08' I09 db '09' I1C db '1C' I17 db '17' I12 db '12' TT db 'Self-testing MBR v. 1.44',13,10,0 VIR db 'Int h changed. May be VIRUS',13,10 db 'Press any key',7,13,10,0 Ok db 'Int h Ok',13,10,0 _TEXT ends end beg