Virus.Win9x.Memorial

Класс Virus
Платформа Win9x
Описание

Technical Details

this text was written by Peter Szor, Data Fellows

«Многоплатформенный» файловый вирус. Заражает DOS COM- и EXE-файлы и
PE-файлы Win32 (Portable Executable). Также создает Win95 VxD-драйвер
(Virtual Device Driver) для запуска своей Win95 «резидентной части».
Вирус не шифрует себя в DOS-файлах, но при заражении Win95 PE-файлов
зашифровывает свой код, расшифровщик вируса при этом является
«олигоморфным» (полу-полиморфным). При этом основной код вируса
(VxD-драйвер) упакован при помощи несложного алгоритма паковки данных.
Вирусы, шифрующие свой код в Win95-файлах, уже встречались (например,
«Win95.Mad»), однако «Memorial» является первым Win95-вирусом, использующим
при заражении файлов элементы полиморфизма.
«Memorial» также применяет достаточно эффективные меры против нескольких
популярных антивирусных программ — открывает системный реестр (registry)
Windows95 и удаляет оттуда информацию об антивирусах.
Вирус имеет достаточно серьезные ошибки, по причине которых распространение
вируса «в живом виде» не представляется возможным, хотя сообщения о
зараженных компьютерах поступали из нескольких стран Европы.

Запуск зараженных DOS COM-файлов

При запуске зараженных DOS-файлов вирус записывает на диск и запускает свой
VxD «дроппер» (файл с именем C:CLINT.VXD), который затем остается
«резидентно» в памяти Windows95. Для этого вирус проверяет, работает ли он
в DOS-окне под Win95. Если так, то вирус возвращает управление
программе-носителю. Иначе вирус вызывает свою функцию детектирования
резидентной копии («Are you there?») — INT 2Fh, AX=0. Если копия вируса уже
присутствует в памяти, она возвращает AX=4AB3h, и вирус отдает управление
программе-носителю. Иначе вирус создает файл C:CLINT.VXD и записывает туда
код своего VxD-дроппера.
При создании дроппера вирус распаковывает его код — 7508 байт упаковынных
данных преобразуются в 12413 байт VxD-дроппера. Алгоритм паковки достаточно
прост, однако VxD-драйвера являются EXE-файлами формата LE (Linear
Executable) и содержат области неспользуемых данных, заполненные нулями.
Естественно, что даже несложные алгоритмы паковки данных показывают на
таких файлах достаточно неплохой результат.
Когда распаковка файла CLINTON.VXD закончена, вирус копирует незначительную
часть своего кода в таблицу векторов прерываний по адресу 0:200 и
устанавливает туда адрес прерывания INT 2Fh (Multiplex Interrupt).
Перехватчик INT 2Fh помимо функции «Are you there?» также ждет вызовов
AX=1605h (Windows Initialization Notification). Эта функция INT 2Fh
вызывается Windows для уведомления драйверов и TSR-программ DOS о том, что
Windows инсталлирует себя в память. Windows при старте вызывает эту функцию
для того, чтобы дать возможность DOS-программам подготовиться к работе в
среде Windows.
Когда этот вызов приходит к вирусному обработчику INT 2Fh, «Memorial»
открывает файл C:CLINT.VXD для того, чтобы удостовериться в его
присутствии, затем создает структуру Win386_Stratup_Info_Struc, необходимую
для запуска VxD и возвращает управление Windows. Получив корректный
указатель на драйвер C:CLINT.VXD, Windows грузит его в память, и вирус,
таким образом, остается в памяти Windows как VxD-драйвер.

Запуск DOS EXE-файлов

При запуске зараженных DOS EXE-файлов все происходит примерно так же, как и
при запуске COM-файлов. Однако при заражении EXE-файлов вирус допускает
грубую ошибку, в результате которой в EXE-файлы записывается неупакованный
код VxD-драйвера. По этой причине при запуске EXE-файла вирус неспособен
корректно распаковать код драйвера в файл C:CLINT.VXD — он распаковывает
уже распакованный образ драйвера, зацикливается и пишет на диск до тех
пор, пока на диске не закончится место, или пользователь не нажмет Ctrl-C
или Alt-Ctrl-Del.

Запуск зараженного PE-файла

При запуске зараженного Win95 PE-файла вирус расшифровывает свой код при
помощи 46-байтного расшифровщика и, так же как и в случае DOS COM-файлов,
записывает на диск свой файл-дроппер C:CLINT.VXD. Однако для запуска
дроппера вирус использует другой прием.
Сначала вирус поиском во внутренних структурах Windows95 определяет в
памяти Windows95 адреса необходимых функций (GetModuleHandleA,
GetProcAddress), handle KERNEL32, после чего вирус получает доступ к
файловым и прочим функциям WIndows: CreateFileA-, WriteFile-, ReadFile-,
SetFilePointer-, CloseHandle-, GetLocalTime-, LocalAlloc.
Затем вирус проверяет, запущен ли файл \.CLINT (имя в формате
VxD-драйверов Windows95). Если нет, вирус при помощи функции CreateFileA
создает файл \.C:CLINT.VXD и распаковывает туда код своего VxD-дроппера.
Затем вирус запускает VxD на исполнение, используя документированный формат
функции CreateFileA, и возвращаетуправление программе-носителю.
При запуске из PE-файла вирус также проверяет системную дату — 10-го апреля
вирус выводит MessageBox с текстом:

Clinton Haines Memorial Virus by Quantum/VLAD and Qark/VLAD
Clinton Haines, also known as Harry McBungus, Terminator Z and Talon
died of a drug overdose on his 21st birthday, April the 10th, 1997.
During his time as a virus writer he wrote the No Frills family, X-Fungus,
Daemon and 1984 viruses.  He was a good friend to VLAD and so we write
this virus in his honour.  We hope it's good enough to do him justice.
VLAD Remembers. Rest in Peace

Загрузка VxD-драйвера

При запуске CLINT.VXD вирус обрабатывает необходимые системные VxD-вызовы
(Control Messages), перехватывает DOS IFS (Installable File System) API и
заражает COM- и EXE-файлы при их открытии. Для подготовки данных,
необходимых для заражения файлов, вирус открывает файл C:CLINT.VXD,
считывает оттуда свой код и упаковывает его в заранее отведенный блок
памяти. Затем вирус закрывает файл C:CLINT.VXD и уничтожает его.
Вирус также уничтожает в системном реестре информацию и данные,
используемые некоторыми антивирусами:
Регистр 'SystemCurrentControlSetServicesVxd' - уничтожает ключи
'VETMON95', 'VETMACRO', 'NAVAP', 'virusafe', 'WIMMUN32'.
Секция 'SOFTWAREMicrosoftWindowsCurrentVersionRun' - уничтожаются
'NORTON AUTO-PROTECT', 'TBAV for Windows 95', 'Anywhere Antivirus
Validation', 'Vshwin32EXE', 'ViruSafe'.
Секция 'SOFTWAREMcAfeeScreenScan' - уничтожаются 'bEnableScreenScan',
'bScanAllFiles', 'bScanSubDirs'.
'SOFTWARECybecVET Antivirus for Win32' - уничтожаются
'ActionsInfectedAction', 'ActionsSuspectAction', 'MemoryEnabled',
'ResidentFileCheck', 'ResidentInfectedAction', 'ResidentSuspectAction',
'ScanningScan All Files', 'ScanningScan Type', 'ScanningSkip Renamed',
'ScanningSubfolders' и устанавливается новый 'ScanningExtension List':
'bin, dll, doc, drv, ovl, sys, dot'.

Заражение COM- и EXE-файлов

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