В присутствии хозяина (хозяйки) пытаемся вызвать необычное поведение компьютера

74017
знаков
1
таблица
5
изображений

3.    В присутствии хозяина (хозяйки) пытаемся вызвать необычное поведение компьютера.

а) Идеально, если вирус (если это действительно он) самостоятельно извещает всех о своем присутствии, например, выводит на экран сообщение типа <I am VIRUS!>. Вирусы проявляют себя различными способами: проигрывают мелодии, выводят на экран посторонние картинки и надписи, имитируют аппаратные сбои, заставляя дрожать экран. Но, к сожалению,чаще всего вирусы специально себя не обнаруживают. К антиви-русным программам прилагаются каталоги с описаниями вирусов (для AidsTest они хранятся в файле aidsvir.txt, для DrWeb -в файле virlist.web). Наиболее полным является гипертекстовый каталог avpve, входящий в состав антивирусного пакета Е. Касперского. В нем можно не только прочитать достаточно подробное описание любого вируса, но и понаблюдать его проявления. От настоящих вирусов следует отличать так называемые «студенческие шутки», особенно широко распространенные на компьютерах ВУЗов и школ. Как правило, это резидентные программы, которые периодически производят напоминающие работу вирусов видео- и аудиоэффекты. В отличие от настоящих вирусов, эти программы не умеют размножаться. Наличие такого рода программ на «бухгалтерских» компьютерах маловероятно.

б) Очень часто сбои вызываются вирусами не преднамеренно, а лишь в силу их несовместимости с программной средой, возникающей из-за наличия в алгоритме вируса ошибок и неточностей. Если какая-либо программа «зависает» при попытке запуска, существует очень большая вероятность, что именно она и заражена вирусом. Если компьютер «виснет» в процессе загрузки (после успешного завершения программы POST), то при помощи пошагового выполнения файлов config.sys и autoexec.bat (клавиша F8 в DOS б.х) можно легко определить источник сбоев.

4.    Не перегружая компьютер, запускаем (можно прямо с винчестера) антивирус, лучше всего DrWeb с ключом /hal. Вирус (если он есть) попытается немедленно заразить DrWeb. Последний достаточно надежно детектирует целостность своего кода и в случае чего выведет сообщение «Я заражен неизвестным вирусом!» Если так и произойдет, то наличие вируса в системе доказано. Внимательно смотрим на диагностические сообщения типа «Файл такой-то ВОЗМОЖНО заражен вирусом такого-то класса» (СОМ, EXE, TSR, BOOT, MACROи т.п.). Подозрения на ВООТ-вирус в 99% бывают оправданы. Однажды DrWeb 3.20 «ругался» на ВООТ-сектор дискеты, «вылеченной» AidsTest от вируса LzExe, поэтому антивирусным программам тоже не всегда можно доверять. Наличие большого количества файлов, предположительно зараженных вирусом одного и того же класса, с большой достоверностью указывает на присутствие в компьютере неизвестного вируса. Но могут быть и исключения - DrWebверсии 3.15 и ниже активно «ругался» на стандартные DOC-компоненты WinWord 2.0. Кроме того, DrWeb определяет наличие в памяти компьютера неизвестных резидентных вирусов и Stealth-вирусов. Ошибки при их определении (в последних версиях антивируса) достаточно редки. Версия 3.15, не умеющая лечить вирус Kaczor, исправно заподозрила наличие агрессивного резидента в памяти. Версия же 3.18, умеющая его лечить, в инфицированной системе вообще ничего не заметила, а детектировала и вылечила вирус лишь при загрузке с чистой дискеты. При этом нужно иметь в виду, что предупреждения типа «Странная дата файла», единичные подозрения на СОМ-, ЕХЕ-вирусы и прочее вряд ли могут быть расценены как бесспорное доказательство наличия вируса. MACRO-вирусы живут исключительно в Windows и никакого негативного влияния на DOS-программы оказать не могут, за исключением того случая, когда они что-либо стерли в Windows-сеансе.

5.    Нередко сбои бывают вызваны естественными причинами, никако-го отношения к вирусам не имеющими.

a)    Аппаратные сбои. Исключить эту возможность поможет загрузкас чистой дискеты и запуск (с нее) диагностической программы ndiags. Тестируем память, основную плату, порты и все остальное. Иногда достаточен простой внешний осмотр компьютера -может быть, что-то неправильно подключено.

b)    Нарушения в логической структуре диска. Загружаемся с чистой дискеты и запускаем (с нее) ndd. Сначала просто отмечаем наличие ошибок (перекрестных цепочек, потерянных кластеров и так далее). Если ошибок очень много и подавляющее их число относится к СОМ- и ЕХЕ-файлам, то ни в коем случае нельзя выполнять операцию исправления ошибок: это может быть DIR-подобный вирус, и такое «лечение» диска может стать для многих программ фатальным. Если ошибки есть и их относительно немного, рискуем и лечим диск. Вновь загружаемся с винчестера. Сбои пропали?

c)    Конфликты между различными компонентами операционной системы и прикладными программами. Особенно «вредоносными» являются дисковые драйверы-обманщики, активно видоизменяющие (пусть и с благородными целями) информацию, считываемую или записываемую на диск:

-      дисковые кэш (SMARTDRV, NC_CASHE);- упаковщики дисков (DblSpace, DrvSpace, Stacker);

-      системы безопасности (антивирусные мониторы типа PROTECT, HDPROT, ADM и прочие, системы разграничения доступа DISKMON, DISKREET). Нередко сбоят устаревшие пристыковочные системы защиты от несанкционированного копирования, типа NOTA или CERBERUS.

6.    Наконец, самый интересный случай - вирус явно не обнаружен, но подозрения на его наличие по-прежнему остаются. Достаточноподробно эту тему изложил Е. Касперский в своей книге <Компью-терные вирусы в MS-DOS>, избранные фрагменты которой можнонайти в гипертекстовом каталоге avpve того же автора. Остаетсятолько привести краткое изложение этих глав с уточнениями и замечаниями (может быть, весьма спорными).

а) Обнаружение загрузочного вируса. Загружаемся с чистой дискетыи, запустив DiskEditor, заглядываем в сектор 0/0/1 винчестера. Если винчестер разделен (при помощи fdisk) на логические диски, то код занимает приблизительно половину сектора и начинаетсяс байт FAh 33h C0h (вместо 33h иногда может быть 2Вh). Заканчиваться код должен текстовыми строками типа <Missing operatingsystem>. В конце сектора размещаются внешне разрозненные байты таблицы разделов. Нужно обратить внимание на размещение активного раздела в таблице разделов. Если операционная система расположена на диске С, а активен 2, 3 или 4 раздел, то вирус мог изменить точку старта, сам разместившись в начале другого логического диска (заодно нужно посмотреть и там). Но также это может говорить о наличии на машине нескольких операционных систем и какого-либо boot-менеджера, обеспечивающего выборочную загрузку. Проверяем всю нулевую дорожку. Если она чистая, то есть ее сектора содержат только байт-заполнитель, все в порядке. Наличие мусора, копий сектора 0/0/1 и прочего может говорить о присутствии загрузочного вируса. Впрочем, антивирусы прилечении загрузочных вирусов лишь <обезглавливают> противника (восстанавливают исходное значение сектора 0/0/1), оставляя тело <догнивать> на нулевой дорожке. Проверяем boot-сектор MS-DOS, он обычно расположен в секторе в 0/1/1. Его внешний вид длясравнения можно найти как в вышеупомянутой книге Е. Касперского, так и на любой <чистой> машине. Итак, если вирус обнаружен, при помощи DiskEditor переписываем в файл зараженныйобъект: MBR 0/0/1 (а лучше всю нулевую дорожку), boot 0/1/1и все остальное. Желательно отправить этот комплект вирусоло-гам. Копию, при желании, оставляем себе - для опытов.

б) Обнаружение файлового вируса. Нерезидентные файловые вирусы специально не скрывают своего наличия в системе. Поэтому основным признаком заражения файла является увеличение его длины, которое легко заметить даже в инфицированной операционной системе. Резидентные вирусы могут скрывать изменение длины файла (да и вообще наличие своего кода внутри файла-жертвы), если они написаны по Stealth-технологии. Но при загрузке с <чистой> дискеты это можно увидеть. Некоторые вирусыне изменяют длину заражаемых программ, используя <пустые> участки внутри файла программы или кластерный <хвост> файла, расположенный после последнего заполненного сектора. В этом случае основной признак заражения - изменение контрольной суммы байт файла. Это легко обнаруживают антивирусы-инспектора типа Adinf. В качестве крайней меры можно рассматривать прямое изучение кода программ, подозрительныхс точки зрения наличия в них вируса. Одно из лучших программных средств для оперативного изучения кода вирусов - програм-ма HackerView (hiew.exe by SEN). Но, поскольку <по умолча-нию> компьютер чужой, hiew, td, softice, ida и подобных программ на нем может просто не оказаться. Зато стандартныйотладчик debug присутствует точно. Загружаем подозреваемуюна наличие вируса программу (в чистой операционной системе)в память при помощи команды debug <имя_программы>. Команда и позволяет дизассемблировать фрагмент кода, команда d -просмотреть его в шестнадцатеричном формате, команда g <ад-рес> запускает программу на выполнение с остановом в указан-ной точке, команда t обеспечивает пошаговую трассировку кода,команда r отображает текущее содержимое регистров. Чтобы ви-зуально распознать наличие вируса по коду, конечно, необходимопределенный опыт. Вот на что надо обращать особое внимание:

- Наличие в начале программы последовательности команд подобного типа крайне подозрительно:

Start:

call Metka

Metka: pop <r>

-      Наличие в начале файла строк типа <PkLite>, <LZ91>или <diet>подразумевает обработку программы соответствующим упаковщиком; если начало программы не содержит последовательности команд, характерных для упаковщика, не исключен факт ее заражения.

-      Программы, написанные на языках высокого уровня, часто содержат в своем начале сегмент кода, затем сегмент данных. Наличие еще одного сегмента кода, располагающегося в конце файла программы, весьма подозрительно.

-      Подозрение вызывают расположенные в начале программы, написанной на языке высокого уровня, фрагменты видоизменения собственного кода, вызовы DOS- или BIOS-прерываний и прочее. Желательно визуально помнить характерные начала программ, скомпилированных в той или иной системе программирования (на-пример, начала программ, написанных на Turbo Pascal, содержат большое количество дальних вызовов подпрограмм call xxxx:xxxx).

-      Наконец, о наличии вируса могут свидетельствовать <посторонние> строки типа <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.coin и test.exe. Вот их исходные текстына языке Assembler.

test.com

cseg segment

assume cs:cseg, ds:cseg, ss:cseg

org 100h

Start:

db 1249 dup (OFAh,90h,OFBh,OF8h)

mov ah,4Ch

int 21 h

cseg ends

End Start

test.exe

cseg segment

assume cs:cseg, ds:cseg

Start:

db 1000 dup (0FAh,90h,0FBh,0F8h)

mov ah,4Ch

int 21 h

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), четвертые - вообще во всех каталогах винчестера. Поэтому воспользуемся программой типа rt, чтобыскопировать приманки во все каталоги диска (запускаем из корневого каталога):

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 - размер корневого сегмента программы. Размер некоторых программ, вычисленный по полям PartPag и PageCnt, может не совпадать с реальным размером файла. Такие программы называются <сегментированными> или <содержащими внутренние оверлеи>. Опытные авторы вирусов избегают заражать такие программы. После заголовка может размещаться специальная таблица, точное месторасположения которой определяется полем TablOff, а размер - полем ReloCnt. В этой таблице хранятся адреса тех слов в коде программы, которые модифицируются операционной системой во времязагрузки программы. Например, просматривая файл программы припомощи утилиты HackerView, можно видеть команду call0000: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, проверяющий целостность своего кода, отказался работать, сообщив: <HIEWbad, 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 в командной строке в качестве параметра, то дизас-семблер будет работать в соответствии с новыми инструкциями. Аналогичную операцию проделаем для файла test.exe.

4.    Займемся анализом полученного листинга. Поверхностно изучая зараженные приманки, видим:

- файлы увеличили свою длину на 1740 байт;

-      в их конце явно видны посторонние коды;

-      изменилось время создания файлов, точнее, изменилось количество секунд - оно стало равным 60;

-      в начале файла test.com появилась команда jmp;

-      в заголовке файла test.exe изменились значения полей ReloCS,ExelP, ExeSP, ReloSS, PartPag и PageCnt.

Итак.

а) В начале вирусного кода содержится последовательность команд

вида:

call sub_1

sub_1: pop si

sub si,3

Подобная последовательность символов характерна для очень многих вирусов. Команда call помещает в стек смещение следующей заней команды. Это значение извлекается вирусом при помощи команды pop si (в то время как обычно это делается командой ret) и помещается в регистр si. Скорректировав эту величину на длинукоманды call (3 байта), вирус получает возможность корректного обращения к ячейкам памяти относительно кодового сегмента: movcs:Data[si], хххх. Не случайно DrWeb всегда реагирует на подобные команды в начале программ, выдавая предупреждающее сообщение. Впрочем, это не является обязательным признаком присутствия вируса. Например, устаревшая пристыковочная защита от несанкционированного копирования (НСК) <Nota> также пользуется этим приемом.

б) Важным элементом алгоритма вируса является определение наличия собственного резидента в ОЗУ. Вызывая прерывание DOS с <секретной> функцией 83h, вирус ждет реакции системы. <Здоровая> система не среагирует на провокацию, а <больная> поместит в регистр dx число 1990h (год создания вируса?), чем и известит о наличии вируса в памяти. Вот соответствующийфрагмент вирусного обработчика прерывания INT 21h:

cmp ah,83h

je loc_9

loc_9:

mov dx, 1990h

iret

Наличие такой проверки использует антивирус-фаг во время детектирования вирусного кода в оперативной памяти. Также антивирус-блокировщик может имитировать присутствие вируса в памяти, предотвращая его внедрение в программное обеспечение компьютера.

в) В случае отсутствия вирусного обработчика INT 21h в памяти, вирус пытается установить его и остаться в памяти резидентно. Алгоритм резидентной записи кода вируса в память основанна прямой модификации заголовка блока памяти (МСВ). Подробное описание этого алгоритма и методов борьбы с вирусами, использующими подобный метод инсталляции, можно найти в одном из номеров журнала <Монитор> за 1993 г.

г) Установив свою резидентную копию в ОЗУ (или обнаружив наличие такой копии), вирус передает управление оригинальной программе. Изучение этого момента чрезвычайно важно для анализа. В процессе заражения (данный фрагмент из листинга удален) вирус считывает (в data_15) 24 байта начала программыи анализирует первые два байта из них. В зависимости от содержимого первого слова (<MZ> или нет), вирус выполняет заражение жертвы либо по СОМ-, либо по ЕХЕ-алгоритму, дописывая фрагмент памяти со своим кодом к ее концу. Естественно, считанные 24 байта также дописываются в файл-жертву. Поэтому для определения способа передачи управления оригинальному коду программы вполне достаточно повторно сравнить сохраненный фрагмент начала с признаком <MZ>:

cmp cs:data_15[si],5A4Dh

je lt_Was_EXE

В случае если программа была заражена по СОМ-алгоритму, вирус просто извлекает первые 3 байта из ячейки памяти по адресу data_15, копирует их в старое начало оригинального кода (по адресу cs:100h) и передает туда управление. Адресу data_15 соответствует 80-ый (если считать от конца) байт зараженной программы. В случае если программа была заражена по ЕХЕ-алгоритму,  вирус вычисляет старую точку входа по сохраненным в data_20 и data_21 значениям полей ReloCS и ExeIP, восстанавливает расположение стека по сохраненным в data_18 и data_19 значениям полей ReloSSи ExeSP и передает управление на ReloCS+ES+10h:ExeIP (ES -сегмент PSP; ES+l0h - сегмент начала программы; ES+ReloCS+10h - полный сегмент точки входа). Расположение этих адресов в зараженном файле (от конца файла):

data_20 - 60

data_21 - 58

data_18 - 66

data_19 - 64

Еще могут пригодиться сохраненные значения полей PartPag и PageCnt (от конца файла):

data_16+1 - 78

data_16+3 - 76

Для излечения зараженного файла достаточно восстановить измененные значения ячеек, адреса которых только что вычислили,и отсечь 1740 вирусных байт от конца файла.

5. Еще несколько особенностей, с которыми иногда можно встретиться при дизассемблировании кода вируса и изучении листинга. Код вируса может быть зашифрован. В этом случае в начале вирусного кода должен располагаться расшифровщик. Вообще говоря, расшифровщиков может быть много, но первый всегда существует. Если расшифровщик меняется от одного зараженного файла к другому, значит имеем дело с полиморфным вирусом. Вырожденныйслучай - зашифровываются только сохраненные в теле вируса байты. Для СОМ-файла вполне достаточно пошагово пройти расшифровщик в отладчике, дождаться его завершения и сохранить на винчестер расшифрованный код вируса. Полученный файл можно дизассемблировать. Для ЕХЕ-файла такое не подходит, так как впамяти после загрузки отсутствует заголовок, и полученный файлне может быть дизассемблирован именно как ЕХЕ. Вероятно, придется писать специальную программу расшифровки на основе изу-ченного по листингу алгоритма расшифровщика. Расшифровщик может быть совмещен с алгоритмами, противодействующими трассировке кода вируса с использованием отладчиков. Ознакомиться с ними можно в специальной литературе, посвященной борьбе с НСК. Авторы вирусов, как правило, редко изобретают что-то новое и используют широко известные методы. Эвристические анализаторы кода Эвристическим анализатором кода называется набор подпрограмм, анализирующих код исполняемых файлов, памяти или загрузочных секторов для обнаружения в нем разных типов компьютерных вирусов. Рассмотрим универсальную схему такого кодо анализатора. Действуя в соответствии с этой схемой, кодоанализатор способен максимально эффективно задействовать всю информацию, собранную для тестируемого объекта. Основные термины: Событие - это совокупность кода или вызов определенной функции операционной системы, направленные на преобразование системных данных, работу , с файлами или часто используемые вирусные конструкции. Цепочка связных событий - это набор событий, которые должны быть выявлены в порядке их следования. Цепочка несвязных событий - это набор событий, которые должны быть выявлены, но не обязательно в строгом порядке. Действия - набор цепочек связных или несвязных событий, для которых выполнены все условия. Эвристическая маска - набор действий, выявленных при проверке файла.Эвристическое число - порядковый номер первой из совпавших эвристических масок. События распознаются при помощи подпрограмм выявления событий, в которых могут использоваться также таблицы с данными. Остальные данные просто хранятся в массивах и не анализируются. Рассмотрим функциональную схему эвристического анализатора Эмулятор кода работает в режиме просмотра, то есть его основная задача - не эмулировать код, а выявлять в нем всевозможные события. События сохраняются в таблице событий по алгоритму:

if (Events[EventNumber]= =0) Events[EventNumber]=++CountEvents;

где: Events - массив событий;

EventNumber - номер регистрируемого события;

CountEvents - порядковый номер зарегистрированного события.

Таким образом, в ячейку массива Events записывается порядковый номер для выявленного события. CountEvents при инициализации равен 0. После того, как эмулятор завершит свою работу, последовательно запускаются два преобразователя. Первый преобразователь заполняет массив действия, выбирая данные из массива событий и цепочек связных и несвязных событий по следующему алгоритму:

for(i=0;i<CountMaskEvrnrs;i++) {

if (MaskEvents[i][0]= =0) {

for(j=2;j<MaskEvents[i][1];j++{

if(Events[MaskEvents[i][j]]= =0) goto nextMask;

}

else

for(e=0, j=2;j<MaskEvenfs[l][1];j++) {

if(Events[MaskEvents[i][j]]==0 II Events[MaskEvents[i][j]]<e)

goto nextMask;

else e=Events[MaskEyents[i][j]];

}

Actions[i]=1;

nextMask:;

}

где: CountMaskEvents - число масок цепочек событий;

MaskEvents - двумерный массив цепочек связных и несвязных событий;

Actions - массив действия.

Затем выполняется второй преобразователь, который выбирает данные из массива действия и цепочек эвристических масок и вычисляет эвристическое число по следующему алгоритму:

for(i=0;i<CountMaskHeurist;i++) {

for(j=1;j<MaskHeurist[i][0];j++)

if(Actions[MaskHeurist[i][j]]= =0) goto nextMask1;

NumberHeurist=i+1;

break;

nextMask1:

}

где: CountMaskHeurist - число эвристических масок;

MaskHeurist - двумерный массив с эвристическими масками;

NumberHeurist - эвристическое число.


Информация о работе «Компьютерные вирусы»
Раздел: Информатика, программирование
Количество знаков с пробелами: 74017
Количество таблиц: 1
Количество изображений: 5

Похожие работы

Скачать
63157
0
0

... «редактор». Вы либо придумаете нечто очень общее, либо начнете перечислять все известные типы редакторов. И то и другое вряд ли можно считать приемлемым. Поэтому мы ограничимся рассмотрением некоторых свойств компьютерных вирусов, которые позволяют говорить о них как о некотором определенном классе программ. Прежде всего, вирус - это программа. Такое простое утверждение само по себе способно ...

Скачать
67802
0
0

... «вредные программы»; Резидентные вирусы; Сетевые вирусы; Стелс-вирусы; Файловые вирусы; IRC-черви. 5. Методы борьбы с вирусами. 5.1. Методы обнаружения и удаления компьютерных вирусов Способы противодействия компьютерным вирусам можно разделить на несколько групп: профилактика вирусного заражения и уменьшение предполагаемого ущерба от такого заражения; методика использования антивирусных ...

Скачать
47175
0
0

... . В PIRCH-клиенте, например, событий, на которые предусмотрена реакция, более 50. 8.2 Скрипт-черви Как оказалось, мощная и разветвленная система команд IRC-клиентов позволяет на основе их скриптов создавать компьютерные вирусы, передающие свой код на компьютеры пользователей сетей IRC, так называемые "IRC-черви". Первый инцидент с IRC-червем зафиксирован в конце 1997 года: пользователями mIRC- ...

0 комментариев


Наверх