Среди огромного количества файловых вирусов, заражающих
выполнимые файлы в формате COM и EXE, существует несколько вирусов, способных
заражать пакетные файлы. Для этого используется весьма изощренный способ. Мы
рассмотрим его на примере вируса BAT.Batman. При заражении пакетного файла в
его начало вставляется текст следующего вида:
@ECHO OFF
REM [...]
copy %0 b.com>nul
b.com
del b.com
rem [...]
В квадратных скобках [...] схематично показано
расположение байт, которые являются ассемблерными инструкциями или данными
вируса. Команда @ECHO OFF отключает вывод на экран названий выполняемых команд.
Строка, начинающаяся с команды REM, является комментарием и никак не
интерпретируется.
Команда copy %0 b.com>nul копирует зараженный командный
файл в файл B.COM. Затем этот файл запускается и удаляется с диска командой del
b.com.
Самое интересное, что выполнимый файл B.COM, созданный
вирусом, до единого байта совпадает с зараженным командным файлом. Но командный
файл состоит из команд операционной системы, а выполнимый COM-файл - из команд
центрального процессора. Как же работает такая программа? Если переименовать
любой текстовый файл в выполнимый, просто заменив его расширение на COM, он,
конечно же, не будет работать. В лучшем случае компьютер просто зависнет.
Оказывается, что если интерпретировать первые две строки
зараженного BAT-файла как программу, она будет состоять из команд центрального
процессора, которые фактически ничего не делают.
Текст BAT-файла
|
|
|
Команды ассемблера
|
Описание команд
|
@ECHO OFF
|
@
|
40h
|
INC AX
|
Увеличить на единицу значение
регистра AX
|
|
E
|
45h
|
INC BP
|
Увеличить на единицу значение регистра
BP
|
|
C
|
43h
|
INC BX
|
Увеличить на единицу значение
регистра BX
|
|
H
|
48h
|
DEC AX
|
Уменьшить на единицу значение
регистра AX
|
|
O
|
4Fh
|
DEC DI
|
Уменьшить на единицу значение
регистра DI
|
|
|
20h
|
AND [BX+46],CL
|
Сравнить значение регистра CL со
значением ячейки памяти
|
|
O
|
4Fh
|
|
|
|
F
|
46h
|
|
|
|
F
|
46h
|
INC SI
|
Увеличить на единицу значение
регистра SI
|
|
|
0Dh
|
OR AX,520A
|
Записать в регистр AX результат
логической операции ИЛИ между текущим значением AX и 520Ah
|
|
|
0Ah
|
|
|
REM
|
R
|
52h
|
|
|
|
E
|
45h
|
INC BP
|
Увеличить на единицу значение
регистра BP
|
|
M
|
4Dh
|
DEC BP
|
Уменьшить на единицу значение
регистра BP
|
|
|
20h
|
AND [SI],DH
|
Записать в регистр AX результат
логической операции И между значением регистра DH и значением ячейки памяти
|
|
|
34h
|
|
|
Центральный процессор выполняет эти команды, а затем
начинает выполнять настоящий код вируса, записанный после признака комментария
REM. Получив управление, вирус перехватывает прерывания операционной системы и
оставляет себя резидентным в оперативной памяти компьютера.
Резидентная часть вируса следит за записью данных в файлы.
Если первая строка, записываемая в файл, содержит команду @echo, вирус считает,
что записывается командный файл и заражает его.
Вирус BAT.Winstart
Вирус BAT.Winstart использует такую же технологию, что и
вирус BAT.Batman. При запуске зараженного BAT-файла вирус копирует его в файл
Q.COM, который создается в корневом каталоге диска C:. Затем файл Q.COM
запускается уже как обычный выполнимый файл. В этот раз он устанавливает свой
резидентный модуль в оперативной памяти и переименовывает файл C:\Q.COM в
C:\WINSTART.BAT. Резидентный модуль вируса отслеживает момент запуска
пользователем других программ и создает файл WINSTART.BAT в текущем каталоге.
@ECHO OFF
:s%r#
COPY %0.BAT C:\Q.COM>NUL
C:\Q
[...]
Когда командный файл WINSTART.BAT интерпретируется,
как выполнимый файл в формате COM, то первая строка
@ECHO OFF будет состоять из команд центрального процессора, которые фактически
ничего не делают (см. вирус BAT.Batman). Вторая строка :s%r# будет воспринята
как команда перехода на код вируса, схематично показанный квадратными скобками.
Получив управление, основной коод вируса перехватывает прерывания операционной
системы и оставляет себя резидентным в оперативной памяти компьютера.
Почему командный файл вируса называется WINSTART.BAT?
Файл WINSTART.BAT содержит команды, выполняемые при запуске
операционной системой Windows в расширенном режиме. В этот файл обычно вносят
вызовы резидентных программ, которые должны быть доступны только приложениям
Windows. Программы MS-DOS, выполняемые в Windows, не имеют доступа к этим
резидентным программам. За счет этого для программ MS-DOS остается больше
свободной памяти.
Файл WINSTART.BAT не создается автоматически при установке
Windows. Он должен быть создан самим пользователем и записан в каталог Windows,
корневой каталог диска C: или любой другой каталог, определенный переменной
среды PATH.
Вероятно, автор вируса рассчитывал на то, что вирус
BAT.Winstart будет получать управление всякий раз, когда на компьютере
запускается операционная система Windows.
Файлы конфигурации AUTOEXEC.BAT и CONFIG.SYS, содержат команды, выполняемые во время загрузки
операционной системмы. В том числе в этих файлах перечислены драйвера и
программы, которые надо загрузить.
Обычно файлы AUTOEXEC.BAT и CONFIG.SYS создаются во время установки операционной системы и
модифицируются во время установки различного программного обеспечения.
Начинающие пользователи сами не изменяют эти файлы и не знают, что в них
находится.
Целый ряд вирусов, например Em, Nocopy, Some, DrWatson,
вносят изменения в файлы AUTOEXEC.BAT и CONFIG.SYS.
Эти вирусы создают на диске выполнимый файл, содержащий код вируса, а затем
наглым образом вставляют команду запуска этого файла в AUTOEXEC.BAT или CONFIG.SYS.
Неопасный нерезидентный вирус.
Создает в корневых каталогах дисков B: и C: файл VIRUS.BAT, содержащий вирусный
код. Вставляет в файл AUTOEXEC.BAT вызов файла VIRUS.BAT
Обращайте внимание на все изменения в файлах AUTOEXEC.BAT и
CONFIG.SYS. Изменение этих
файлов, не связанное с установкой нового программного обеспечения, может быть
результатом работы вируса.
Большая часть вирусов не ограничивается заражением
выполнимых файлов одного типа, например, только EXE- или
только COM-файлов. Такие вирусы могут заражать и EXE- и COM-файлы. Некоторые вирусы
также заражают еще и файлы оверлеев и драйверов.
Существуют файлово-загрузочные вирусы. Они распространяются
как через выполнимые файлы, так и через загрузочные секторы жестких дисков и
дискет. Если вы получите такой вирус, записав на свой компьютер зараженный
выполнимый файл, то получив управление, вирус запишет свою копию в главную
загрузочную запись или загрузочный сектор жесткого диска. Дальнейшее
распространение вируса происходит уже двумя путями - при копировании с
компьютера зараженных программ и через загрузочные секторы дискет, используемых
на компьютере.
За счет того, что один и тот же вирус может заражать
различные объекты - выполнимые файлы, драйверы, загрузочные секторы, он
получает больше возможностей для распространения.
Большинство вирусов заражают один и тот же файл или
загрузочную запись только один раз. Такие вирусы перед заражением нового файла
проверяют, не был ли он заражен раньше. В качестве признака, по которому
определяется заражение, могут использоваться нестандартное время создания файла
(операционная система MS-DOS
позволяет устанавливать время создания файла 62 секунды), заведомо неправильная
дата создания файла (например 2001 год). Более сложные вирусы определяют факт
заражения поиском своей сигнатуры и т. д.
Самые примитивные вирусы могут заражать один файл по
нескольку раз. Размер такого файла будет постоянно увеличиваться, значительно
сокращая объем доступной дисковой памяти.
Несколько разных вирусов могут заразить один и тот же файл
или загрузочную запись. Когда такой файл запускается, то сначала управление
получает один вирус, затем другой и наконец выполняется сама зараженная
программа.
Целый ряд вирусов, заражающих
выполнимые файлы. Некоторые версии вируса в определенное время исполняют на
встроенном динамике компьютера мелодию Yankee Doodle. Интересно, что этот вирус
борется с загрузочным вирусом Ball. Он изменяет его код
таким образом, что вирус Ball через некоторое время
самостоятельно удаляет себя с жесткого диска компьютера.
Летом 1991 года разразилась эпидемия нового вируса.
Его проявления были весьма интересны. Во время копирования зараженных файлов в
любом случае копировались только 1024 байта, несмотря на то, что фактические
длины файлов были совершенно другие. Проверка целостности структуры файловой
системы с помощью программы CHKDSK или Norton Disk Doctor выявляла наличие
большого количества потерянных кластеров и пересечений файлов. Если, обнаружив
нарушение в структуре файловой системы, пользователь пытался ее исправить, то
все зараженные файлы оказывались испорченными.
Однако, несмотря на то что внешне зараженные программы
кажутся совершенно неработоспособными, они работали как обычно. Так появился
новый тип вируса, впоследствии названный DIR.
Способ размножения вируса DIR значительно отличается от
используемых обычными файловыми вирусами и вирусами-спутниками. Тем не менее,
мы отнесли его к группе файловых вирусов, так как объектом нападения становятся
именно исполнимые файлы программ.
Чтобы лучше понять механизм распространения вируса DIR, мы проведем
небольшой экскурс в структуру файловой системы MS-DOS. Более подробную
информацию вы найдете в шестой главе этой книги.
При описании загрузочных вирусов мы уже рассказывали, что
данные хранятся на жестких дисках и дискетах в отдельных секторах. Несколько
секторов, расположенных рядом, называют кластером. Когда на диске создается
новый файл, операционная система отводит для него несколько свободных
кластеров. Кластеры файла не обязательно должны следовать друг за другом.
Поэтому операционная система хранит список номеров всех кластеров,
распределенных файлу, в специальной таблице. Эта таблица называется таблицей
распределения файлов (FAT - File Allocation Table).
В таблице распределения файлов для каждого кластера есть
один элемент. Его значение характеризует состояние кластера. Например,
свободный кластер отмечается нулевым значением, а кластер, непригодный для
использования, отмечается числом FF7h (FFF7h). Если кластер распределен файлу,
то соответствующий элемент FAT содержит номер следующего кластера файла.
Последний кластер файла отмечается числом в диапазоне от FF8h до FFFh (от FFF8h
до FFFFh).
Сама таблица FAT находится практически сразу после
загрузочной записи логического диска. Точное ее расположение описано в специальной
структуре данных, записанной в загрузочном секторе. Однако таблица FAT не
содержит ни названий файлов, ни других их атрибутов. Для этого операционная
система поддерживает другую служебную структуру, которая называется корневым
каталогом. Каждый логический диск имеет собственный корневой каталог.
В корневом каталоге описаны файлы и другие каталоги, которые
в нем содержатся. Описание каждого файла и каталога включает его имя с
расширением, дату и время создания, длину (для каталога она равна нулю),
атрибуты и зарезервированное поле, которое не используется. Еще в описании
файла хранится номер первого кластера, отведенного файлу или каталогу. Получив
этот номер, операционная система может узнать все остальные номера кластеров
файла через таблицу FAT (рис. 1.8).
Другие каталоги имеют точно такую же структуру, что и
корневой каталог. В них также находятся описания файлов и других подкаталогов.
Когда пользователь запускает файл на выполнение,
операционная система просматривает описания файлов в текущем каталоге
текущего
логического диска. Если файл с нужным именем найден, операционная
система
узнает из описания файла номер первого кластера файла, а затем по
таблице FAT определяет остальные номера кластеров. После этого данные из
кластеров файла
считываются в оперативную память. Здесь они объединяются в один
непрерывный
участок, даже если кластеры файла были разбросаны по всему логическому
диску.
Затем операционная система выполняет подготовительную
работу, зависящую от типа файла (COM- или EXE-файл) и передает ему управление.
На этом загрузка программы завершается и программа начинает работать.
Заражение вирусом DIR происходит следующим образом. Вирус
DIR копирует свой код в один из кластеров заражаемой дискеты или логического
диска. Этот кластер помечается в таблице FAT как конец файла. Затем вирус
меняет описания файлов COM и EXE в структурах каталогов. Вирус записывает
вместо номера первого кластера файла номер кластера, содержащего его код (рис.
1.9). Настоящий номер первого кластера зараженного файла шифруется и
записывается в неиспользуемую область описания файла.
Рис. 1.8. Структура каталогов
Когда пользователь запускает один из зараженных файлов, с
диска считывается только один кластер, содержащий код вируса. Таким образом,
вирус сразу получает управление. Он устанавливает себя резидентным в
оперативной памяти и перехватывает все обращения к диску. Затем вирус
определяет настоящее расположение файла программы и загружает ее.
Рис. 1.9. Структура каталогов после заражения вирусом DIR
Если теперь операционная система будет обращаться к
каталогу, вирус передаст ей правильные значения для номеров первых кластеров
зараженных файлов.
Впоследствии появилось несколько разновидностей вируса DIR,
отличающихся друг от друга в основном только скрытыми функциями, выполняемыми
вирусами. Для лечения вируса DIR и его разновидностей вы можете использовать
антивирусную программу Aidstest, однако можно обойтись и без антивируса,
достаточно скопировать выполнимые файлы, заменив их расширение, например, на CO_ и EX_ соотвественно.
Источник: http://www.frolov-lib.ru/books/step/v05/ch1.htm |