Главная > Компьютерные вирусы > ЗАЩИТА СУЩЕСТВУЮЩИХ ЕХЕ-ФАЙЛОВ > Описание программ SetFag. pas и Fag. asm

 
 

Menu

 
 
 
 
 

Описание программ 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 байта.

 

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