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

2.9 Делаем вирус " незаметным "

К сожалению,выбранный нами способ поиска свободно-

го блока памяти имеет один скрытый недостаток .Как

вы, наверное, знаете, при завершении программы DOS

освобождает блок памяти, который эта программа за-

нимает .Кроме того, освобождаются также все блоки,

которые были распределены программе по ее запро-

сам .

Предположим, вирус стартовал из зараженной програ-

ммы, с помощью описанных ранее функций MS DOS на-

шел подходящий блок памяти и записал в него свой

код, предварительно переписав на этот код те или

иные прерывания .После этого он передает управле-

ние зараженной программе . Естественно, она когда-

нибудь завершится и передаст управление DOS . Но

ведь в этом случае блок, который занимает вирусный

код, будет освобожден, и при первой необходимости

этот код будет уничтожен,чтобы записать на его ме-

сто другую информацию !В результате произойдет мо-

ментальное " повисание " компьютера .

Очевидно, этого можно избежать, если память, зани-

маемая вирусом, будет оставаться занятой в течение

всего сеанса работы,и не будет освобождаться после

завершения зараженной программы .

Как показал эксперимент, для этой цели достаточно

в MCB,предшествующем выделенному для вирусного ко-

да блоку, сделать определенные изменения.Но снача-

ла мы немного расскажем о структуре Memory Control

Blocks ( MCB ) и их использовании .

Для того, чтобы следить за использованием памяти,

в MS DOS предусмотрена специальная структура - так

называемый блок управления памятью,или MCB - блок.

Такой блок помещается DOS непосредственно перед

каждым вновь выделяемым блоком памяти, и система

ведет специальный список MCB - блоков,просматривая

его при выполнении тех или иных действий, связан-

ных с распределением памяти.

MCB обязательно начинается на границе параграфа и

всегда занимает целый параграф.Конечно,MS DOS дол-

жна знать о том, где именно расположен первый блок

управления памятью.На этот блок указывает внутрен-

няя переменная DOS, значение и местоположение ко-

торой известно только операционной системе .

Рассмотрим теперь структуру MCB - блока .Итак :

Байт 0 - содержит код 5Ah,если данный блок яв-

ляется последним в цепочке MCB, и код

4Dh - в противном случае .

Байты 1, 2 - Содержат PID (Program IDentificator)

программы, для которой DOS выделяла

блок, или ноль, если блок свободен .

Байты 3, 4 - Содержат размер блока в параграфах .

Следующий блок расположен в памяти по

адресу : MCB_NEW = MCB_OLD + lenght +

+ 1.Здесь MCB_NEW - сегментный адрес,

по которому располагается следующий

MCB, MCB_OLD - сегментный адрес рас-

сматриваемого MCB,а lenght - содержи-

мое байтов 3, 4 этого блока .

Остальные одиннадцать байт блока не используются и

могут содержать любые данные. Но стоит заметить,

что повреждение байтов 1, 3 или 4 приводит к выда-

че сообщения :

Memory Allocation Error

System Halted

и немедленному " зависанию " компьютера .

А теперь вернемся к нашей программе .

Как показал эксперимент, достаточно подменить в

MCB, предшествующем вирусному коду, байты 1 и 2 .

Причем лучше всего записать вместо этих байт PID

какой - нибудь из уже загруженных в память про-

грамм.Этим достигается еще и незаметность вируса в

памяти.Советую вам попробовать загрузить несколько

TSR - программ и в MCB одной из них подменить бай-

ты 1 и 2 на PID какой - нибудь другой программы .

После этого нажмите в Volkov Commander клавиши ALT

и F5, и вы увидите очень интересный эффект .

Но дело в том, что для использования вышеприведен-

ного метода необходимо еще найти программу, на PID

которой наш вирус будет " паразитировать ".Сделать

это не так просто, как может показаться на первый

взгляд .И поэтому для облегчения нашей работы вме-

сто PID загруженной в память программы мы запишем

в MCB вируса сегментный адрес области данных DOS,

а именно : 0070h :

; _______________________________________________

;| Теперь свободный блок памяти найден |

;| ( сегментный адрес в AX ), и |

;| нужно записать в него код вируса ... |

;|_______________________________________________|

xor di,di ;Делаем вирус

mov bx,ax ;"невидимым" в

dec bx ;памяти ...

mov word ptr cs:[2],bx

mov es,bx

mov bx,0070h

mov es:[di+1],bx

Предыдущий фрагмент вернул нам сегментный адрес

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

Приведенные программные строки очень просты, и

объяснять их работу не нужно. Следует только ска-

зать, что вирус фактически отнимает у DOS несколь-

ко килобайтов памяти, поэтому необходимо скоррек-

тировать PSP программы - носителя вируса.А именно-

уменьшить верхнюю границу блока памяти,выделенного

программе,на длину вирусного кода.Интересующая нас

величина находится по смещению 02h от начала PSP.

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