"Игорь Коваль. Как написать вирус" - читать интересную книгу автора указывает на начало ее PSP .Кроме того, в самом
начале вируса мы записали директиву " org 110h ". Но ведь к вышеуказанным ячейкам памяти вирус об- ращается в резидентном режиме, да еще и относите- льно CS .А CS указывает строго на начало обработ- чика, а не на начало PSP, как это было при компи- ляции ! Поэтому относительный адрес ячеек необхо- димо уменьшить на 110h, что мы и сделали . Этот прием будет использован еще несколько раз при по- строении вирусных обработчиков прерываний,поэтому полезно будет понять, на чем он основан . 2.6 Сохраняем регистры процессора В самом начале работы резидентная программа обяза- на сохранить значения регистров процессора, кото- рые были переданы ей прерванной программой, а при завершении работы - восстановить эти значения .Ес- ли этого не сделать,прерванная программа просто не сможет нормально выполняться дальше,что приведет к сбою вычислительного процесса . Поэтому сейчас мы сохраним все регистры, используемые вирусом,в сте- ке : push ax ;ке регистры ... push bx push cx push dx push si push di push bp push ds push es jmp cs:infect ;Перейти к зара- ;жению файлов Заметим, что значения регистров записываются уже в область " newstack ", а не в стек прерванной прог- раммы .Значения SS и SP сохраняются в переменных : " ss_save " и " sp_save ", и поэтому в стек не за- носятся .Команда " jmp cs:infect " также относится к резидентной секции и передает управление "зараз- ной" части вирусного кода . 2.7 Создаем секцию инициализации А теперь пора заняться изготовлением секции иници- |
|
|