Энциклопедия компьютерных вирусов

         

Заражение


Процедура заражения имеет три достаточно интересные особенности. Первая из них похожа на аналогичную в вирусе "Win95.SK"

- он записывает свой код в начало секции настроек (Fix-up) и стирает в PE-заголовке ссылку на эту таблицу. Обычно приложения Windows при запуске не используют эту секцию, и зараженные таким образом программы (с испорченной таблицей настроек) будут работать без каких-либо проблем.

Вирус записывает себя в секцию настроек только в том случае, если она является последней секцией файла. Если последняя секция не является настройками, вирус увеличивает ее размер и записывает свой код в образовавшееся дополнительное пространство. Естественно предположить, что при заражении первым методом размер файла может остаться неизменным (если размер таблицы настроек больше длины вируса), однако по причине ошибки вирус в любом случае увеличивает длину файла - при этом в этот блок попадают случайные данные.

Вторая особенность процедуры заражения также напоминает вирус "Win95.SK" - при заражении вирус не изменяет стартовый адрес программы и записывает команду передачи управления на свой код (Jmp_Virus) в середину кодовой секции файла. При этом код вируса получает управление не непосредственно в момент запуска программы, а только в том случае, если управление передается на процедуру, в которую вирус записал команду Jmp_Virus.

Для определения "подходящего" места для записи команды Jmp_Virus вирус сканирует таблицу импортов EXE-файла и ищет в ней ссылки на процедуры "ExitProcess" из библиотеки KERNEL32.DLL или "exit" из MSVCRT.DLL (Microsoft Visual C++ run-time). Если такая ссылка обнаружена, вирус сканирует кодовый сегмент файла, ищет команду вызова этой функции и записывает вместо нее свою инструкцию Jmp_Virus. В этом случае зараженные файлы передают управление на код вируса в момент окончания работы - вирус "вклинивается" между основной программой и командой завершения ее работы.

Если указанные выше функции не обнаружены, вирус сканирует 500 первых байт от стартового адреса программы, ищет там команды CALL или JMP и записывает свой вызов вместо первой из них.


Полиморфный расшифровщик является третьей особенностью вируса, на которую следует обратить внимание. Код расшифровщика может быть обнаружен в различных участках зараженного файла - он представляет собой отдельные команды, "связанные" между собой инструкциями JMP. Для "разбрасявания" своего полиморфного расшифровщика по файлу вирус использует достаточно нетривиальный прием, основанный на особенностях структуры выполняемых файлов, компилированных при помощи Microsoft C++. Часто подпрограммы в таких файлах "выравниваются" на адрес, кратный параграфу (16 байт), и между подпрограммами присутствуют "дыры", заполненные байтом CCh. Именно в такие дыры вирус и записывает инструкции из своего расшифровщика.

В том случае, если вирус не свог обнаружить достаточное количество "дыр", он записывает свой расшифровщик в конец своего кода.

Следует также отметить, что полиморфик-генератор вируса инициализаруется по полю из PE-заголовка файла, которое хранит дату и время создания этого файла. Таким образом, при заражении одинаковых файлов вирус генерирует одинаковый полиморфик-код.


Содержание раздела