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

         

Заражение EXE-файлов (Inserting)


Если длина модуля больше 32K, то вирус ищет в модуле C/Pascal-процедуры и записывает в них свой загрузчик. В результате код вируса получает управление не непосредственно при запуске зараженного файла, а при вызове этой процедуры. Причем эта подпрограмма может быть крайне редко выполняемой (например, при выводе сообщения о какой-либо специфической ошибке). В результате вирус может долгие годы "спать" внутри файла и вырваться на свободу только при некоторых ограниченных условиях. При заражении этим методом вирус считывает первые 6K загружаемого модуля (сразу после EXE-заголовка) и ищет стандартные заголовки C/Pascal-подпрограмм. Эти подпрограммы обычно начинаются с команд:

PUSH BP MOV BP,SP

Если такие команды найдены, то вирус сканирует следующие 54h байта на наличие команд RET и CALL FAR. Если таковая команда найдена, то вирус не заражает файл. Вирус делает это для того, чтобы не испортить код другой подпрограммы или настраиваемый (relocated) адрес. Затем вирус считывает 54h байта этой подпрограммы, записывает в нее код своего загрузчика, шифрует свое тело и записывает в конец файла, после этого он сохраняет в конце файла код подпрограммы и вторую часть кода своего загрузчика (и то и другое шифруется командой SUB) и в заключение дописывает блок случайных данных:

Перед заражением Зараженный файл ---------------- --------------- +--------------+ +--------------+ |Заголовок Exe | |Заголовок Exe | |--------------| |--------------| |Код EXE-файла | |Код EXE-файла | |--------------| |--------------| |C/Pascal subr |--+ |Код загрузчика| 52h байта, не зашифрованы |--------------| | |--------------| | | | |Код EXE-файла | | | | |(продолжение) | +--------------+ | |--------------| | |Вирус | зашифрован (полиморфик) | |--------------| | |Код загрузчика| часть 2, зашифрована SUB'ом | |--------------| 70h байт +->|Код C/Pascal | первоначальный код C/Pascal subr, |--------------| 52h байта, зашифрованы SUB'ом |Random data | +--------------+

Если код загрузчика получает управление, то он определяет имя файла-носителя (используя PSP), считывает из файла и расшифровывает свое продолжение, а затем передает на него управление. Продолжение загрузчика восстанавливает код C/Pascal-подпрограммы, выделяет блок памяти (conventional или UMB), считывает туда код вируса и передает на него управление.



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