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

         

Технические детали


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

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

Вирус также ищет неиспользуемый блок данных в PE-заголовке. Если в конце заголовка есть "дыра" размером не менее 184 байт, вирус записывает в нее свою startup-процедуру. Затем вирус изменяет стартовый адрес файла: записывает в нее адрес своей startup-процедуры. В результате такого приема структура файла становится достаточно нестандартной: адрес стартовой процедуры программы указывает не в какую-либо секцию файла, а за пределы загружаемого модуля - в заголовок файла. Однако Windows95 не обращает внимания на такие "странные" файлы, грузит в память заголовок файла, затем все секции и передает управление на указанный в заголовке адрес - на startup-прецедуру вируса в PE-заголовке.

Получив управление, startup-процедура вируса выделяет блок памяти VMM-вызовом PageAllocate, копирует туда свой код, затем определяет адреса остальных блоков кода вируса (расположенных в конце секций) и дописывает их к коду своей startup-процедуры. Затем вирус перехватывает IFS API и возвращает управление программе-носителю.

С точки зрения операционной системы эта процедура наиболее интересна в вирусе: после того, как вирус скопировал свой код в новый блок памяти и передал туда управление, код вируса исполняется как приложение Ring0, и вирус в состоянии перехватить AFS API (это невозможно для программ, выполняемых в Ring3).

Перехватчик IFS API обрабатывает только одну функцию - открытие файлов. Если открывается файл с расширением EXE, вирус проверяет его внутренний формат и записывает в файл свой код. После заражения вирус проверяет системную дату и вызывает процедуру стирания Flash BIOS и секторов диска (см. выше).

При стирании Flash BIOS вирус использует соответствующие порты чтения/записи, при стирании секторов дисков вирус вызывает VxD-функцию прямого обращения к дискам IOS_SendCommand.



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