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

         

Заражение памяти


Код вируса получает управление из различных точек в зависимости от зараженного объекта. Если запускается зараженный EXE-файл (метод заражения "appending", см. ниже) или COM-дроппер, вирус получает управление непосредственно при выполнении зараженного файла (команда JMP_Virus в начале COM-файла или CS:IP на вирус в заголовке EXE-файла). В EXE-файлах, зараженных методом "inserting", вирус получает управление из своей программы-загрузчика. В файлах, слинкованных с зараженными OBJ/LIB-файлами, вирус получает управление командой CALL, которая может располагаться в произвольном месте файла. В любом из перечисленных выше случаев управление передается полиморфик-расшифровщику, который состоит из двух основных циклов. Первый цикл расшифровывает второй цикл и снимает первый уровень шифровки с кода вируса, затем второй цикл восстанавливает код вируса в "чистом" виде и передает управление инсталлятору. Инсталлятор перехватывает INT 1, трассирует INT 21h и ищет в кодах INT 21h некоторую последовательность байт (эти байты присутствуют в кодах обработчика INT 21h в DOS 5.x и DOS 6.x). Если такой код найден, то вирус сохраняет его в своем теле и записывает вместо него FAR CALL на адрес обработчика INT 25h (Absolute Disk Read). Затем вирус сохраняет 5 байт обработчика INT 25h и записывает на их место команду FAR JMP на свое тело. Результат выглядит примерно следующим образом:

INT 21h handler: ... ... +------- 2E FF 1F ???? CALL FAR CS:Int25 | C7 06 ???? ; magic word | Int25: ???? ???? ???? ???? ; far addr of INT 25h | ... ... | +> INT 25h handler: +-------- EA ???? ???? JMP FAR VirusHandler | ... ... | +> Virus handler: 2E 8F 06 ... POP CS:Caller_IP ... ...

Таким образом, вирус использует одну и ту же подпрограмму для перехвата INT 21h и INT 25h. Для того чтобы разделить вызовы различных прерываний, он анализирует адрес, откуда пришел вызов. Если вызов идет из обработчика INT 21h, то вирус передает управление своему обработчику INT 21h. В противном случае управление передается вирусному обработчику INT 25h.
При заражении памяти вирус также проверяет несколько условий и не заражает компьютер, если выполняется хотя бы одно из условий:

- компьютер работает под MS Windows - загрузка производилась с дискеты (A: или B:) - INT 8, 13h, 28h указывают на один сегмент (если в памяти антивирусный монитор?) - день создания зараженного файла близок к текущей дате (два старших бита номера дня создания файла совпадают с двумя старшими битами текущего дня)

При выделении памяти под свою TSR-копию вирус использует DOS-вызовы (ChMem и AllocMem) и устанавливает себя в conventional-memory. Однако в дальнейшем вирус может переместить себя в другие адреса памяти, включая UMB. Затем вирус возвращает управление программе-носителю. Если это COM-дроппер, то вирус выводит сообщение:

Abnormal program termination

и возвращает управление DOS. Если заражен EXE-файл (appending), то вирус восстанавливает заготовок файла и передает управление по первоначальным CS:IP. Если заражен EXE-файл (inserting) или OBJ/LIB-файл, вирус возвращает управление прерванной подпрограмме.


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