СОМ-программа представляет собой участок кода и данных, начинающийся с исполняемой команды и занимающий не более 64Кбайт. Например, такую структуру имеет командный процессор COMMAND.СОМ операционной системы MSDOS, версий до 6.22 включительно.
ЕХЕ-программа имеет гораздо более сложную структуру. В начале файла ЕХЕ-программы располагается заголовок длиной 28 байт, содержащий следующие данные:
• MZiu — признак ЕХЕ-файла;
• PartPag — длина файла по модулю 512;
• PageCnt — длина файла в 512-байтовых страницах;
• ReloCnt — размер настроечной таблицы;
• HdrSize — размер заголовка;
• MinMem — минимум требуемой памяти;
• MaxMem — максимум требуемой памяти;
• Relo-SS — относительный сегмент стека;
• ExeSP — смещение указателя стека;
• ChkSum — контрольная сумма файла;
• ExelP — смещение точки входа;
• ReloCS — относительный сегмент точки входа;
• TablOff — смещение настроечной таблицы;
• Overlay — номер оверлейного сегмента.
Поля ReloCS и ExelP определяют местоположение точки входа в программу, поля ExeSP и ReloSS — местоположение стека, поля PartPag и PageCnt — размер корневого сегмента программы.
Вычисленный по PartPag и PageCnt размер программы может не совпадать с реальным размером файла. Такие программы называются «сегментированными» или «содержащими внутренние оверлеи». Грамотные авторы вирусов избегают заражать такие программы.
После заголовка может располагаться специальная таблица, точное местоположение которой определяется полем TablOff, а размер — полем ReloCnt. В этой таблице хранятся адреса тех слов в коде программы, которые модифицируются операционной системой во время загрузки программы.
Стандартные методы заражения.
Случай СОМ-программы. Тело вируса приписывается к концу файла, где-то внутри его сохраняются несколько (обычно, три) байтов оригинального начала программы, на их место записываются команды перехода на начало вируса. Когда вирус заканчивает выполнение предусмотренных им действий, он восстанавливает оригинальные байты начала программы и передает туда управление.
|
Случай ЕХЕ-программы. Тело вируса приписывается к концу файла, в заголовке его модифицируются значения полей, определяющих местоположение точки входа и размер программы (иногда еще — местоположения стека). В результате управление получает вирусный код. По окончании работы вирус, используя сохраненные при заражении значения измененных полей, осуществляет переход на оригинальное начало программы.
4. ОСНОВНЫЕ ВИДЫВИРУСОВ И СХЕМЫИХ ФУНКЦИОНИРОВАНИЯ