jnc Write

jmp Error ;Если ошибка чтения ; Записываем файл Write:

mov ex,ax ;Число фактически прочитанных байт

mov ah,4 Oh

mov dx,0

mov bx,HandVir ;Пишем в $У$-файл

push ds

mov ds,MemS

int 21h

pop' ds

jnc m3

jmp Error ;Если ошиГха записи

; Изменяем длину остатка

m3: mov dx,Lengl ;DX - младшая часть длины

mov cx,Leng2 ;СХ - старшая часть длины

sub dx,ax ;AX - длина записанного

sbb cx,0 ;CX:DX - длина остатка

mov Leng2,cx

mov Lengl,dx

cmp ex,0

jnz Copy ; Повторяем

cmp dx, 0

jnz Copy ;пока остаток не станет нулевым

ret

Rename PROC NEAR

; Переименовываем ЕХЕ-файл в VIR-файл ;и $У$-файл в ЕХЕ-файл. Сообщаем о конце работы

После завершения копирования процедура Rename закрывает оба открытых файла и переименовывает их: исходный (зараженный) файл переименовывается в файл с расширением VIR, вновь созданный $У$—файл получает расширение ЕХЕ.

call CloseFiles ;Закрываем файлы mov ah,41h lea dx,NameFV

int 21h ;Удаляем VIR-файл mov ah,56h lea dx,NameFE push ds pop es lea di,NameFV

int 21h ;Переименовываем ЕХЕ в VIR jc Error mov ah,56h lea dx,NameF$ lea di,NameFE

int 21h ;Переименовываем $V$ в ЕХЕ jc Error ; Сообщаем о конце работы lea dx,Txt4

call Print ; 'Вирус удален...' lea dx,Txt20

call Print ; 'Нажмите...' mov ah,l

int 21h ;Ждем реакцию пользователя lea dx,TxtO call Print ret