\page ▧Приложение VI. ▊Программа борьбы с вирусом ; ▁▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▚ ; ▕ NOVIRUS.MAC - Программа борьбы с вирусом ▕ ; ▕ Использование: ▕ ; ▕ NOVIRUS Выдает информацию о заражении диска и ОЗУ ▕ ; ▕ NOVIRUS - Заодно уничтожает вирус ▕ ; ▇▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▔ ; .Z80 Hook equ 0F26Dh Bdos equ 5 STROUT equ 09h ; Функции BDOS: - вывод строки DNAME equ 19h ; - выдача номера дисковода SETDMA equ 1Ah ; - установка адреса обмена DREAD equ 2fh ; - чтение сектора с диска DWRITE equ 30h ; - запись сектора на диск StEntry equ 001Fh Params equ 82h ; Здесь находится строка параметров при ; запуске программы. ld a,(Hook) cp 0C9h jr z,test2 ld de,mess1 ld c,STROUT call Bdos ld a,(Params) cp '-' jr nz,test2 ld a,0C9h ld (0F26Dh),a call kill test2: ld de,_DMA ld c,SETDMA call Bdos ld c,DNAME call Bdos ld (StDrive),a ld l,a ; N дисковода ld de,0 ; N Сектора ld h,1 ; Число секторов ld c,DREAD ; Чтение сектора call Bdos ld a,(_DMA+StEntry) .8080 cpi (Push h) ; Диск заражен, если Push h в байте .Z80 ; StEntry - только для нашего вируса ! ret nz ld de,mess2 ld c,STROUT call Bdos ld a,(Params) cp '-' ret nz ld hl,_DMA + 103h ; Доступ к месту в вирусе, где записаны ld a,(hl) ; стандартные 6 байт. Производится так: .8080 ; в байтах 3÷6 вируса расположена команда cpi (lxi d) ; LD DE, Rettable-Vbeg, т.е. в байте 4 .z80 ; размещен относительный адрес начала таб﹣ ret nz ; лицы стандартных байтов. inc hl ; ▇Только▁ для нашего вируса ! ld e,(hl) inc hl ld a,(hl) or a ret nz ld d,a ld hl,_DMA + 100h add hl,de ; Теперь hl = Адрес таблицы ld de,_DMA+StEntry ld bc,6 ldir ld de,0 ; N Сектора ld hl,(StDrive) ; N дисковода ld h,1 ; Число секторов ld c,DWRITE ; Запись сектора call Bdos kill: ld de,mess3 ld c,STROUT jp Bdos mess1: db 'Внимание, вирус в памяти',0Dh,0Ah,'$' mess2: db 'Внимание, вирус на диске',0Dh,0Ah,'$' mess3: db 'Нейтрализован', 0Dh,0Ah,'$' StDrive:ds 1 _DMA equ $ END