КУРСОВАЯ РАБОТА
на тему:
"Работа с каталогами и подкаталогами. Работа с файлами"
Орел, 2009
Введение
Компьютерный вирус – разновидность компьютерных программ, отличительной особенностью которой является способность к размножению (саморепликация). В дополнение к этому вирусы могут повредить или полностью уничтожить все файлы и данные, подконтрольные пользователю, от имени которого была запущена заражённая программа, а также повредить или даже уничтожить операционную систему со всеми файлами в целом.
Неспециалисты к компьютерным вирусам иногда причисляют и другие виды вредоносных программ, такие как трояны, программы-шпионы и даже спам. Известны десятки тысяч компьютерных вирусов, которые распространяются через Интернет по всему миру, организуя вирусные эпидемии.
Вирусы распространяются, внедряя себя в исполняемый код других программ или же заменяя собой другие программы. Какое-то время даже считалось, что, являясь программой, вирус может заразить только программу – какое угодно изменение не программы является не заражением, а просто повреждением данных. Подразумевалось, что такие копии вируса не получат управления, будучи информацией, не используемой процессором в качестве инструкций. Так, например неформатированный текст не мог бы быть переносчиком вируса.
Однако, позднее злоумышленники добились, что вирусным поведением может обладать не только исполняемый код, содержащий машинный код процессора. Были написаны вирусы на языке пакетных файлов. Потом появились макровирусы, внедряющиеся через макросы в документы таких программ, как Microsoft Word и Excel.
Некоторое время спустя взломщики создали вирусы, использующие уязвимости в популярном программном обеспечении (например, Adobe Photoshop, Internet Explorer, Outlook), в общем случае обрабатывающем обычные данные. Вирусы стали распространяться посредством внедрения в последовательности данных (например, картинки, тексты, и т.д.) специального кода, использующего уязвимости программного обеспечения.
1. Файловые вирусы в MS DOS
По одной из классификаций вирусы делят на файловые и загрузочные (бутовые). К файловым вирусам относят вирусы, поражающие запускаемые файлы (программы), а к загрузочным – вирусы, активизирующиеся через главную загрузочную запись или через ВООТ – сектор. Деление довольно условное, так как стали появляться вирусы, сочетающие в себе свойства тех и других. Мы, однако, традиционно разделим вирусы, обитающие в среде MS DOS на файловые и бутовые (загрузочные). В разделе IV мы поговорим о других видах. Файловые вирусы (ФВ) могут заражать как СОМ так
ЕХЕ – программы. Ниже перечислены стандартные способы заражения:
1. Способы заражения СОМ-программ. На Рис. 1 представлены три способа заражения СОМ-программ. Легко заметить, что заражение осуществляется так, чтобы вирус получал управление сразу после запуска программы. Как Вы понимаете, команда JMP символизирует здесь просто передачу управления. Вместо нее с тем же успехом пользуются командами RET или CALL с соответствующей корректировкой стека.
2. Заражение ЕХЕ – программ. Заразить ЕХЕ-программу несколько сложнее, хотя идея заражения довольно ясна. Тело вируса приписывается к какой-либо части программы, а в заголовке меняются значения регистров CS и IP (см. Главу 14). Таким образом, при запуске программы управление вначале опять передается вирусу. Наиболее изощренные вирусы корректируют еще значения SS и SP, дабы не угодить в область стека, а также проверяют программу на наличие в ней оверлеев. Наличие в программе оверлея может привести к тому, что управление никогда не будет передано вирусу, и программа перестанет запускаться.
3. Некоторые вирусы способны заражать оверлеи, имеющие стандартную структуру. Активизация вируса происходит при запуске оверлея прикладной программой.
Появившийся некоторое время назад вирус DIR является своего рода качественным развитием файловых вирусов. Данный вирус корректирует FAT так, что при запуске любой программы управление передается ему. После того как он оказался в памяти, стандартные утилиты уже не могут обнаружить искаженную структуру FAT.
4. Активизация вирусов. Часть вирусов, которые называют не резидентными, активизируются лишь временно, во время запуска зараженной программы. Как правило, за время активизации они пытаются заразить одну или несколько программ. Поиск программ для заражения может производиться в текущем каталоге, корневом каталоге, через PATH в окружении или посредством поиска по всему дереву каталогов (алгоритм достаточно сложен для реализации его на ассемблере, и, кроме того, для осуществления поиска требуется время).
Вирусы, называемые резидентными, активизируются во время запуска программы и остаются активными в течение всего времени работы компьютера. Некоторые вирусы остаются активными даже после перезагрузки через Ctrl Alt Del, т.к. обрабатывают соответствующее прерывание. Рассмотрим подробнее, как вирусы устанавливают себя в памяти. При запуске программы управление передается вирусу. В его задачу входит: а) установить себя в память; б) передать управление запущенной программе. Есть три области памяти, где может прижиться вирус. Это старшие адреса памяти, младшие адреса памяти и системная область. Установка вируса посередине адресного пространства неэффективна, т.к. сразу же даст о себе знать – перестанут запускаться программы. Остаться резидентным в старших адресах памяти наиболее простая задача. Вирус перемещает себя в нужную область памяти, а затем корректирует текущий МСВ, уменьшая размер блока на размер захваченной области. Сложнее остаться резидентным в младших адресах памяти. Свободного блока может не быть, и придется перемещать программу. Если это ЕХЕ – программа, то не избежать корректировки адресов. Кроме того, придется правильно создать свой МСВ и, следовательно, скорректировать предыдущий. Зато вирус в младших адресах памяти не так бросается в глаза. Некоторые вирусы «прикрепляют» себя к телу легальной резидентной программы, что значительно затрудняет их обнаружение. Если вирус не слишком большой, то сможет найти себе место и в системной области. Это может быть системный стек, системный буфер (тогда должно быть уменьшено число системных буферов), область данных DOS и BIOS или область векторов прерываний. Отметим, что есть вирусы, которые, как ни странно, для установки себя в памяти используют стандартное прерывание 27Н. Оказавшись в памяти, такой вирус еще раз запускает зараженную программу, оставляя занятым лишь блок, который он занимает. Передает управление сразу на нее, а по выходу из этой программы передает управление DOS через прерывание 27Н (!). Заметим также, что вирус может состоять из нескольких частей, которые могут располагаться в разных областях памяти и взаимодействовать друг с другом.
Вирус, помещая себя в память, перехватывает некоторые прерывания, чтобы контролировать ситуацию и иметь возможность размножаться. Как правило, это 21-е и 13-е прерывания. Посредством этих прерываний можно контролировать обращение системы к диску и при благоприятной возможности заразить программу. Чаще всего для этой цели используется функция DOS 4BH, вызываемая каждый раз для запуска программы. Есть, однако, вирусы, которые заражают файл даже при его открытии или чтении. Конечно, легко написать программу, которая путем отслеживания прерываний 13Н и 21Н фиксировала бы подозрительные действия, происходящие в системе (такие программы называют мониторами). Однако многие вирусы трассируют прерывания, определяя значения векторов до того, как их перехватили какие-то программы, или же используют недокументированные точки входа в системные процедуры. Поэтому такие программы, даже запущенные до активизации вируса, не способны отслеживать его действия. Возможно также, что вирус направит вектор в область памяти, где будет находиться небольшая процедура, которая нестандартным способом (например, через IRET) передаст управление вирусу, который будет находиться в другой области пространства. Перехваченные векторы могут приводить, разумеется, к проявлению как разрушительных (форматирование дискет, порча файлов, зависание и т.п.), так и развлекательных (картинки, шуточные сообщения, звуковые проявления и т.д.) функций вируса. К файловым вирусам следует отнести и вирусы-спутники. Действие этих вирусов весьма остроумно. Суть в том, что рядом с ЕХЕ – программой создается СОМ – программа, но с таким же именем. Понятно, что это есть в чистом виде сам вирус. Когда же мы запускаем ЕХЕ – программу, то по правилам операционная система ищет вначале СОМ – модуль и запускает его. Активизируясь, вирус затем запускает и саму программу. После этого запуск незараженной программы вызывает появление в том же подкаталоге ее СОМ – двойника. В более простом варианте вирус является нерезидентным, и заражение происходит во время запуска программы.
2. Бутовые (загрузочные) вирусы
Стандартный механизм заражения такими вирусами таков: вместо программы загрузки подставляется другая программа, которая:
1. При запуске системы вначале загрузит в память резидентную часть вируса.
2. Перенаправит нужные векторы прерываний на эту резидентную часть.
3. Запустит программу загрузки так, чтобы процесс загрузки продолжался.
Все такие вирусы, как правило, работают с прерыванием 1ЗН, которое перехватывают при загрузке системы. Хитрость здесь в том, чтобы обманывать программы, просматривающие диск. При попытке просмотреть ВООТ – сектор вместо него подставляется истинный, без вируса.