"Игорь Коваль. Как написать вирус" - читать интересную книгу автора ние зараженной программе . Естественно, она когда-
нибудь завершится и передаст управление DOS . Но ведь в этом случае блок, который занимает вирусный код, будет освобожден, и при первой необходимости этот код будет уничтожен,чтобы записать на его ме- сто другую информацию !В результате произойдет мо- ментальное " повисание " компьютера . Очевидно, этого можно избежать, если память, зани- маемая вирусом, будет оставаться занятой в течение всего сеанса работы,и не будет освобождаться после завершения зараженной программы . Как показал эксперимент, для этой цели достаточно в MCB,предшествующем выделенному для вирусного ко- да блоку, сделать определенные изменения.Но снача- ла мы немного расскажем о структуре Memory Control Blocks ( MCB ) и их использовании . Для того, чтобы следить за использованием памяти, в MS DOS предусмотрена специальная структура - так называемый блок управления памятью,или MCB - блок. Такой блок помещается DOS непосредственно перед каждым вновь выделяемым блоком памяти, и система ведет специальный список MCB - блоков,просматривая его при выполнении тех или иных действий, связан- ных с распределением памяти. MCB обязательно начинается на границе параграфа и жна знать о том, где именно расположен первый блок управления памятью.На этот блок указывает внутрен- няя переменная 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 этого блока . Остальные одиннадцать байт блока не используются и |
|
|