"Игорь Коваль. Как написать вирус" - читать интересную книгу автора торые корректируют содержимое 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 |
|
|