скачать рефераты

скачать рефераты

 
 
скачать рефераты скачать рефераты

Меню

Реферат: Защита от вирусов скачать рефераты

данные размещаются в одном сегменте. Сегмент стека SS можно не

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

не разрушил код самого фага, и соответствующим образом настроить ReloSS

и/или ExelP. Обычно в ЕХЕ-программе начальное значение

ReloSS таково, что стек раз­мещается сразу за концом программы, т.е. в том

месте, куда программа-установщик помещает "код фага. Длина стека ExeSP

как правило более чем достаточна для того, чтобы работа фага со стеком не

привела к разрушению кода фага, поэтому в большинстве случаев установщик

оставляет начальные значения ReloSS и ExeSP без изменения.

4.1. Описание программ SetFag.pas и Fag.asm

В этом параграфе описываются программы SetFag.pas и Fag.asm, с

помощью которых реализуется описанный выше механизм защиты. Программа

SetFag (прил.П8.1) осуществляет установку фага, а программа Fag.asm

(прил.П8.2) содержит сам фаг. Если Вы захотите воспользоваться предлагаемыми

про­граммами, откомпилируйте Турбо Ассемблером файл Fag.asm командой

tasm fag /L

В ходе компиляции на экран будет выведено 13 предупреждений вида

Warning* Open procedure: XXXXXX а в конце сводка:

Error message: None Warning message: 13 Passes: I Remainig

memory: XXXК

Если в строке Error message вместо None указано число

обнаруженных ошибок, просмотрите файл листинга компиляции fag.lst,

отыщите в нем •со­общения компилятора об ошибках и устраните их. Затем

преобразуйте полу­ченный файл fag.obj в программу Fag

.prg командой

tiink fag, fag.prg

Компоновщик должен сообщить Warning: No stack

Замечу, что программа Fag.prg не может работать самостоятельно

без предварительной настройки установщиком SetFag.exe, поэтому в

целях пре­досторожности ей присваивается нестандартное расширение PRG.

Для установки защиты на любой ЕХЕ-фаил следует дать команду

setfag NAME,

где NAME-имя защищаемого файла. Иными словами, имя файла передается

программе установки фага SetFag.exe с помощью параметров

запуска. В имени NAME можно опускать стандартное расширение ЕХЕ,

а также разрешается указать маршрут поиска файла и/или символы—заменители ДОС

«*» и«?» для определения группового имени-в этом случае защита будет

установлена на каждый файл, соответствующий групповому имени. Например, команда

setfag d:\mydir *

означает требование установить защиту на все ЕХЕ-файлы из каталога

MYDIR на диске D.

Перед установкой зашиты программа осуществляет серию проверок файла. Она

проверяет заголовок файла и блокирует установку защиты, если первые два байта

заголовка не соответствуют сигнатуре «MZ» (признаку ЕХЕ-

файла). Кроме того, она проверяет «хвост» файла с тем, чтобы убедиться в

отсутствии кода фага, и блокирует повторную установку защиты на уже защищенный

файл. Далее, защита не устанвливается также в том случае, если длина

за­гружаемой части файла станет слишком большой (превысит доступную память).

Если в конце файла обнаружена незагружаемая часть, программа информирует об

этом пользователя и запрашивает у него подтверждение на установку за-щиты.

После завершения всех проверок программа создает резервную копию исходного

файла с расширением ВАК. Создание ВАК-файла можно запретить,

если команду вызова дополнить ключом /NOBAK, например setfag myprog

/nobak. Для защиты используется ключ, соответствующий такой структуре данных:

Type

HeadType = record

case Byte of

1:(Sign : Word; {Сигнатура 'MZ' = $5MD}

PartPag: Word; {Часть неполного сектора}

PageCnt: Word; {Количество секторов}

ReloCnt: Word; {Количество элементов в таблице перемещения}

HdrSize: Word; {Длина заголовка в параграфах}

MinMem : Word; {Минимальный размер кучи}

МахМет : Word); {Максимальный размер кучи}

end.

Разумеется, фаг нельзя устанавливать на файлы, защищенные средствами модуля

F_Anti так как в этом случае процедура CheckFile этого модуля

обнаружит изменение заголовка и удалит фаг. Кроме того, фаг пристыковывается в

конец программы и, следовательно, не может защищать крупные программы.

Последнее обстоятельство контролируется установщиком SetFag.

ReloSS : Word; {Начальное значение сегмента стека SS}

ExeSP : Word; {Начальное значение указателя стека SP}

ChkSum : Word; {Контрольная сумма всех слов файла}

ExelP : Word; {Смещение точки запуска программы}

ReloCS : Word; {Начальное значение сегмента кода CS});

2:(W: array [1..12] of Word) end;

TAVir = record

Head24: HeadType; {24 байта эталонного заголовка}

Starts: Word; {Относительный сегмент}

StartO: Word; {и смещение точки запуска программы} Leng24:

Longint;{Длина незараженной программы минус 24 байта}

Key : Word; {Ключ шифровки}

end;

Как видим, этот ключ-несколько отличается от использованного в модуле

F_Anti: сохраняются только 24 байта заголовка (вряд ли вирус изменит

сме­щение таблицы TablOff и номер оверлея Overlay), исключено

ненужное теперь поле HFf добавлены поля StartS и StartO

для запоминания относительного адреса точки запуска защищаемой программы. Поле

Key по-прежнему со­держит шифр для защиты ключа. Суммарная длина ключа

SizeOf {TAVir) со­ставляет 34 байта.

Процесс установки защиты состоит из следующих этапов.

1) В динамическую память считывается код фага из файла FAG.PRG. Вы

можете создать свой вариант фага и заставить программу SetFag

использовать его, если в команду запуска установщика добавите ключ /

F: NameFag.Ext, где NameFag,Ext-имя и расширение

файла, содержащего разработанный Вами фаг. В этом случае учтите, что SetFag

помещает 34—байтный ключ в самое начало кода фага (см. листинг FAG. ASM)

и поэтому при считывании из файла пропускает 34 байта от начала его загружаемой

части. Выделение кода фага в отдельный P^G—файл понадобилось мне на этапе

разработки и отладки кода фага. Я решил сохранить возможность загрузки кода из

внешнего файла для того, чтобы Вы смогли при желании поэкспериментировать с

этим кодом.

2) В поле Head24 переменной НН типа TAVir считывается

заголовок ЕХЕ-файла и осуществляется настройка ключа НН: в

полях StartS и StartO запо­минается относительный адрес точки

запуска защищаемой программы; вы­числяется файловое смещение LS в

параграфах, соответствующее полной длине файла и выровненное на границу

параграфа - с этим смещением от начала файла в него будет помещен ключ и тело

фага (выравнивание на границу параграфа необходимо для того, чтобы обеспечить

корректность внутрисег­ментной адресации кода фага); в ReloCS

помещается новое значение относи­тельного сегмента точки запуска фага, а в

ExelP-смещение этой точки; рассчитывается новое значение длины загружаемой

части файла с учетом ключа и тела фага и соответствующим образом изменяются

поля PageCnt и PartPag; проверяются и при необходимости

корректируются поля MinMem и ExeSP так, чтобы стек не разрушил

код фага.

3) В начало ЕХЕ-файла записывается новый заголовок HH.Head24,

затем осуществляется смещение файлового указателя на 15*16 байт от начала файла

и в него записывается зашифрованный ключ и тело фага. Ассемблерная программа

FAG. ASM работает следующим образом.

Сразу после получения управления фаг сохраняет в стеке регистр АХ,

за­поминает в переменной PSP значение регистра сегмента данных DS

(в этот момент он указывает на префикс программного сегмента) и помещает в

DS сегмент кода CS (данные и код фага расположены в одном сегменте).

Кроме того, в переменной SPO запоминается вершина стека, а в CSO-

сегмент кода фага. Затем вычисляется абсолютный сегмент точки запуска защищаемой

программы (как уже говорилось, он равен PSP+16) и найденное значение

помещается в StartS-таким образом готовится запуск защищаемой

про­грамм.

Вся основная работа фага запрограммирована в серии последовательно вызываемых

процедур (при разработке фага использовался метод нисходящего

программирования). Вначале с помощью процедуры GetExeNome фаг

опреде­ляет полное имя защищаемого ЕХЕ- файла. Для этого

используется то об­стоятельство, что в версиях ДОС 3.0 и выше стандартный

загрузчик помещает полное имя загружаемого файла в расширенное окружение ДОС.

Окружение ДОС - это область памяти длиной до 32 Кбайт, в которой ДОС сохраняет

переменные окружения типа COMSPEC, PATH, PROMPT и т.п. Каждая

пере­менная окружения представляет собой текстовую строку, составленную из

кодов ASCII, в конце которой ставится байт 0 как признак конца строки -

фирма IBM называет такой код ASCIIZ (Z - Zero, ноль).

Переменные окружения располагаются в памяти последовательно друг за другом. В

конце «стандартной» части окружения (эта часть поддерживается и в ранних

версиях ДОС) ставится дополнительный нулевой байт. За стандартной частью

следует расширенная часть, куда загрузчик новых версий ДОС помещает полное имя

файла (с ука­занием диска и маршрута поиска) и, возможно, параметры обращения к

про­грамме. Таким образом, чтобы найти имя файла, нужно отыскать в окружении

ДОС два ноля подряд - это признак начала расширенной части окружения. Слово,

следующее за этим признаком, содержит количество переменных в расширенной

части, за ним помещаются сами переменные. Например, в терминах ассемблера

структура окружения может быть такой:

db *COMSPEC==C:\COMMAND .СОМ ',0 ; Переменная

COMSPEC db 'PATH=C:\;C:\DOS;D:\TP*,0 ; Переменная

PATH db * PROMPT==$p$g * , 0; Переменная

PROMPT db 0 ; Признак конца

В этом месте кончается стандартная часть окружения и начинается его

расширенная часть (только для ДОС 3.0 и выше!).

dw 2 ; Количество переменных в расширенной части

db 'D:\MYDIR\SETFAG .ЕХЕ ',0 ;Имя файла

db */NOBAK*,0 ; Параметр вызова

Перед передачей управления программе загрузчик копирует окружение в отдельную

область памяти и помещает сегмент этой области в PSP (в слово со

смещением 44 байта от начала PSP).

В заключение следует сказать, что программы SetFag и Fag.asm

не являются эталоном. Просто мне показалось, что такой способ организации защиты

ЕХЕ- файлов будет достаточно удобным в использовании и эффективным в работе.

Действительно, тестовые заражения программ специально разработанным вирусом, а

также вирусом Yankee показали, что фаг успешно выполняет свои функции.

Поскольку программу Fag.asm без особого труда можно изменить,

суще­ствует потенциальная опасность, что этот материал может быть использован

для разработки вирусов. Я очень надеюсь, что к Вам, уважаемый читатель, это не

относится.

4.2. Программа AntiVir

Итак, мы рассмотрели способ, позволяющий придать вновь создаваемой программе

свойства самоконтроля. А как быть с СОМ—файлами или защитить громоздкую

программу? Кроме того, существуют вирусы, которые поражают ^е файлы, а

загрузочные секторы дисков. Для таких вирусов (их называют загрузочными)

контроль PSP может оказаться неэффективным. Одним из возможных способов

решения задачи является разработка специальной про­граммы, которая проверяет

первый сектор наиболее важных ЕХЕ и СОМ-файлов при каждом

включении ПК. Эта же программа может проверить главный загрузочный сектор или

даже все загрузочные секторы на всех дисках, чтобы убедиться в отсутств1Щ

загрузочных вирусов, а при их обнаружении удалить их.

Мною разработана программа AntiVir (прил.П9.1), реализующая описанные

функции. Эта программа создает и поддерживает архив загрузочных секторов и

секторов PSP. Она может работать в двух режимах-автоматическом и

диалоговом.

В автоматическом режиме AntiVir проверяет текущее состояние загрузочных

секторов и первых секторов для заданных файлов и сравнивает их с эталон­ными

копиями, хранящимися в архиве. В случае обнаружения отличий про­грамма сообщает

пользователю об этом и предлагает восстановить эталонное состояние

соответствующих секторов.

В диалоговом режиме программа предоставляет пользователю возможность

просмотреть и скорректировать список проверяемых файлов. Диалоговая часть

реализована с помощью объектно—ориентированной библиотеки Turbo Vision. Выбор

нужного режима осуществляется автоматически: если программа вы­зывается

командой ДОС

ANTIVIR

она переходит к диалогу с пользователем, если командой

ANTIVIR /AUTO

реализуется режим автоматического контроля.

При контроле загрузочных секторов программа использует меры, позво­ляющие ей

обнаруживать так называемые вирусы—невидимки. Такие вирусы контролируют

обращение к функциям и прерываниям ДОС, а также к пре­рыванию $13 BIOS

и при попытке чтения зараженного вирусом участка диска «подсовывают» программе

сохраненную вирусом копию незараженного участ­ка. Единственным способом

обнаружения таких вирусов является непосред­ственное обращение к контроллеру

диска или прямой вызов прерывания $13в постоянной памяти BIOS.

Поскольку BIOS обычно учитывает особенности конкретного контроллера

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

каким-то образом определить начало в BIOS программы, обрабатывающей

прерывание $13 (сразу после загрузки ДОС вектор $13 перехватывается программами

1ВМ10.СОМ и показывает на рези­дентную в оперативной памяти часть ДОС). Для

определения «чистого» вектора $13 в программе используется мультиплексное

прерывание $2F, которое для подфункции $13 возвращает в регистрах DS

'.DX требуемый адрес. Поскольку при этом прежнее содержимое регистров

DS'.DX автоматически помещается в вектор $13, это прерывание необходимо

вызывать дважды подряд с проме­жуточным запоминанием регистров DS'.DX в

стеке (см. процедуру BuildArch в программе ANTIVIR). В ходе

контроля загрузочных секторов программа пе­реназначает обычно пустующий вектор

$62 так, чтобы он указывал на вход в обработчик $13, и использует затем этот

вектор для скрытого от вируса чтения секторов жесткого диска. К сожалению этот

прием нельзя использовать для контроля архивных файлов, так как в последнее

время широкое распростра­нение получили программы динамического

сжатия/раскрытия информации (самыми популярными из таких программ являются

Double Space и Stacker). Контроль динамически сжатых дисков

непосредственным чтением секторов невозможен, так как в этом случае отключается

не только возможный вирус, но и резидентная программа—деархиватор. В результате

не удается найти начальный сектор защищаемого файла и проверить PSP

программы.

5. НЕКОТОРЫЕ РЕКОМЕНДАЦИИ

1) Вставляйте имя модуля F_Anti в предложение Uses-«вакцинация»

программы при ее рождении гарантирует стойкий иммунитет на весь срок ее

эксплуатации.

2) Если Вы часто используете ЕХЕ-файлы, содержащие инструментальные

программы (например, пс.ехе, lexicon.exe и т.п.),

рекомендую поставить на них фаг Fag.prg. Кстати, если Вы

устанавливаете фаг на программу, защищенную средствами модуля F_Anti,

встроенный в нее контроль обнаружит инородное тело фага.

3) Все СОМ—файлы операционной программы и слишком громоздкие ЕХЕ-файлы

следует защитить программой Antivir. Вызов этой программы в

авто­матическом режиме (с ключом /AUTO) полезно включить в файл

AUTOEXEC.BAT.

4) Старайтесь как можно чаще архивировать на дискетах жизненно важные для Вас

(и Вашего компьютера) файлы.

Страницы: 1, 2, 3