Реферат: Защита программ от компьютерных вирусов

<span Tahoma",«sans-serif»; mso-bidi-font-family:«Times New Roman»">

<img src="/cache/referats/3053/image001.gif" " v:shapes="_x0000_s1029 _x0000_s1030">
<span Tahoma",«sans-serif»; mso-bidi-font-family:«Times New Roman»">Реферат по Информатике

<span Tahoma",«sans-serif»; mso-bidi-font-family:«Times New Roman»">ученика 11

<span Tahoma",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">”<span Tahoma",«sans-serif»; mso-bidi-font-family:«Times New Roman»">А<span Tahoma",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">”<span Tahoma",«sans-serif»; mso-bidi-font-family:«Times New Roman»"> класса школы №776

<span Tahoma",«sans-serif»; mso-bidi-font-family:«Times New Roman»">Юго – Восточного административногоокруга

<span Tahoma",«sans-serif»; mso-bidi-font-family:«Times New Roman»">на тему

<span Tahoma",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">:

<span Tahoma",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">

<span Tahoma",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">

<span Tahoma",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">

<span Tahoma",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">

<span Tahoma",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">

<span Tahoma",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">

<span Tahoma",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">

<span Tahoma",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">

<span Tahoma",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">

<span Tahoma",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">

<span Tahoma",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">

<span Tahoma",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">

<span Tahoma",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">Афонина СергеяВикторовича

<span Arial",«sans-serif»;mso-fareast-font-family: «Times New Roman»;mso-bidi-font-family:«Times New Roman»;mso-ansi-language: RU;mso-fareast-language:RU;mso-bidi-language:AR-SA;layout-grid-mode:line">

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»">Оглавление

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»">TOC o «1-3»

Предисловие… PAGEREF _Toc422988289 h 3

1. ЧТО ТАКОЕ КОМПЬЮТЕРНЫЕВИРУСЫ… PAGEREF _Toc422988290 h 4

2. ЦИКЛ ФУНКЦИОНИРОВАНИЯВИРУСОВ… PAGEREF _Toc422988291 h 4

3. «ВАКЦИНАЦИЯ» ПРОГРАММ… PAGEREF _Toc422988292 h 5

3.1. Заголовок исполняемыхфайлов… PAGEREF _Toc422988293 h 6

3.2. Защита вновьсоздаваемых программ… PAGEREF _Toc422988294 h 8

3.3. Модуль F_Anti… PAGEREF _Toc422988295 h 9

4. ЗАЩИТА СУЩЕСТВУЮЩИХЕХЕ-ФАЙЛОВ… PAGEREF _Toc422988296 h 11

4.1. Описание программ SetFag.pasи Fag.asm… PAGEREF _Toc422988297 h 12

4.2. Программа AntiVir… PAGEREF _Toc422988298 h 15

5. НЕКОТОРЫЕ РЕКОМЕНДАЦИИ… PAGEREF _Toc422988299 h 17

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»">

<span Arial",«sans-serif»;mso-fareast-font-family: «Times New Roman»;mso-bidi-font-family:«Times New Roman»;mso-font-kerning:14.0pt; mso-ansi-language:RU;mso-fareast-language:RU;mso-bidi-language:AR-SA">
Предисловие

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»">

В главе анализируетсямеханизм распространения и

функционирования вирусов воперационной системе

MS-DOSи на основе анализапредлагаются достаточно

эффективные способы борьбы сними. Приводятся

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

выявление и ликвидациювирусов. Модуль F_Antiможет

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

разрабаты­ваемых Турбо Паскалевыхпрограмм. Программа

AntiVirосуществляет выяв­лениеи ликвидацию

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

файлов на основесопоставления наиболее уязвимых для

вируса частей файлов с ихэталонными копиями. Наконец,

комплекс программSetFag.exeиFag,prg даст Вам

возможность установитьантивирусную программу—фаг

на любой уже созданный ЕХЕ-файл: в момент запуска

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

поражена вирусом, сообщит обэтом и удалит вирус.

<span Times New Roman",«serif»; mso-fareast-font-family:«Times New Roman»;mso-ansi-language:RU;mso-fareast-language: RU;mso-bidi-language:AR-SA;layout-grid-mode:line">
1. ЧТО ТАКОЕ КОМПЬЮТЕРНЫЕ ВИРУСЫ

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

      Являвшиеся первоначально вполне невиннымразвлечением скучающих программистов компьютерные вирусы сегодня сталинастоящим бедствием для пользователей ПК: количество и типы таких программ растутс ужасающей скоростью, а сами вирусы в ряде случаев приобрели весьма неприятныесвойства-некоторые из них способныуничтожать файловую структуру дисков со всеми катастрофическими дляпользователя последствиями. В ли­тературе[14] описывается беспрецедентный случай, когдавирус на Три дня (с2 по4 ноября1988 г.) вывел из строя фактически всюкомпьютерную сеть США. Были парализованы компьютеры Агентства национальнойбезопасности, Стратегического командования ВВС США, локальные сети всех крупныхуниверситетов и исследовательских центров. Лишь в последний момент удалосьспасти систему управления полетом космических кораблей Шаттл.Положение было настолько серьезным, что к расследованию немедленно приступилоФБР. Виновником катастрофы, причинившей ущерб более чем в100 миллионов долларов, оказался студентвыпускного курса Корнеллского университета Р.Моррис, придумавший достаточно хитрую разновидностьвируса. Он был исключен из университета с правом восстановления через год иприговорен судом к уплате штрафа в270тысяч долларов и трем месяцам тюремного заключения.

      Трудно объяснить, для чего программистытратят силы и время на создание все более изощренных типов вируса, поскольку ихавторы почти всегда ос­таются или надеются остатьсяанонимными, так что естественное для человека стремление к известности здесьисключено. Может быть это неудачная шутка (этой версии придерживался Р.Моррис), возможно это связано с патологиче­скими отклонениями в психике, а может быть объяснениекроется в стрем­лении заработать на созданииантивирусных программ? Как бы там ни было, нам нельзя не считаться свозможностью заражения ПК компьютерным ви­русом.

2. ЦИКЛ ФУНКЦИОНИРОВАНИЯ ВИРУСОВ

      В цикле существования любого вируса можновыделить три этапа. Первоначально вирус находится внеактивном состоянии. В этом состоянии он вне­дренв тело исполняемого файла или находится в загрузочном секторе диска и «ждет»своего часа. Именно в неактивном состоянии вирусы переносятся вместе спрограммами или дискетами от одного ПК к другому (обмен про­граммами между пользователями ПК-явление обыденное, и Вы сами, чи­татель, возможно копировали полюбившуюся Вам игру илитекстовый редак­тор, не подозревая, что копируетееще и вирус). Разумеется, в неактивном состоянии вирус ничего не может сделать.Для того чтобы он начал свою работу, необходимо запустить исполняемый файл илизагрузиться с зара­женной дискеты. В этот моментактивизируется вирус, который либо создает резидентную в памяти программу,способную порождать копии или произво­дить какие-то разрушительные действия, либо немедленноприступает к работе.

      Если вирус создалрезидентную программу, то ееактивизация осуществ­ляется различными способами- все зависит от фантазии автора вируса.Обычно вирус перехватывает прерывание$21,являющееся ключевым для доступа к любым операциям сMS-DOS.Таким образом, любаяпопытка чтения или записи информации на диск или обращение к клавиатуре дисплеяпри­водит к активизации резидентной программывируса. После получения управления (или активизации резидентной программы)вирус приступает к «размножению»: он отыскиваетподходящий исполняемый файл и внедряет свой код в его тело (см. ниже). Какправило, вирус заражает лишь один исполняемый файл за раз, чтобы пользовательне обратил внимания на чрезмерное замедление вработе программ: второй этап жизнедеятельности вируса- это этап активного размножения, поэтому вирусная программастремится максимально скрыть от пользователя ПК результаты своей дея­тельности.

      После того как заражено достаточно многофайлов, может наступить третий этап, связанный с внешними проявлениями работывируса. Ваш компьютер вдруг начнет вести себя странно: зазвучит ли музыкальнаяфраза, или начнут «сыпаться» символы на экране дисплея-не суть важно, главное, что только в этот момент Вы с ужасомвспомните, что на жестком диске находятся чрез­вычайноважные для Вас данные или программы, которые Вы не успели или не смоглископировать на дискеты. Увы! Некоторые вирусы к этому моменту могут ужебезвозвратно нарушить файловую структуру.

      Что делать при обнаружении вируса? Преждевсего не паниковать, ведь далеко не все вирусы отличаются «кровожадностью».Следует выключить компьютер, вставить в привод гибкого диска заранееприпасенную эталоннуюсистемную дискету (никогда не снимайте с неезащиту!) и снова включить компьютер. Если на ПК имеется специальная кнопка дляперезагрузки{RESET илиINIT),можно использовать ее и не выключать/включатькомпьютер, но во всех случаях не пытайтесь перезагрузиться с помощьюCtrl-Alt-Del:от не­которых типов вируса Вы не избавитесь таким образом.Затем нужно запустить какую-либопрограмму—антивирус (например,AIDSTESTД.Н.Лозинского) и с ее помощью локализовать и удалить вирус. Еслиантивирусная программа не может обнаружить вирус или у Вас под рукой нет такогорода программ, сле­дует попробовать обратиться кнужному Вам жесткому диску и, если это удастся сделать, скопировать всенаиболее ценное (но только не исполняемые файлы!) на дискеты. После этогозаново переформатировать жесткий диск, перенести на него эталонную копию ДОС ивосстановить с дискет то, что удалось спасти.

3. «ВАКЦИНАЦИЯ» ПРОГРАММ

      Что же следует сделать, чтобы этабезрадостная картина не стала реаль­ностью? Один ответ очевиден-периодически(и по возможности чаще) со­хранять жизненно важныедля Вас результаты работы на дискетах. Нет ничего проще, чем дать этот совет,гораздо сложнее заставить себя следовать ему: я сам, честно говоря, далеко некаждый день трачу время на архивирование. Второй ответ менее очевиден. С егопростой идеей я впервые познакомился в прекрасной статье Ф.Н.Шерстюка.

      Вот эта идея: нужно произвести«вакцинацию» исполняемых программ, т.е. придать им свойство самодиагностики,позволяющее произвести контроль собственного файла и выяснить, заражен он или нет.Если факт заражения установлен, программа может попытаться восстановить свойисходный вид, т.е. удалить прицепившийся к ее файлу вирус. Если эту идеюпоследовательно воплощать в жизнь, то большинство Ваших программ приобрететстойкий «иммунитет» к вирусам, во всяком случае, они смогут достаточно быстросо­общить Вам о факте заражения.

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

3.1. Заголовок исполняемых файлов

      Какую именно информацию о незараженномфайле следует сохранять? Для ответа на этот вопроснеобходимо знать соглашение ДОС о формате испол­няемыхфайлов. Как известно, существуют два формата: СОМ и ЕХЕ.Любая программа, обрабатываемая системой Турбо Паскаль версии4.0 и выше, может быть оттранслирована тольков ЕХЕ-файл, поэтому все дальнейшиерассуж­дения относятся именно к этому формату.

      В начале ЕХЕ-файла располагается заголовок, в котором содержится всяинформация, необходимая для преобразования дискового файла в готовую к работепрограмму. Первые28 байт заголовкасоответствуют следующей структуре данных:

<span Arial",«sans-serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:EN-US">Type

  HeadExeType=record

  Sign:Word;{Признак ЕХЕ-файла}

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

  PageCnt:Word;{Количество секторов, включаянеполный}

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

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

  MinMem:Word;{Минимальный размер кучи (впараграфах)}

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

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

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

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

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

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

  TabiOff:Word;{Смещение первого элементатаблицы перемещения}<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»">

<span Arial",«sans-serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:EN-US"> Overlay:

Word<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">;<span Arial",«sans-serif»;mso-bidi-font-family: «Times New Roman»"> {Номер оверлея или0для<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US"> основной программы}

end; {HeadExe}

      Остальные элементы заголовка содержат такназываемую таблицу пере­мещения, предназначеннуюдля настройки адресов загруженной программы. Таблица начинается с байтаTabiOff от начала файла и содержитReloCntчетырехбайтныхэлементов следующего вида:

Type

       ReloTablltem=record

       ItemSeg:Word;{Сегмент перемещаемого адреса}

        IternOfs:Word;{Смещение перемещаемого адреса}

end;

      Признак ЕХЕ-файла хранится в полеSignв виде символов«MZ»(код $5A4D) — с этого признака долженначинаться любой ЕХЕ-файл.ПолеHdrSizeсодержит длину всего заголовка в параграфах (участках памяти длинойпо16 байт каждый). ПоляPartPagиPageCntопределяют общую длинузагружаемой в память части ЕХЕ-файла по следующей формуле:

L=(PageCnt-l)*512+PartPag-HdrSize*16

      Остальная часть файла (длинаЕХЕ-файла может быть больше L+HdrSize*16)при загрузке программы не учитывается.Обычно в остатке файла, созданного системой Турбо Паскаль, (если, разумеется,есть остаток) содержится информация, используемая встроенным отладчиком, илиоверлеи.

      Подавляющее большинство ЕХЕ-вирусов пристыковываетсвою программу в конец файла, а для того чтобы эта программа была загружена впамять и ей было передано управление, изменяет поляPartPag, PageCnt, ReloCS,ExelP (адресточки, куда передается управление после окончания загрузки) и, воз­можно, некоторые другие поля. При таком способевнедрения общая длина загружаемой в память частифайла должна составлять

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">ExeSize

<span Arial",«sans-serif»;mso-bidi-font-family: «Times New Roman»;mso-no-proof:yes"> =<span Arial",«sans-serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:EN-US"> FileSize<span Arial",«sans-serif»;mso-bidi-font-family: «Times New Roman»;mso-no-proof:yes"> +<span Arial",«sans-serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:EN-US"> VirusSize,

гдеFileSize-полная длина ЕХЕ-файла, аVirusSize-длинапрограммы ви­руса. Так как в остатке фала могутхраниться оверлеи (или архив для саморазгружающихся архивных программ), длинаExeSizeможет оказаться чрез-мернобольшой, так что программа не сможет загрузиться в память или не сможетработать нормальным образом. Некоторые безграмотно написанные вирусы неучитывают это обстоятельство и быстро выдают себя, т.к.зара­женные программы перестают работать.

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

      Такой способ внедренияпозволяет не загружать в память весь ЕХЕ-файл, а длина загруженнойпрограммы увеличивается только на длину кода вируса. Несмотря на кажущеесяпреимущество такого способа, он используется дос­таточноредко. Его реализация значительно сложнее, так как перед передачей управленияосновной программе вирус должен перенести256байт префикса программного сегмента{PSP)в конец собственного кодатак, чтобы они не­посредственно предшествовали телупрограммы-в противном случае будетнарушена важная связь программы сPSP или относительная адресация всамой программе.

      Кроме того, в процессезаражения он должен увеличить на вели­чинуVirusSizeполеIternOfsкаждого элемента таблицы перемещения и абсо­лютного адреса,указываемого этим элементом. В отличие от стандартного за­грузчика ДОС вирусу приходится корректировать незагруженную программу, а ее файловый образ. Так как в ЕХЕ-программе средней сложности может быть несколько сотенэлементов таблицы перемещения, процесс настройки таблицы вирусом приводит кзаметному увеличению времени запуска про­граммы,что может обнаружиться пользователем. На этапе размножения ви­русы стремятся по возможности скрыть от пользователярезультат своейдеятельности, поэтому ЕХЕ-файлы редко поражаются вирусами,пристыкованными в начало файла.

      Разумеется, существует возможность внедрения вирусанепосредственно в тело исполняемой программы. Однако на практике это почтивсегда означает разрушение логики работы программы, поэтому такой вируснемедленно об­наруживается.

      Анализ сказанного позволяетсделать важный вывод: практически любой существующий вирус (или вирус, которыйеще только будет создан!), рассчи­танный на поражение ЕХЕ-файла, пристыковывает свой код вконец файла и изменяет его заголовок. Следовательно, для контроля факта зараженияпро­граммы и ликвидации вируса необходимо где-то сохранить заголовок файла и его эталонную длину ипериодически сопоставлять действительный заголовок и длину с эталоннымизначениями. При этом следует учитывать то обстоя­тельство,что некоторые вирусы контролируют любое обращение к дисковым секторам, вкоторых расположена их программа, и «подсовывают» незара-женныекопии этих секторов. Такие вирусы (их называют вирусы—невидимки) вряд лиудастся обнаружить с помощью стандартного обращения к функциям ДОС. Для борьбы с ними используют прямое обращение кBIOS-прерыванию $13.

<span Arial",«sans-serif»; mso-fareast-font-family:«Times New Roman»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US;mso-fareast-language:RU;mso-bidi-language:AR-SA">
3.2. Защита вновь создаваемых программ

      Ключевую информацию (будемдля краткости называть ее ключ) о незараженнойпрограмме можно хранить в отдельном файле, но в этом случае существуетопасность потерять дополнительный файл при копировании про­граммы или ошибочно уничтожить его. Гораздо надежнее хранить ключ в теле самого защищаемого файла. Ксожалению, его нельзя подобно вирусу при-стыковать в конец файла, т.к. в случаезаражения вирус изменит поляPartPagи PageCntи мы никогда не сможемопределить то место в файле, где он рас­полагается.Вспомним, что все константы (в том числе и типизированные) создаются на этапекомпиляции программы, таким образом в файле обяза­тельноимеется область данных, содержащая значения этих констант. Эта область в Турбо Паскалевых программах располагается в самом конце за­гружаемой части файла (см.рис.6.2).

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

      Каким образом отыскать в ЕХЕ-файле место, занимаемое ключом? Ко­нечно, можно передним в программе разместить какую-либо типизиро­ванную константу с характерным значением (например,заранее обуслов­ленную текстовую строку) и затемотыскивать ее в файле. Однако такое ре­шение врядли можно признать удовлетворительным: во-первых,всегда существует вероятность того, что какой-тофрагмент кодов программы со­держит ту же цепочкубайт, что и заголовок ключа; во-вторых, придетсяпросматривать подчас большой по объему ЕХЕ—файл в поисках нужной константы. Значительноизящнее выглядит решение, основанное на точном вычислении смещения от началафайла до ключа.

      Для этого нужно определить начало области данных вфайле. В заголовке файла не предусмотрено никакой информации о начальномзначении регистра DS,в котором хранится сегмент данных. Перед передачей управления про­грамме загрузчик устанавливает значение этогорегистра так, чтобы он ука­зывал на начало такназываемого префикса программного сегмента{PSP),а запущенная программа ужесама должна установить его надлежащим образом.

      Префикс программногосегмента имеет длину256 байт(16 параграфов) и размещается загрузчиком воперативной памяти непосредственно перед за­груженнойпрограммой. ВPSP содержится различная служебная информация, которая можетбыть достаточно важной для ДОС и работающей программы (в PSP, например, хранятсяпараметры обращения к программе), но в нем нет указаний на содержимое регистраDS.Таким образом, найти начало области данных в файле достаточно трудно. Однакоэто нетрудно сделать в работающей программе-дляэтого предусмотрена стандартная функцияDSeg,возвра­щающая сегментданных. Если бы программа могла получить также инфор­мациюо сегментеPSP,с которого начинается загруженная программа, можно было бы вычислить смещение вфайле от его начала до начала области данных. Такая возможность есть-функцияMS-DOSс номером$62 возвращает в регистре ВХ значениесегментаPSP.Следовательно, программа должна полу­чить значенияобоих сегментов, вычислить их разницу и таким образом оп­ределить место в файле, с которого начинается областьданных.

      Остается последняя проблема-как найти нужную константу. Турбо Паскальразмещает константы в области данных по мере их объявления впрограмме. Зная размеркаждой константы и порядок их объявления, можно вычислить место размещениянужной нам типизированной константы. Однако этот метод не годится дляуниверсальной программы защиты, так как порядокобъявления констант может меняться от программы кпрограмме. К счастью, мы можем использовать операцию получения адреса @. Результатом приме­нения этой операции к адресу константы, выбранной вкачестве ключа, яв­ляется указатель (четырехбайтныйадрес); смещение адреса, который он со­держит, иявляется нужным нам смещением начала ключа относительно начала области данных.

3.3. МодульF_Anti

      В этом параграфе описываетсямодульF_Anti,в котором осуществляются все необходимые действияпо установке ключа во вновь создаваемый ЕХЕ-файл и последующей проверкеэтого ключа при каждой загрузке программы. Полныйтекст модуля см. прил.П7.

      В качестве ключа дляконтроля факта заражения ЕХЕ-файла в модуле F_Antiиспользуется типизированная константаHead,соответствующая такойструктуре данных:

Type

НТуре=record

НЕ:HeadExeType;{Эталонныйзаголовок файла}

HL:Longint;{Эталонная длина файла}

HF:Boolean;{Флаг установки ключа}

Key: Word;{Шифр для защиты ключа}

end;

      При создании этойтипизированной константы компилятор в полеHF по­мещаетзначениеFalse.Запущенная программа анализирует это поле. При первом прогонеHF =False,в результате чего программавызывает процедуру Save,в ходе выполнения которой в файле сохраняются эталонный заголовок и начальнаядлина файла. При этом одновременно в полеHF (в файле програм­мы!) помещается значениеTrue,поэтому при любомпоследующем запуске программы вместоSaveбудет вызвана процедураCheckFile,которая осуществит нужный контроль файла. Если входе контроля обнаруживается хотя бы ма­лейшееотличие заголовка файла от его эталона, хранящегося вHead,про­граммасообщает о факте заражения и предлагаетвосстановить испорченный заголовок и начальную длину файла.

      При восстановлениизараженного файла осуществляются следующие действия:

•зараженный файл копируется в файл с расширениемVIR-это позволит Вам в случае неудачной попыткивосстановления повторить ее еще раз; кроме того, при желании Вы сможете передатьразработчикам антиви­русных программ копию вирусадля выработки методов его обнаружения и уничтожения;

•анализируется адрес запуска зараженной программы: если относительное значениесегмента точки запуска у зараженной программы меньше, чем в эталоне, то этоозначает, что вирус располагается в начале или в середине.

      Если программа запускаетсяна уже зараженном ПК. неисключено, что заголовок файла будет испорчен вирусом, и тогда система защитыбудет ревностно следить за сохранностью вируса! В этом случае программапредупреждает пользователя о невозможности восстановления (если Васзаинтересовал описываемый способ борьбы с вирусами, попробуйте модифицироватьпрограмму защиты так, чтобы она работала и в этом случае);

•есливирус пристыкован в конец файла, то ввосстанавливаемый файл переносится эталонный заголовок и незараженная часть,начиная с байта TablOff+ReloCnt'4от начала файла и до байтаFileSize-HL Отмечу следующее обстоятельство. Описанная системазащиты дублирует заголовок файла в тело программы. Ничто не мешает вирусупроверить тело программы на наличие дубликата и соответствующим образомизменить его. Я далек от мысли, что Вы,, уважаемыйчитатель, после знакомства с этим разделом захотите создать собственный вирус,учитывающий это обстоятельство. Тем не менее я считаю, что нелишней будет какая-то защита самого ключа. Такая защита реализуетсяочень просто: для этого достаточно все16—битные поля эталона заголовка сложить по модулю2 со случайной константойKey,С этой целью в процедуруSaveпомещен следующий фрагмент(см. текст модуля в прил.П7):

{Зашифровать ключ:} Randomize; Head.Key:=Random($FFFF);

with Head,

Head .HE do for k</

еще рефераты
Еще работы по программированию, базе данных