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