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

торые корректируют содержимое DS при работе в ре-
зидентном режиме .Если этого не сделать, то отно-
сительный адрес каждой ячейки памяти придется уме-
ньшать на 110h ( см п. 2.5 ).Далее вирус проверяет
значение переменной "tg_13h" .Дело в том,что рези-
дентный вирус обязательно должен заражать файлы,
находясь в памяти, и поэтому без обращения к диску
в резидентном режиме нам не обойтись.Такое обраще-
ние, естественно, должно происходить только в те
моменты,когда никакие другие программы не работают
с диском .Если это условие не соблюдается, непре-
менно возникнет программный конфликт, что приведет
к неприятным последствиям .Особенно это относится
к тем случаям,когда на машине установлен какой-ни-
будь кэш ( например, SMARTDRIVE или HYPERDISK ) .
В этом случае может случиться так, что вирус и кэш
попробуют обратиться к диску одновременно, а это
недопустимо !
Решить проблему помогает введение переменной "tg_
13h" .Она принимает значение " 1 ", когда к диску
выполняется обращение, или значение " 0 ", если в
данный момент обращения к диску нет.Для инициали-
зации переменной используется специальный "фильтр"
прерывания Int 13h, который будет описан ниже .
Итак, если " tg_13h " равна " 1 ",вирус возвращает
управление прерванной программе,в противном случае
работа вирусного кода продолжается .


2.14 Заражаем COM - файл

В случае, если прерывание Int 13h не выполняется,
можно заняться поиском подходящего COM - файла и
его заражением.Этот процесс практически не отлича-
ется от действий нерезидентного вируса, и поэтому
мы просто используем разработанный ранее блок, не
останавливаясь подробно на его работе :

all_right: mov ah,2fh ;Получим текущую
int 21h ;DTA ( ES : BX )

mov bp,bx

mov cx,80h ;Сохраним эту
lea si,dta_save ;DTA ...
mov di,bp
save_dta:
mov al,byte ptr es:[di]
mov [si],al
inc si