- Наконец, о наличии вируса могут свидетельствовать "посторон-
 ние" строки типа "Eddie lives." внутри файла.
7. Ловля вируса "на живца". Итак, допустим, что наличие вируса в си-
 стеме доказано одним из предложенных выше методов, и заражен-
 ные вирусом объекты определены. Теперь можно начать изучение
 вируса и, вслед за этим, попытаться удалить его с машины. Жела-
 тельно послать образец вируса профессиональным вирусологам.
 А для этого необходимо выделить вирус в чистом виде.
а) Выделение загрузочного вируса. Как уже говорилось выше, если
 вирус заразил винчестер, необходимо при помощи программы
 DiskEditor сохранить в файле образ зараженного объекта (напри-
 мер, сектора 0/0/1 или всей нулевой дорожки). Но, как известно,
 загрузочные вирусы только "живут" в системных областях вин-
 честера, размножаются же они, заражая системные области дис-
 кет. Поэтому смотрим на лицевую панель компьютера. Если
 в наличии дисководы обоих типов (3.5" и 5.25"), то придется
/•
отформатировать 4 дискеты на 4 стандартных формата: 360Кбайт,
 720Кбайт, 1.2Мбайт и 1.44Мбайт. Затем при помощи программы
 DiskEditor внимательно рассмотрим и постараемся запомнить
 внешний вид boot-секторов этих дискет (0/0/1), хотя бы первые
 байты (естественно, все это делается на чистой машине). Встав-
 ляем не защищенные от записи дискеты по очереди в дисководы
 "больной" машины и (обязательно) обращаемся к ним: пытаемся
 прочитать каталог, записать, прочитать и удалить какие-либо
 файлы. Наконец, на чистой машине при помощи DiskEditor
 вновь просматриваем сектор 0/0/1. Если на какой-либо дискете
 он изменился, при помощи того же DiskEditor снимаем образ
 всей дискеты в файл. Вирус пойман. Можно упаковать файл ка-
 ким-нибудь архиватором и послать его вирусологу. Некоторые
 хитрые вирусы хранят свое тело на дополнительной, специально
 отформатированной дорожке, так называемом инженерном ци-
 линдре дискеты. В этом случае без пакета копирования ключевых
 дискет типа fda, teledisk или copymaster не обойтись.
б) Выделение резидентного вируса. Как известно, резидентный ви-
 рус постоянно находится в памяти ПЭВМ, выбирая жертву для
 заражения. Наиболее часто в качестве жертв выступают запуска-
 емые программы. Однако файлы программ могут заражаться при
 открытии, копировании на дискету или с нее (вирус OneHalf), во
 время поиска при помощи DOS-функций FindFirst или FindNext.
 Необходимо подобрать подходящего претендента на "конт-
 рольное" заражение - небольшую программу простой структуры,
 приманку. Некоторые вирусы пытаются распознать приманку
 и отказываются от ее заражения. Не подходят для таких целей
 слишком короткие программы или такие, большая часть которых
 состоит из повторяющихся байт (например, 90h - код команды
 NOP). В качестве приманки с большим успехом можно использо-
 вать программы test.com и test.exe. Вот их исходные тексты
 на языке Assembler.
test.com
cseg segment
assume cs:cseg, ds:cseg, ss:cseg
org -lOOh
 Start:
db 1249 dup (OFAh,90h,OFBh,OF8h)
1 60 Методы борьбы с вирусами
mov ah,4Ch
int 21h
cseg ends
End Start
test.exe
cseg segment
assume cs:cseg, ds:cseg
 Start:
db 1000 dup (OFAh,90h,OFBh,OF8h)
mov ah,4Ch
int 21h
cseg ends
sseg segment stack
assume ss:sseg
db 118 dup (OFAh,90h,OFBh,OF8h)
sseg ends
End Start
Скопируем приманки на зараженную машину. Выполним над ними как
 можно больше операций: запустим, скопируем в другое место винчесте-
 ра и на дискету, переместим, просмотрим их в NC и DOS (командой
 dir). При этом желательно несколько раз поменять системное время
 и дату, потому что вирусы нередко активны не каждый день и не круг-
 лые сутки. Чтобы исключить Stealth-эффект, загрузимся с чистой дис-
 кеты и рассмотрим внимательно эти файлы. Как правило, достаточно
 бывает проконтролировать размер файлов и просмотреть их код при
 помощи F3 - наличие вируса определить несложно.
в) Выделение нерезидентного файла. Самый неприятный случай.
 Помимо того, что вирус нередко привередничает, распознавая
 приманку, и по-прежнему отказывается работать "без выходных
 и отпусков", так еще и заражаемость программ сильно зависит от
 их расположения на винчестере. Одни нерезидентные вирусы за-
 ражают только в текущем каталоге, другие - только в подкатало-
 гах 1-го уровня, третьи - в каталогах, указанных в строке path
 системной среды (Vienna), четвертые - вообще во всех каталогах
 винчестера. Поэтому воспользуемся программой типа it, чтобы
 скопировать приманки во все каталоги диска (запускаем из кор-
 невого каталога):
rt copy a:\test.* .
Точка "." в конце - символ текущего каталога. Потом их можно будет
 удалить:
rt del test*
Теперь выбираем заведомо зараженную программу и запускаем ее N раз,
 постоянно изменяя время и дату. Проконтролировать изменение длины
 поможет та же программа rt:
rt dir test.* >test.txt
Получаем файл test.txt, содержащий список файлов test.* с указанием
 их длины. Выбираем тот файл приманки, который изменил длину.
 Вот вирус и пойман.
Как исследовать алгоритм работы вируса
Ситуация, когда компьютер оказался заражен неизвестным вирусом,
 встречается не очень часто, но полностью сбрасывать со счетов такую
 возможность нельзя. Выше рассматривались способы обнаружения ви-
 руса и выделения его в чистом виде. Сейчас переходим к исследованию
 алгоритма работы файловых вирусов для успешной борьбы с ними.
1. Прежде чем перейти к рассмотрению этого вопроса, вспомним неко-
 торые принципы функционирования MS DOS.
Структура СОМ- и ЕХЕ-программ. Вообще говоря, следует отли-
 чать СОМ- и ЕХЕ-программы от СОМ- и ЕХЕ-файлов. Дело в том,
 что в настоящее время расширение СОМ или ЕХЕ является просто
 признаком (кстати, необязательным) запускаемой программы. Спо-
 соб загрузки программы в память и ее запуска определяется опера-
 ционной системой по внутреннему формату программы. Этот факт
 часто не учитывали авторы первых вирусов, что приводило к унич-
 тожению некоторых программ вместо их заражения.
СОМ-программа представляет собой часть кода и данных, которая
 начинается с исполняемой команды и занимает не более 64Кбайт.
 Например, такую структуру имеет командный процессор
 COMMAND.СОМ операционной системы MSDOS до версии 6.22
 включительно.
Структура ЕХЕ-программы гораздо сложнее. В начале файла
 ЕХЕ-программы располагается заголовок (см. приложение). Поля
 ReloCS и ExelP определяют расположение точки входа в программу,
 поля ExeSP и ReloSS - расположение стека, поля PartPag
 и PageCnt - размер корневого сегмента программы. Размер некоторых
6-1436
программ, вычисленный по полям PartPag и PageCnt, может не со-
 впадать с реальным размером файла. Такие программы называются
 "сегментированными" или "содержащими внутренние оверлеи".
 Опытные авторы вирусов избегают заражать такие программы. Пос-
 ле заголовка может размещаться специальная таблица, точное место
 расположения которой определяется полем TablOff, а размер - по-
 лем ReloCnt. В этой таблице хранятся адреса тех слов в коде про-
 граммы, которые модифицируются операционной системой во время
 загрузки программы. Например, просматривая файл программы при
 помощи утилиты HackerView, можно видеть команду call
 0000:1234h. В процессе загрузки программы MS-DOS подставит вме-
 сто нулей нужный сегментный адрес, и все будет работать коррект-
 но. Кстати, если в поле TablOff указано число 40h или больше,
 то, скорее всего, это программа в формате Windows. Подобный
 формат имеет, например, командный процессор Windows 95
 COMMAND.COM. Несмотря на свое расширение, он имеет в нача-
 ле знаменитые символы "MZ" и длину 95Кбайт.
2. Приступаем к исследованию конкретного файлового вируса и разра-
 ботке алгоритма его лечения. В качестве жертвы "показательного
 вскрытия" возьмем широко известный в начале 90-х годов вирус
 SVC-1740. Выбор определился следующими обстоятельствами:
- это очень простой вирус с четкой структурой;
- он не содержит деструктивных функций;
- не содержит грубых ошибок в алгоритме;
- он стандартно заражает СОМ- и ЕХЕ-программы.
 Запустив SVC вирус на своей машине, можно наблюдать следую-
 щие его проявления.
а) В MS-DOS успели заразиться файлы ARCVIEW.EXE,
 HIEW.EXE и LEX.EXE. В результате HackerView, проверяющий
 целостность своего кода, отказался работать, сообщив: "HIEW
 bad, work is aborted".
6) Windows 3.11 и Windows 95 сначала запустились корректно, но
 затем продемонстрировали разноцветные горизонтальные полосы
 в видеорежиме 800х600х256 (вирус не заражал какие-либо драй-
 вера, просто в момент старта Windows в памяти находился ви-
 русный обработчик прерывания INT 21h).
Излечение пришло после использования антивирусов:
DrWeb с: /сир /а1
 и
 AidsTest с: /f /g /q
3. При помощи ранее описанных методов заразим две приманки:
TEST.COM и TEST.EXE. Увеличение их длины на 1740 байт мож-
 но увидеть только на "чистой" машине (Stealth-эффект). Несколь-
 ко слов об инструментарии. Вообще говоря, выбор дизассемблеров
 весьма широк. В свое время была широко известна программа
 DisDoc. По признанию Е. Касперского, он активно пользуется инте-
 рактивным дизассемблером IDA. Быстро просмотреть код програм-
 мы позволяет утилита HackerView. Также возможно использование
 любого отладчика. В данном случае для изучения кода зараженных
 приманок использовался дизассемблер Sourcer v5.04. Несмотря на
 отсутствие некоторых полезных опций и ошибки при дизассембли-
 ровании (достаточно редкие), пользоваться программой удобно -
 упакованная PkLite, она занимает на дискете всего 48Кбайт.
Итак, запускаем дизассемблер командой sr test-сом. На экране появи-
 лась темно-синяя лицевая страница. Нажав клавишу "а", можно пе-
 рейти на страницу опций. Рекомендуется установить опцию "а" -
 обязательно дизассемблировать фрагмент программы, располагаю-
 щийся после команд jmp/ret/iret - это позволяет получить ассемб-
 лерный код тех фрагментов программ, в которые нет явного перехо-
 да (процедуры обработки прерываний, скрытые подпрограммы и так
 далее). Нажав Enter, вернемся на первую страницу. Запустим процесс
 дизассемблирования нажатием клавиши "g". В зависимости от про-
 изводительности компьютера, процесс дизассемблирования длится от
 нескольких секунд до нескольких минут. Для грубой оценки размера
 листинга можно принять, что один килобайт кода соответствует деся-
 ти-пятнадцати килобайтам текста. 6740 байт зараженной приманки
 дают 96Кбайт текста+файл test.sdf. Этот очень интересный файл хра-
 нит в текстовом виде как опции, использованные при дизассемблиро-
 вании, так и параметры полученного текста (размещение фрагментов
 кода и данных, место расположения символических имен и прочее).
 Если изменить эти параметры, переименовать файл в test.def и пере-
 дать его Sourcer в командной строке в качестве параметра, то дизас-
 семблер будет работать в соответствии с новыми инструкциями. Ана-
 логичную операцию проделаем для файла testexe.