Главная > Компьютерные вирусы > ВАКЦИНАЦИЯ ПРОГРАММ > Модуль F_Anti

 
 

Menu

 
 
 
 
 

Модуль 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 = 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, то после команды testanti на экране появится сообщение Установлена защита файла TESTANII. EXE. при первом запуске программы и в файле TESTANTI. EXE вирус не обнаружен.

при каждом следующем запуске. Если запустить программу командой testanti /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.

 

 
 
© 2010 csd7i.tk Информатика




buy generic cialis online