В этом параграфе описывается модуль 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 = I to 14 do
Hem [k]: = HE. Hem [k] xor Key;
(массив Hem совмещен в памяти с сохраняемым в файле эталонным заголов¬ком, а НЕ. Нет-с заголовком файла в момент первого запуска).
Инициация генератора случайных чисел с помощью процедуры Randomize гарантирует, что шифр Head.Key не будет повторяться в различных програм¬мах. В процедуре CheckFile с помощью операторов
{Дешифровать ключ: }
With Н,Н.НЕ do for k := I to 14 do Hem[k] := Hem[k] xor Key;
восстанавливается исходный вид ключа.
Процедура CheckFile, осуществляющая установку или контроль ключа, вызывается в ходе выполнения установочной части модуля F_Anti, поэтому для использования описанного метода защиты достаточно указать имя модуля в предложении Uses. Замечу, что в случае разработки программы с оверлеями модуль F_Anti можно объявить оверлейным, если в установочной части любого не оверлейного модуля инициируется работа администратора оверлея.
В распоряжении программиста имеется глобальная переменная CheckVirasResult, сигнализирующая о результатах проверки программы. Зна¬чения этой переменной интерпретируются следующим образом:
0; {Не обнаружен факт заражения} 1; {Первый запуск, в программе установлена защита}
-1; {Вирус обезврежен с согласия пользователя}
-2; {Вирус обезврежен автоматически} .
-3; {Контроль подавлен ключом /NOANTI}
-4; {Вирус расположен в начале программы}
Работа процедуры CheckFile может быть подавлена, если программа запускается с ключом /NOANTI. Ключ /NOQUERY разрешает автоматическое удаление обнаруженного вируса без разрешения пользователя.
Ключ /NOALARM также разрешает процедуре автоматически удалить вирус, но за¬прещает выдавать на экран предупреждающее сообщение. Наконец, ключ /NOCOPY запрещает создание резервной копии зараженного файла (с расширением VIR).
Следующая простая программа иллюстрирует технику использования модуля F-Anti. Если Вы скомпилируете эту программу в файл testanti.exe, то после команды testate на экране появится сообщение
Установлена защита файла TESTANII.EXE. при первом запуске программы и В файле TESTANTI.EXE вирус не обнаружен.
при каждом следующем запуске. Если запустить программу командой
Testate /noanti на экран будет выведено сообщение Контроль блокирован ключом /NOANTI.
Uses FAnti; begin
Case CheckVirusResuit of
0: WriteLn(‘B файле ', ParamStr (0),' вирус не обнаружен.*);
1: WriteLn ('Установлена защита файла ', aramStr (0) ,*.*);
-1: WriteLn ('Вирус удален с разрешения пользователя.');
-2: WriteLn ('Вирус удален автоматически.');
-3: WriteLn С Контроль блокирован ключом /NOANTI.*);
-4: WriteLn С Вирус расположен в начале *+
' файла - удаление невозможно.')
End
end.
Статьи по теме:
Протокол Internet (IP)Электронный подходЗащита вновь создаваемых программКак сделать правильный выбор? 1С:Предприятие 7.7. или 8.0Обзор возможностей WinRAR 3.70 RU FinalПодделка компьютерной информацииWorld Wide Web в РоссииУголовно-правовой анализ ст? 274 гл? 28 УК РФ "Нарушение правил эксплуатации ЭВМ, системы ЭВМ или их сети"Правовое регулирование отношений в области "компьютерной информации"Соединение микропроцессоровОбщие положения об необходимости устройств резервного копированияИнформационная Безопасность В Деятельности Современных ОрганизацийНеправомерный доступ к компьютерной информацииОбмен данными : Excel - другие приложенияИнформационные ресурсы украинского сегмента InternetSWISH Max или эффекты Flash анимацииКакие же выводы можно сделать?Три Тренинга От Известных Вендоров: Специально Для «Антивирусных Решений»Управление расположением значков Microsoft Windows XPGraycatsoft - Сайт Программного ОбеспеченияКлавиатураРАСШИРЕННЫЙ НАБОР ОПЕРАЦИЙ ПРИ ПОДГОТОВКЕ ТЕКСТАНекоторые Мысли По Защите От СпамаГлобальный уровеньПризнаки проявления вирусаСтруктура конструкций и поколения ЭВМОбласти в которых используются компьютерные системы на базе CompactPCIКраткий обзор возможностей программы Ехсеl 7.0Логический номер сектораКибернетика – наука ХХ векаОткрытие документа не связанным с ним приложением ПЕРИФЕРИЙНЫЕ УСТРОЙСТВАТрассировка процессов в UNIXОбщие моменты при организации ЛВСВЫБОРКА ДАННЫХАдминистрирование Windows XPКредитные карты и InternetСФЕРЫ ПРИМЕНЕНИЯ КОМПЬЮТЕРОВВыполнение команд меню с использованием сочетаний клавиш (горячие клавиши)Рисование с помощью аэрографа Определение структурированной кабельной системыПоисковые системы и каталоги ресурсовКомпьютеры домаОписание построения требуемых графиков и диаграммАда и СиТеория фреймовРазделенная база данных AccessУстройство и общие принципы работы компьютерного томографаИнформационный обмен в обществе и его эволюцияMs Word Vs NotepadКомпонентные инфраструктурыМониторы и видеоконтроллерыПериферийные устройства ПККопирование данных с компакт-диска Почтовые псевдонимы