программе. Зная размер каждой константы и порядок их объявления, можно вычислить место размещения нужной нам типизированной константы. Однако этот метод не годится для универсальной программы защиты, так как порядок объявления констант может меняться от программы к программе. К счастью, мы можем использовать операцию получения адреса @. Результатом применения этой операции к адресу константы, выбранной в качестве ключа, является указатель (четырехбайтный адрес); смещение адреса, который он содержит, и является нужным нам смещением начала ключа относительно начала области данных.
6.3.3. Модуль F_Anti
В этом параграфе описывается модуль F_Anti, в котором осуществляются все необходимые действия по установке ключа во вновь создаваемый ЕХЕ— файл и последующей проверке этого ключа при каждой загрузке программы. Полный текст модуля см. прил.П7.
В качестве ключа для контроля факта заражения ЕХЕ— файла в модуле F_Anti используется типизированная константа Head, соответствующая такой структуре данных:
type
НТуре = record
НЕ : HeadExeType; {Эталонный заголовок файла) HL : LongInt; {Эталонная длина файла} HF : Boolean; {Флаг установки ключа} Key: Word {Шифр для защиты ключа} end;
При создании этой типизированной константы компилятор в поле HP no — мещает значение False. Запущенная программа анализирует это поле. При первом прогоне HF = False, в результате чего программа вызывает процедуру Save. в ходе выполнения которой в файле сохраняются эталонный' заголовок и начальная длина файла. При этом одновременно в поле HF (в файле программы!) помещается значение True, поэтому при любом последующем запуске программы вместо Save будет вызвана процедура CheckFile, которая осуществит нужный контроль файла. Если в ходе контроля обнаруживается хотя бы малейшее отличие заголовка файла от его эталона, хранящегося в Head, программа сообщает о факте заражения и предлагает восстановить испорченный заголовок и начальную длину файла.
При восстановлении зараженного файла осуществляются следующие действия:
• зараженный файл копируется в файл с расширением VIR — это позволит Вам в случае неудачной попытки восстановления повторить ее еще раз;
кроме того, при желании Вы сможете передать разработчикам антивирусных программ копию вируса для выработки методов его обнаружения и уничтожения;
• анализируется адрес запуска зараженной программы: если относительное значение сегмента точки запуска у зараженной программы меньше, чем в эталоне, то это означает, что вирус располагается в начале или в сере—
' Если программа запускается на уже зараженном ПК. не исключено, что заголовок файла будет испорчен вирусом, и тогда система защиты будет ревностно следить за сохранностью вируса!