При заражении вирус использует вызовы GetDir, SetDir, FindFirst, FindNext, OpenFile, LSeek, Read, Write и CloseFile, причем делает эти вызовы напрямую в KERNEL32 без использования ссылок на KERNEL32.DLL, как это делают обычные Win95-программы. Для того чтобы найти нужный адрес в KERNEL32, вирус проверяет код KERNEL32 по двум адресам. Если по какому-либо из этих адресов находится некоторый код (код обработчика функций?), вирус использует этот адрес для вызова перечисленных выше функций. Если же этот код не обнаружен в KERNEL32, вирус возвращает управление программе-носителю.
Алгоритм работы вируса довольно прост: вирус запоминает имя текущего каталога, ищет EXE-файлы, проверяет их на наличие PE-сигнатуры, затем увеличивает на единицу поле NumberOfSections в заголовке PE, добавляет еще однин заголовок секции (с именем ".vlad") и записывает свой код в конец файла. Новый заголовок секции создается таким образом, что код вируса получает управление при запуске зараженного файла.
При запуске вирус ищет и заражает не более трех файлов. Если в текущем каталоге нет незараженных EXE-файлов, то он переходит на один каталог выше. Перед возвращением управления программе-носителю вирус переходит в первоначальный каталог, имя которого запоминает перед началом поиска файлов.
Вирус проверяет системную дату и по 31-м числам выводит Message Box, в заголовке которого находится строка:
Bizatch by Quantum / VLAD
а в самом окне текст:
The taste of fame just got tastier! VLAD Australia does it again with the world's first Win95 Virus From the old school to the new.. Metabolis Qark Darkman Automag Antigen RhinceWind Quantum Absolute Overlord CoKe
Вирус также содержит строки:
.vlad Please note: the name of this virus is [Bizatch] written by Quantum of VLAD
В вирусе есть ошибки, и иногда зараженные файлы оказываются испорченными. При запуске таких файлов Windows95 выводит сообщение об ошибке.
Win95.Murkry, семейство
Неопасные нерезидентные файловые Windows-вирусы. Заражают EXE-файлы Win95 (PE-файлы). При запуске заражают все PE EXE-файлы в текущем каталоге. Записываются в PE-заголовок, если там есть свободное место. Поскольку вирусы имеют крайне небольшой размер (менее 400 байт), они вполне могут поместиться в неиспользуемых областях заголовка.Никак не проявляются (за исключением возможных ошибок при запуске зараженных файлов). Содержат строки:
"Murkry.390": MurkryII "Murkry.399": Murkry
Murkry.399
При размножении использует вызовы функций ядра Win95 по конкретным адресам. В результате оказывается "несовместимым" с некоторыми версиями Win95: при запуске зараженных файлов Windows95 выводит сообщение об ошибке.Murkry.390
Исправлена ошибка предыдущей версии: при запуске вирус сканирует KERNEL32 и определяет адрес процедуры VxDCall, который затем использует при размножении.
Win95.Companion
Неопасный нерезидентный компаньон-вирус. При запуске ищет файлы PE-EXE (запускаемые файлы Win95/NT) и заражает их методом компаньон-вирусов: копирует файл с расширением COM, затем записывает свой код вместо заражаемого файла. Результатом заражения является пара файлов с именем зараженного файла: COM-файл с копией зараженного файла и EXE-файл, содержащий код вируса.Вирус ищет и заражает не более двух файлов в текущем каталоге, затем он запускает файл-носитель и возвращает управление. Если вирус не находит файла-носителя, то он выводит на экран и немедленно закрывает MessageBox с именем файла.
При поиске, заражении и других действиях вирус использует стандартные функции Windows95, экспортируемые из KERNEL32.DLL и USER32.DLL:
CopyFileA, ExitProcess, FindNextFileA, GetCommandLineA, WinExec, lstrcpyA, FindFirstFileA, MessageBoxA
Вирус также содержит строки:
*.EXE .COM DeleteFileA
Последняя строка является также именем экспортируемой функции (уничтожение файлов), однако вирус ее нигде не использует.
Win95.Punch.9262
Заражает Win95 EXE-файлы (формата PE - Portable Executable). Является первым известным "резидентным" Win95-вирусом: загружается в систему как VxD-драйвер, перехватывает обращения к файлам и записывается в их конец.Заражает систему в два этапа. При запуске зараженного EXE-файла вирус записывает на диск VxD-файл (дроппер вируса), содержащий код вируса в формате VxD, и регистрирует этот VxD в файле SYSTEM.INI. Затем возвращает управление программе-носителю и более никак не проявляется вплоть до следующей перезагрузки компьютера. Когда Win95 загружается в очередной раз, в системную память загружаются все VxD-драйверы, описанные в SYSTEM.INI, включая VxD с кодом вируса. Вирус остается резидентно и затем заражает открываемые EXE-файлы формата PE.
Вирус имеет несколько ошибок, некорректно заражает некоторые системные файлы и в результате вызывает большое число системных сообщений об ошибках. Скорее всего, этот вирус не будет широко распространен и не успеет нанести какого-либо существенного вреда. С другой стороны, ошибки в вирусе могут быть исправлены, и тогда его последующие модификации окажутся более "живучими".
Содержит несколько текстовых строк. Часть из них используется при обращении к системным ресурсам и функциям:
KERNEL32 CreateFileA WriteFile ReadFile SetFilePointer CloseHandle
Другие строки используются при поиске и модификации системных файлов и заражении системы:
c:\win95\system.ini c:\windows\system.ini c:\win95\system\vvfs.vxd c:\windows\system\vvfs.vxd
В PE-заголовок вирус записывает секцию с именем:
QuantumG
Последняя строка - подпись автора вируса:
Beating You to the Punch in the '97 (almost)
Запуск зараженного EXE-файла
При запуске зараженного EXE-файла вирус записывает в системный каталог свой VxD-дроппер. Для этого он вызывает системные функции KERNEL32 GetLogicalDriveStringsA (#350) и SetEnvironmentVariableA (#372) и определяет системные параметры и указатели на функции работы с файлами CreateFileA, WriteFile, ReadFile, SetFilePointer, CloseHandle (зачем так сложно - непонятно, все можно было бы сделать значительно проще).
Используя эти указатели, вирус вызывает функцию CreateFileA и пытается создать файл C:\WIN95\SYSTEM\VVFS.VXD. Если такого каталога нет (функция возвращает ошибку), он создает файл C:\WINDOWS\SYSTEM\VVFS.VXD. Если и такой каталог не обнаружен, вирус возвращает управление программе-носителю. В противном случае он записывает в этот файл 9262 байта кода и данных, которые имеют формат VxD-файла (LE EXE-файл) и содержат код вируса.
Затем вирус открывает файл - либо C:\WIN95\SYSTEM.INI, либо C:\WINDOWS\SYSTEM.INI, ищет в нем строку "ice=" ("device=") и вставляет в нее строку вызова только что созданного VxD-файла:
перед заражением: device=some.vxd после заражения: device=vvfs.vxd,some.vxd
При этом вирус проверяет строку "device=" и не записывает повторный вызов своего VxD, если он там уже есть. Затем вирус закрывает файл SYSTEM.INI и возвращает управление программе-носителю.
В результате заражения системы в каталоге SYSTEM присутствует новый VxD-файл, а файл SYSTEM.INI модифицирован таким образом, что при очередных загрузках Win95 загружается и новый VxD.
Загрузка Win95 и перехват IFS API
При загруке Win95 вирус в VxD-файле получает управление, проверяет номер версии DOS IFS Manager (DOS Installable File System Manager), перехватывает вызовы IFS API и остается в памяти Win95 как VxD-драйвер.
Перехват IFS API очень похож на перехват INT 21h, используемый DOS'овскими TSR-программами. Этот перехват "вклинивается" между IFS Manager и системными файловыми драйверами. Перехватчик получает управление непосредственно перед системными драйверами и может выполнять практически любые действия на файловом уровне.
Вирус перехватывает только одну функцию - открытие файла (OpenFile - IFSFN_OPEN) и, следовательно, заражает файлы при их открытии (при этом VxD перехватывает все вызовы на открытие независимо от "принадлежности" активной программы - Win95 или окно DOS под Win95, и заражает также файлы, открываемые в окне DOS).
Заражение EXE-файла
При заражении файла вирус проверяет его формат и заражает только EXE-файлы (MZ в начале файла), которые имеют формат Portable Executable (PE). Затем он считывает и корректирует необходимые поля PE-заголовка, добавляет в PE-заголовок описание одной новой секции с именем "QuantumG", записывает свой код и данные (всего - 10185 байт) в конец файла в только что созданную секцию. Вирус также правит секцию ресурсов и описание ресурсов для того, чтобы иметь возможность обращаться к функциям KERNEL32 при запуске зараженного EXE-файла.
Для того чтобы не заражать файлы дважды, он проверяет имя последней секции файла и сравнивает ее со строкой "QuantumG".
Заражение: прочие замечания
При заражении файлов вирус не обращает внимания на их атрибуты и время/дату создания или модификации. В результате вирус не заражает файлы с атрибутом ReadOnly и изменяет время/дату последней модификации файла. Также не проверяет расширение имени файла, а только его формат. По этой причине зараженными оказываются не только *.EXE-файлы, но и DLL, CPL, DRV и прочие файлы, имеющие формат PE EXE.
Вирус при заражении записывает в VxD и EXE-файлы различное число байт - 10185 при заражении PE EXE и 9262 при заражении VxD. Это вызвано тем, что VxD и PE EXE-файлы имеют различные форматы и загружаются в память различными способами, а следовательно, должны иметь различные точки входа. Поэтому вирус при заражении EXE-файлов дописывает к ним дополнительный блок кода, который записывает в каталог SYSTEM VxD-файл вируса. Этот блок располагается перед основным кодом вируса:
VxD-дроппер Зараженный EXE-файл +--------------------------+<--+ +--------------------------+ |VxD DOSstub и LE-заголовок| | |заголовок, код и данные | |--------------------------| | |программы-носителя | |Перехват API и процедура |+--|>|--------------------------| точка входа |заражения || | |Процедура записи VxD,запи-| |--------------------------|+ | |сывает в VxD все, что ниже| |Процедура записи VxD | +>+>|--------------------------| |в каталог SYSTEM | | |VxD DOSstub и LE-заголовок| |--------------------------|-+ |--------------------------| |прочие данные | |Перехват API и процедура | +--------------------------+<+ |заражения | | |--------------------------| | |Процедура записи VxD | | |в каталог SYSTEM | | |--------------------------| | |прочие данные | +-->+--------------------------+
Длина EXE-файлов при заражении возрастает на различные значения: вирус сначала увеличивает длину файла до границы секции, а затем уже дописывает к нему свои 10185 байт.
Тестирование
Для заражения файлов использовалась версия Windows95 4.00.950. Зараженные EXE-файлы записывали VxD-файл и модифицировали SYSTEM.INI без всяких проблем и побочных эффектов (зависание системы, сообщения Windows об ошибках).
Проблемы возникли при загрузке Win95 с VxD-дроппером. Win95 отказалась грузится, объяснив причину своего недовольства стандартным синим экраном сообщения о системной ошибке и примерно таким текстом:
A fatal exception 0E has occurred at xxx:xxxxxx. The current application will be terminated.
Затем загрузка продолжилась, но после очередного сообщения "A fatal exception 0C ..." система окончательно зависла.
После перезагрузки в DOS в каталоге Win95 был обнаружен зараженный файл USER32.DLL, который был заменен на незараженный и объявлен Read-Only. На этот раз Win95 загрузилась, хотя несколько раз было выдано сообщение:
This program has performed an illegal operation and will be shut down. If the problem persists, contact the program vendor.
(Интересно, кто является vendor'ом зараженной программы - автор вируса?)
После перезагрузки в DOS было обнаружено еще несколько зараженных файлов: EXPLORER.EXE в каталоге Win95 и COMCTL32.DLL, MPREXE.EXE, MPRSERV.DLL, MPR.DLL, MSPWL32.DLL, SHELL32.DLL в каталоге SYSTEM.
Зараженные файлы были восстановлены, а метка Read-Only была поставлена на все EXE- и DLL-файлы. Этого оказалось мало - при очередной попытке "под нож" попали файлы DESK.CPL и WINSPOOL.DRV (оба являются файлами формата PE EXE). После чего все файлы формата PE EXE были объявлены Read-Only и система загрузилась нормально.
Затем вирус без проблем заразил несколько обычных приложений (например, WRITE.EXE). Однако при их запуске Win95 в некоторых случаях объявляла об "illegal operation", но зараженные программы работали вполне нормально. Проблемы возникли при заражении специальных небольших файлов-насадок ("дрозофил"), вирус увеличил их размеры до 9Mb (!).
Итого
Не исключено, что сей вирус вполне работоспособен под какой-либо определенной версией Windows95 или в какой-либо определенной конфигурации. Однако очень маловероятно, что он будет широко распространен: в нем есть ошибки (в некоторых случаях - летальные), которые проявляются под любой версией Win95.
Win95.MrKlunky
Резидентный (VxD) Win95-вирус. Заражает файлы и систему способом, практически совпадающим с "Win95.Punch" . При запуске зараженного файла создает на диске файл MRKLUNKY.VXD, записывает туда свой VxD-дроппер и регистрирует его в системном окружении Win95. При загрузке Win95 загружает этот VxD в память, вирус перехватывает вызовы IFS API и заражает PE EXE-файлы при их открытии.При заражении файлов вирус создает новую секцию с именем "MrKlunky", правит PE-заголовок и записывает себя в конец файла. Опознает уже зараженные файлы по идентификатору 00F00F00h, который записывает в DOS EXE-заголовок по адресу 28h.
Содержит ряд ошибок, например не всегда записывает в заголовок зараженных файлов новый адрес точки входа. В результате код вируса присутствует в файле, однако никогда не получает управления. Вирус использует прямые вызовы в ядро Win95, что может привести к системным сообщениям об ошибке, если данная версия Win95 "несовместима" с вирусом.
Создает файл C:\LOG.LOG и записывает туда имена зараженных файлов. Содержит строки, большая часть из которых является именами функций Win95:
MRKLUNKY MrKlunky.VxD KERNEL32 CloseHandle CreateFileA FlushFileBuffers GetLastError GetSystemDirectoryA GetWindowsDirectoryA SetEndOfFile WriteFile ADVAPI32 RegCloseKey RegCreateKeyExA RegSetValueExA Start SYSTEM\CurrentControlSet\Services\VxD\MrKlunky StaticVxD GetProcAddress GetModuleHandleA MRKLUNKY MRKLUNKY_DDB
Win95.Jacky
Безобидный нерезидентный Win95/NT-вирус. Его длина - 1440 байт, однако при заражении файлов он выравнивает их на границу секции, и длины файлов увеличиваются на значение, большее 1440. При запуске вирус сканирует ядро Win95/NT и определяет адреса системных функций работы с файлами (см. ниже список функций), затем ищет NewEXE-файлы (Portable Executable) и записывается в их конец.Является первым известным мне вирусом, использующим новый прием заражения PE-файлов. При заражении вирус не создает в файле новую секцию, но увеличивает размер последней секции файла, изменяет ее характеристики (флаги) и записывает туда свой код. В результате в файле оказываются измененными только адрес точки входа, размер и характеристики последней секции.
Также является первым известным мне Win95-вирусом, работающим без проблем и ошибок на моей тестовом (Windows95) компьютере. Под NT - не пробовал.
Содержит зашифрованные строки, часть которых является списком используемых вирусом функций:
KERNEL32 GetModuleHandleA GetProcAddress *.EXE CreateFileA CreateFileMappingA CloseHandle UnmapViewOfFile MapViewOfFile FindFirstFileA FindNextFileA FindClose SetFileAttributesA SetFilePointer SetEndOfFile SetFileTime
To My d34d fRi3nD c4b4n4s.. A Win/NT/95 ViRuS v1.00. By: j4cKy Qw3rTy / 29A. jqw3rty@cryogen.com
Win95.Mad.2736
Неопасный нерезидентный самошифрующийся вирус для Windows95, написан в России (предположительно - Москва). Возможно, что был положен автором вируса на станции BBS. Заражает выполняемые файлы Windows95 (PE EXE-файлы). Является первым известным Windows95-вирусом, который шифрует свой код. Работает вполне корректно и побочных явлений (зависание системы, сообщения об ошибках) не вызывает.При запуске ищет PE EXE-файлы в текущем и родительских каталогах и записывается в их конец. При заражении не добавляет новой секции к файлу, а увеличивает размер последней секции, записывает туда свой код, изменяет характеристики этой секции и адрес стартовой процедуры.
В зависимости от системного времени выводит MessageBox:
Multiplatform Advanced Destroyer Hello user your computer is infected by MAD virus Welcome to my first virus for Windoze95... Distribution & Copyright by Black Angel 1997
Содержит также строки:
GetProcAddress GetModuleHandleA KERNEL32 USER32 MessageBoxA FindFirstFileA CreateFileA CloseHandle ReadFile WriteFile SetFilePointer FindNextFileA GetLocalTime SetCurrentDirectoryA GetCurrentDirectoryA *.eXe [MAD for Win95] version 1.0 BETA! (c)Black Angel`97
Win95.Spawn.4096
Компаньон-вирус. Является EXE-файлом формата PE (Win95). Ищет в текущем каталоге EXE-файлы (любые - DOS, Win, и т.д.), замещает их своей копией, предварительно сохранив файлы с расширением .COM.После заражения четырех файлов меняет ComputerName и метку текущего диска на "Murkry". Должен был выводить MessageBox, но не делает этого (видимо, закомментировано в исходнике при отладке):
Spawn95 Either 4 or all files in this directory are infected!!!
'Making computers more interesting Through the creation of `tronic life' Murkry/1997
Содержит текстовые строки:
KERNEL32.dll USER32.dll CopyFileA ExitProcess FindFirstFileA CreateProcessA GetCommandLineA SetComputerNameA SetVolumeLabelA lstrcpyA FindNextFileA MessageBoxA
Win95.Puma.1024
Нерезидентный Win95-вирус. Заражает PE-файлы в текущем каталоге. Признак зараженности - наличие сегмента с именем ".murkry". Содержит текстовые строки:FindFirstFileA FindNextFileA CreateFileA _lclose SetFilePointer ReadFile WriteFile *.EXE .murkry
Win95.Xine2.7363
Нерезидентный Win95-вирус. Ищет и заражает PE-файлы в текущем каталоге. При заражении создает в файле новую секцию с именем ".Xine2", записывает туда свой код и модифицирует заголовок файла. При вызове функций поиска, чтения и записи файлов использует прямые вызовы в ядро Win95. Содержит в своих данных ZIP-файло с исходным текстом вируса.
Win95.Harry
Опасный резидентный вирус. Заражает EXE-файлы Win95 (PE NewEXE). При запуске зараженного файла копирует себя в ядро Win95 в код драйвера VMM (если там есть свободное место). Соответственно, вирус завешивает Win95 когда драйвер VMM обращается к области данных, занятой вирусом.Затем вирус перехватывает IFS API и заражает NewEXE-файлы при их открытии. При заражении вирус записывается в конец файла и модифицирует его PE-заголовок.
При инсталляции вирус изменяет курсор мыши - загружает изображение шприца. Для этого вирус создает файл C:\SYRINGE.CUR и регистрирует его в системе.
Вирус содержит строки:
Fuck Harry by Quantum / VLAD \Control Panel\Cursors Arrow
Win95.Lizard
Очень опасный резидентный Win95/DOS-вирус. Заражает DOS EXE-файлы и создает VxD-дроппер (Win95). В DOS EXE-файлах зашифрован. В зависимости от системного таймера уничтожает EXE-файлы вместо их заражения. Содержит текст:Lizard by Reptile
При запуске зараженного DOS EXE-файла вирус создает свой VxD-дроппер в одном из возможных каталогов авто-запуска Win95:
c:\windows\system\iosubsys\lizard.vxd c:\win95\system\iosubsys\lizard.vxd c:\windows.000\system\iosubsys\lizard.vxd
Если такие каталоги отсутствуют, вирус отдает управление программе-носителю. В противном случае при очередных загрузках Windows95 автоматически загружает VxD-драйвера (включая вирус) из каталогов авто-запуска. Вирус получает управление, перехватывает V86 INT 21h и при вызовах функций Execute, Create, Open, Close, FindFirst ищет и записывается в конец DOS EXE-файлов.
Win95.Anxiety, семейство
Опасные резидентные вирусы. Являются вариантом вируса "Win95.Harry" и совпадают с ним на 90%. Заражают EXE-файлы Win95 (PE NewEXE). При запуске зараженного файла копируют себя в ядро Win95 в код драйвера VMM (если там есть свободное место). Затем перехватывают IFS API и заражают NewEXE-файлы при их открытии. При заражении вирусы записываются в конец файла и модифицируют его PE-заголовок. Содержат строки:"Anxiety.1358": Anxiety.Poppy.95 by VicodinES
"Anxiety.1823":
Anxiety.Poppy.II by VicodinES ...feel the pain, mine not yours!
all alone and I don't understand a cry for help and no one answers will I last for more than a week will I taste the gunpowder can I end it all and make it easy is it sick to ask | is it safe to cry will I be gone soon will I last will you care will I?
--
if you don't hear from me in a while - say a prayer for me because I have left, never to return.
--
peaceful goodnight, hopefully... Vic
--
Win95.Zombie.4584
Неопасный нерезидентный зашифрованный Win95-вирус. При запуске сканирует ядро Win95 и определяет адреса системных функций работы с файлами (см. ниже список функций). Затем ищет NewEXE-файлы (Portable Executable) в каталоге Windows, в дереве подкаталогов дисков C:, D:, E: и F: и заражает их.При заражении создает в PE-заголовке новую секцию ".Z0MBiE", модифицирует адрес точки входа и записывает себя в конец файла. При заражении файлов вирус также выравнивает их на границу секции, и длины файлов увеличиваются на значение, большее действительной длины вируса. Также как и другие Win95-вирусы, использующие этот прием, заражает некоторые файлы некорректно - при их запуске Windows выводит стандартное сообщение об ошибке в программе.
Создает на дисках файлы ZSETUP.EXE и записывает в них DOS-вирус "Zombie.VPI".
Содержит строки, часть которых является списком используемых вирусом функций:
ExitProcess FindFirstFileA FindNextFileA CreateFileA SetFilePointer ReadFile WriteFile CloseHandle GetCurrentDirectoryA SetCurrentDirectoryA GetWindowsDirectoryA GetCommandLineA WinExec GetFileInformationByHandle
.Z0MBiE Z0MBiE 1.01 (c) 1997 My 2nd virii for mustdie Tnx to S.S.R. \ZSetUp.EXE
Win95.Memorial 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 и уничтожает его.Вирус также уничтожает в системном реестре информацию и данные, используемые некоторыми антивирусами:
Регистр '\System\CurrentControlSet\Services\Vxd' - уничтожает ключи 'VETMON95', 'VETMACRO', 'NAVAP', 'virusafe', 'WIMMUN32'.
Секция '\SOFTWARE\Microsoft\Windows\CurrentVersion\Run' - уничтожаются 'NORTON AUTO-PROTECT', 'TBAV for Windows 95', 'Anywhere Antivirus Validation', 'Vshwin32EXE', 'ViruSafe'.
Секция '\SOFTWARE\McAfee\ScreenScan' - уничтожаются 'bEnableScreenScan', 'bScanAllFiles', 'bScanSubDirs'.
'\SOFTWARE\Cybec\VET Antivirus for Win32\' - уничтожаются 'Actions\InfectedAction', 'Actions\SuspectAction', 'Memory\Enabled', 'Resident\FileCheck', 'Resident\InfectedAction', 'Resident\SuspectAction', 'Scanning\Scan All Files', 'Scanning\Scan Type', 'Scanning\Skip Renamed', 'Scanning\Subfolders' и устанавливается новый 'Scanning\Extension List': 'bin, dll, doc, drv, ovl, sys, dot'.
Заражение COM- и EXE-файлов
Заражение DOS COM- и EXE-файлов производится достаточно стиандартными методами - вирус записывает свой код в конец файла и модифицирует его заголовок.При заражении PE-файлов вирус добавляет новую секцию в PE-заголовок, модифицирует необходимые поля заголовка и записывает свой код также в конец файла. Вирус при этом также шифрует свой код при помощи "олигоморфного" алгоритма: код расшифровщика состоит их 11 частей, которые переставляются между собой или заменяются на анологичные по действию инструкции. Всего может встретиться только 96 различных вариантов кода расшифровщика.
Win95.Yurn
Заражает выполняемые файлы Windows95 (PE EXE - Portable Executable) и системный файл KERNEL32.DLL. При заражении записывается в конец файла: увеличивает размер последней секции файла, дописывает туда свой код и модифицирует PE-заголовок. Для того, чтобы получить управление при запуске зараженных EXE-файлов, вирус изменяет адрес точки входа (EntryPoint). При заражении KERNEL32.DLL использует более сложный прием: ищет в файле процедуру GetFileAttributesA и записывает в нее команду перехода на свой код CALL_Virus. В результате адрес точки входа при заражении KERNEL32.DLL не меняется, но вирус перехватывает управление при обращениях к атрибутам файлов.При запуске зараженного EXE-файла вирус ищет в ядре Windows95 одиннадцать подпрограмм и использует их при поиске и заражении файлов:
GetTickCount, GetWindowsDirectory, SetFileAttributes, CreateFileA, SetFilePointer, ReadFile, WriteFile, FindClose, GetSystemDirectoryA, GetFileAttributesA, CopyFileA
При вызове перечисленных подпрограмм вирус использует прямые вызовы ядра Windows.
Затем вирус ищет файл KERNEL32.DLL в каталоге SYSTEM, копирует его в каталог WINDOWS, заражает скопированный файл и возвращает управление программе-носителю.
При загрузке зараженного KERNEL32.DLL вирус остается в памяти Windows как часть ядра, перехватывает системную процедуру GetFileAttributesA и затем заражает PE EXE-файлы при чтении их атрибутов.
Вирус содержит ошибки и может испортить заражаемые файлы и завесить систему. Содержит строки:
0 [YURN] by Virogen 0 \KERNEL32.DLL
Win95.Lorez
Заражает выполняемые файлы Windows95 (PE EXE - Portable Executable) и системный файл KERNEL32.DLL. Использует метода заражения, совпадающий с вирусом "Win95.Yurn" : записывается в конец файла и изменяет адрес точки входа (EntryPoint), а в случае KERNEL32.DLL перехватывает вызов GetFileAttributesA.Вирус содержит ошибки и может испортить заражаемые файлы и завесить систему. Содержит строки:
0 [LoRez] v1 by Virogen [NoP] 0 \KERNEL32.dll GetTickCount GetWindowsDirectoryA SetFileAttributesA CreateFileA SetFilePointer ReadFile WriteFile CloseHandle GetSystemDirectoryA CopyFileA GetFileTime SetFileTime ExitProcess GetFileAttributesA
Win95.DarkSide
Неопасный нерезидентный Win95-вирус. Ищет PE EXE-файлы и записывается в их конец: увеличивает размер последней секции, дописывает туда свой код и модифицирует адрес точки входа. Для того, чтобы получить доступ к необходимым функциям Win95 сканирует Kernel32. Для определения уже зараженных файлов записывает в поле контрольной суммы в DOS-заголовке строку "LT".9 марта выводит MessageBox:
DarkSide Nothing Going to Save you From a Love that's Blind Slip to the DarkSide and Cross that Line March 9, 1986
Также содержит строку, которая является списком функций, используемых вирусом:
CreateFileA _lclose ReadFile FindFirstFileA FindNextFileA WriteFile SetFilePointer LoadLibraryA GetProcAddress USER32 MessageBoxA
Win95.HPS, aka Hanta
Заражает PE-файлы (Portable Executable). При запуске инсталлирует себя в ядро Windows95/98, перехватывает системные события и записывается в конец PE EXE-файлов, к которым идет обращение. Длина вируса - 5124 байт. Содержит строку текста:< Hantavirus Pulmonary Syndrome (HPS) Virus BioCoded by GriYo / 29A >
При заражении файлов шифрует себя полиморфик-кодом и записывает результат в последнюю секцию файла, предварительно увеличив ее размер, и затем меняет адрес точки входа в заголовке файла. Размер полиморфик-цикла вирьируется от заражения к заражению, поэтому длина файлов может быть увеличена на различные значения.
Полиморфик-механизм вируса является "медленным", т.е. меняется не при каждом заражении файла. Более того, конкретная копия вируса при заражении последующих файлов использует один и тот же полиморфик-цикл с теми же ключами, т.е. "прямые потомки" каждой отдельно взятой копии вируса будут иметь один и тот же полиморфик-код, а изменение полиморфик-цикла происходит только при запуске "потомков".
При запуске зараженных файлов управление передается в конец кода вируса, где расположен полиморфный расшифровщик его кода. Восстановив код вируса в первоначальном виде, расшифровщик передает управление на процедуру инсталляции вируса в пямять Windows. Эта процедура сканирует ядро Windows на предмет кодов KERNEL32.DLL, ищет таблицу экспортируемых имен и определяет адрес функции VxDCall. Затем этот адрес используется вирусом при вызове файловых и прочих необходимых вирусу функций.
Затем вирус выделяет себе блок памяти (используя при этом недокументированные функции VMM PageReserve и PageCommit), копирует себя в этот блок, сканирует код обработчика VxDCall в ядре Windows и записывает туда вызов собственной процедуры. Как результат вирус инсталлирует себя в память Windows как часть ядра: код вируса расположен в shared-памяти, а обработчик VxDCall Windows передает управление на код вируса.
Для предотвращения критических ошибок при сканировании ядра Windows (если вдруг вирус залез "не туда куда надо") им заблаговременно перехватывается Structured Exception Handling (SEH). Этот перехват также работает как анти-отладочный прием.
Свою уже установленную в память Windows копию вирус определяет по вызову VxDCall GetDate с регистрами: ESI='HPS!' и EDI='TSR?', копия вируса возвращает 'YES!' в регистре ESI.
Перехватчик VxDCall в вирусе обрабатывает только вызовы Int21Dispatch и пропускает все прочие, при этом вирус обращает внимание только на 9 функций INT 21h: GetDate, Open ReadOnly, Open WriteOnly, FindFirst/Next LongNames, Rename LongName, Create/Open LongName. При обращениях к файлам (открытие, переименование) вирус сравнивает их расширения имени с EXE, SRC и SYS и затем заражает такие файлы. После заражения вирусом удаляются антивирусные файлы данных: ANTI-VIR.DAT, CHKLIST.MS, AVP.CRC, IVB.NTZ.
При вызовах FindFirst/Next вирус возвращает уменьшенную длину зараженных файлов (т.е. является стелс-вирусом на таких вызовах). Однако вирус не перехватывает аналогичные DOS-вызовы и приращения длин зараженных файлов видны всеми утилитами DOS включая команду DIR.
Вирус проявляется видео-эффектом: если инсталляция вируса в память Windows произошла в субботу, то вирус затем переворачивает справа-налево изображения в неупакованных BMP-файлах. Повторного переворачивания не происходит - вирус помечает такие BMP-файлы записав в них метку DEADBABEh.
Демонстрации вирусных эффектов:
hps.JPG |
Win95.CIH
Резидентный вирус, работает только под Windows95 и заражает PE-файлы (Portable Executable). Имеет довольно небольшую длину - около 1Кб. Обнаружен "в живом виде" в Тайване в июне 1998 - был разослан автором вируса в местные Интернет-конференции. За последующую неделю вирусные эпидемии были зарегистрированы в Австрии, Австралии, Израиле и Великобретании, затем вирус был обнаружен и в нескольких других странах, включая Россию.При запуске зараженного файла вирус инсталлирует свой код в память Windows, перехватывает обращения к файлам и при открытии PE EXE-файлов записывает в них свою копию. Содержит ошибки и в некоторых случаях завешивает систему при запуске зараженных файлов. В зависимости от текущей даты стирает Flash BIOS и содержимое дисков.
Запись в Flash BIOS возможна только на соответсвующих типах материнских плат и при разрешающей установке соответственного переключателя. Этот переключатель обычно установлен в положение "только чтение", однако это справедливо не для всех производителей компьютеров. К сожалению Flash BIOS на некоторых современных материнских платах не может быть защищена переключателем: одни из них разрешают запись в Flash при любом положении переключателя, на других защита записи в Flash может быть отменена программно.
При тестировании вируса в лаборатории память Flash BIOS осталась неповрежденной - по непонятным причинам вирус завесил систему без каких-либо побочных эффектов. Однако из других источников известно, что вирус при определенных условиях действительно портит содержимое Flash BIOS.
После успешного стирания Flash-памяти вирус переходит к другой деструктивной процедуре: стирает информацию на всех установленных винчестерах. При этом вирус использует прямой доступ к данным на диске и тем самым обходит встроенную в BIOS стандартную антивирусную защиту от записи в загрузочные сектора.
Известно три версии вируса. Они достаточно похожи друг на друга и отличаются лишь незначительными деталями кода в различных подпрограммах. Версии вируса имеют различные длины, строки текста и дату срабатывания процедуры стирания дисков и Flash BIOS:
Длина Текст Дата срабатывания Обнаружен "в живом виде"
1003 CCIH 1.2 TTIT 26 апреля Да 1010 CCIH 1.3 TTIT 26 апреля Нет 1019 CCIH 1.4 TATUNG 26 каждого месяца Да - во многих странах
Технические детали
При заражении файлов вирус ищет в них "дыры" (блоки неспользуемых данных) и записывает в них свой код. Присутствие таких "дыр" обусловлено структурой 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.
Win95.Marburg
Нерезидентный полиморфичный Windows95-вирус. Заражает PE EXE-файлы (Portable Executable), которые ищет в текущем каталоге, затем в каталоге Windiws и System. По причине ошибок неспособен размножаться под Windows NT.При запуске зараженного файла вирус сканирует KERNEL32 и ищет адреса процедур: сначала GetModuleHandleA и GetProcAddress, затем адреса еще 22 процедур, необходимых вирусу для размножения. При сканировании KERNEL32 вирус использует метод, похожий на аналогичную процедуру в вирусе "Win32.Cabanas" : при заражении файлов вирус ищет в таблице импортируемых процедур ссылки на GetModuleHandleA и GetProcAddress и запоминает их адреса. Если таких ссылок нет, вирус сканирует код модуля KERNEL32.
Если указанные процедуры не обнаружены, вирус возвращает управление программе-носителю. В противном случае вирус выделяет блок памяти, копирует туда свой код (это необходимо для работы полиморфик-генератора), ищет PE-файлы и заражает их.
При заражении вирус шифрует свой код полиморфик-кодом и записывает результат в конец файла в последнюю секцию, предварительно увеличив ее размер. Полиморфик-генератор вируса практически полностью совпадает с аналогичным в вирусе "Win95.HPS" .
Для того чтобы получить управление при запуске, вирус тремя различными способами правит код и таблицы заражаемого файла в зависимости от его структуры: либо записывает свой адрес в PE-заголовок (заменяет стартовый адрес программы - практически все Windows-вирусы делают то же самое), либо не меняя стартового адреса записывает в точку входа в программу команду передачи управления на свой код JMP_Virus (прием вируса "Win32.Cabanas"), либо записывает в точку входа полиморфик-код, который затем передает управление на код вируса командой JMP_Virus.
Перед заражением вирус удаляет антивирусные файлы данных: ANTI-VIR.DAT, CHKLIST.MS, AVP.CRC, IVB.NTZ. При заражении вирус проверяет имена файлов и не заражает антивирусы PANDA, F-PROT, SCAN, также как и файлы, в именах которых присутствует символ 'V'.
В зависимости от системной даты (при запуске зараженного файла через три месяца и точно в тот час, когда он был заражен) вирус по случайным позициям на экране выводит несколько иконок ошибки Windows: красный крест в белом круге.
Вирус содержит текстовые строки (первый блок - имена функций, которые использует вирус):
GetModuleHandleA GetProcAddress CreateFileA CreateFileMappingA MapViewOfFile UnmapViewOfFile CloseHandle FindFirstFileA FindNextFileA FindClose VirtualAlloc GetWindowsDirectoryA GetSystemDirectoryA GetCurrentDirectoryA SetFileAttributesA SetFileTime DeleteFileA GetCurrentProcess WriteProcessMemory LoadLibraryA GetSystemTime GetDC LoadIconA DrawIcon
[ Marburg ViRuS BioCoded by GriYo/29A ] KERNEL32.dll USER32.dll
Win95.SGWW
Довольно простой Windows95-вирус. Ищет PE EXE-файлы в текущем каталоге и записывается в их конец: увеличивает размер последней секции, записывает туда свой код и изменяет стартовый адрес программы. Содержит ошибки и иногда портит файлы при заражении.Для доступа к функциям Windows95 (см. список ниже) сканирует список экспортируемых функций KERNEL32 и ищет адрес процедуры GetProcAddress, при помощи которого определяет адреса всех остальных процедур. Прием, использующийся в вирусе, работает только под Windows9x и не работает под WindowsNT.
Вирус содержит строки:
GetProcAddress FindFirstFileA FindNextFileA GetFileAttributesA SetFileAttributesA CreateFileA SetFilePointer ReadFile GetFileSize CreateFileMappingA MapViewOfFile UnmapViewOfFile CloseHandle
-=[ONE V1.0b by JFK/SGWW]=-
Win95.MarkJ
Резидентный Windows95-вирус: инсталлирует себя в память Windows95 и заражает открываемые PE EXE-файлы. Никак не проявляется. Содержит строки:Happy Birth Day to Mark J From Murkry MarkJ_I
При запуске зараженного файла управление получает код процедуры инсталляции вируса, которая копирует вирус в неспользуемый блок памяти в ядре Windows (данные VMM), перехватывает IFS API и затем заражает PE-файлы при их открытии. При заражении вирус создает новую секцию в конце файла, записывает туда свой код и записывает свою процедуру инсталляции (46 байт) в PE-заголовок.
Для исполнения своего кода в Ring0 (при перехвате IFS API) вирус использует неочевидный прием: он правит PE-заголовок таким образом, что загрузчик Windows95 копирует и выполняет часть кода вируса в блоке VMM по адресу C0000000h. Windows95 не защищает эту область Ring0, по этой причине в ней разрешена запись и даже более того - загрузка и выполнение секций PE-файлов, и вирус использует эту "особенность" защиты Windows95.