Соглашение | Публикация статей

Шторы - calon.by

Описание программ 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 Remaining memory: XXXК
Если в строке Error message вместо None указано число обнаруженных ошибок, просмотрите файл листинга компиляции fag.lst, отыщите в нем •со¬общения компилятора об ошибках и устраните их. Затем преобразуйте полу¬ченный файл fag.obj в программу Fag.prg командой
Think 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 байта.
Процесс установки защиты состоит из следующих этапов.
1) В динамическую память считывается код фага из файла FAG.PRG. Вы можете создать свой вариант фага и заставить программу SetFag использовать его, если в команду запуска установщика добавите ключ /F: NameFag.Ext, где NameFag, Exe-имя и расширение файла, содержащего разработанный Вами фаг. В этом случае учтите, что SetFag помещает 34—байтный ключ в самое начало кода фага (см. листинг FAG. ASM) и поэтому при считывании из файла пропускает 34 байта от начала его загружаемой части. Выделение кода фага в отдельный P^G—файл понадобилось мне на этапе разработки и отладки кода фага. Я решил сохранить возможность загрузки кода из внешнего файла для того, чтобы Вы смогли при желании поэкспериментировать с этим кодом.
2) В поле Head24 переменной НН типа TAVir считывается заголовок ЕХЕ-файла и осуществляется настройка ключа НН: в полях StartS и StartO запо¬минается относительный адрес точки запуска защищаемой программы; вы¬числяется файловое смещение LS в параграфах, соответствующее полной длине файла и выровненное на границу параграфа - с этим смещением от начала файла в него будет помещен ключ и тело фага (выравнивание на границу параграфа необходимо для того, чтобы обеспечить корректность внутрисег¬ментной адресации кода фага); в ReloCS помещается новое значение относи¬тельного сегмента точки запуска фага, а в ExelP-смещение этой точки; рассчитывается новое значение длины загружаемой части файла с учетом ключа и тела фага и соответствующим образом изменяются поля PageCnt и PartPag; проверяются и при необходимости корректируются поля MinMem и ExeSP так, чтобы стек не разрушил код фага.
3) В начало ЕХЕ-файла записывается новый заголовок HH.Head24, затем осуществляется смещение файлового указателя на 15*16 байт от начала файла и в него записывается зашифрованный ключ и тело фага. Ассемблерная программа FAG. ASM работает следующим образом.
Сразу после получения управления фаг сохраняет в стеке регистр АХ, за¬поминает в переменной PSP значение регистра сегмента данных DS (в этот момент он указывает на префикс программного сегмента) и помещает в DS сегмент кода CS (данные и код фага расположены в одном сегменте). Кроме того, в переменной SPO запоминается вершина стека, а в CSO-сегмент кода фага. Затем вычисляется абсолютный сегмент точки запуска защищаемой программы (как уже говорилось, он равен PSP+16) и найденное значение помещается в starts-таким образом готовится запуск защищаемой про¬грамм.
Вся основная работа фага запрограммирована в серии последовательно вызываемых процедур (при разработке фага использовался метод нисходящего программирования). Вначале с помощью процедуры GetExeNome фаг опреде¬ляет полное имя защищаемого ЕХЕ - файла. Для этого используется то об¬стоятельство, что в версиях ДОС 3.0 и выше стандартный загрузчик помещает полное имя загружаемого файла в расширенное окружение ДОС. Окружение ДОС - это область памяти длиной до 32 Кбайт, в которой ДОС сохраняет переменные окружения типа COMSPEC, PATH, PROMPT и т.п. Каждая пере¬менная окружения представляет собой текстовую строку, составленную из кодов ASCII, в конце которой ставится байт 0 как признак конца строки - фирма IBM называет такой код ASCIIZ (Z - Zero, ноль). Переменные окружения располагаются в памяти последовательно друг за другом. В конце «стандартной» части окружения (эта часть поддерживается и в ранних версиях ДОС) ставится дополнительный нулевой байт. За стандартной частью следует расширенная часть, куда загрузчик новых версий ДОС помещает полное имя файла (с ука¬занием диска и маршрута поиска) и, возможно, параметры обращения к про¬грамме. Таким образом, чтобы найти имя файла, нужно отыскать в окружении ДОС два ноля подряд - это признак начала расширенной части окружения. Слово, следующее за этим признаком, содержит количество переменных в расширенной части, за ним помещаются сами переменные. Например, в терминах ассемблера структура окружения может быть такой:

Db *COMSPEC==C:\COMMAND .СОМ ',0 ; Переменная
COMSPEC dB 'PATH=C:\; C:\DOS; D:\TP*, 0; Переменная
PATH db * PROMPT==$p$g * , 0; Переменная
PROMPT db 0; Признак конца

В этом месте кончается стандартная часть окружения и начинается его расширенная часть (только для ДОС 3.0 и выше!).
Dw 2 ; Количество переменных в расширенной части
Db 'D:\MYDIR\SETFAG. ЕХЕ ',0;Имя файла
Db */NOBAK*, 0; Параметр вызова
Перед передачей управления программе загрузчик копирует окружение в отдельную область памяти и помещает сегмент этой области в PSP (в слово со смещением 44 байта от начала PSP).
В заключение следует сказать, что программы SetFag и Fag.asm не являются эталоном. Просто мне показалось, что такой способ организации защиты ЕХЕ - файлов будет достаточно удобным в использовании и эффективным в работе. Действительно, тестовые заражения программ специально разработанным вирусом, а также вирусом Yankee показали, что фаг успешно выполняет свои функции.
Поскольку программу Fag.asm без особого труда можно изменить, суще¬ствует потенциальная опасность, что этот материал может быть использован для разработки вирусов. Я очень надеюсь, что к Вам, уважаемый читатель, это не относится.


Статьи по теме:

Эрг-упражнения для профилактики ПВПН
Почтовые псевдонимы
Возможные проблемы при загрузке Windows
Приостановка печати всех документов
Запись и воспроизведение звука
Производственный и технологический процессы
Адресация в системе электронной почты
Выбор системы видеонаблюдения
Перезапуск задач печати
Обзор Windows Vista
Информационный обмен в обществе и его эволюция
Элементарная теория процесса обучения нейросетей
Мой Милый Ослик Или Настройка Emule
Локальная Сеть На Основе Протокола Csma-Cd
Разработка Программного Обеспечения, Разработка Программ
Архитектура Risc Вычислительных Ядер
МИКРОПРОЦЕССОР КАК ОСНОВА ЭВМ
Компьютер-помощник конструктора
Воспроизведение аудио- и видеофайлов
Микроконтроллерыне Системы
Технические методы увеличения безопасности работы за компьютером
Процесс Разработки Программного Обеспечения, Программы На Заказ
ЛАЗЕРНЫЕ (СВЕТОДИОДНЫЕ) ПЛОТТЕРЫ
VISA-2000. Виртуальный продавец компьютерной оргтехники
Обзор Конвертеров Для Видеофайлов
Нормативно-техническая документация
WordPad: Выделение текста кеглем шрифта
Программный код в среде Visual Basic
Диспетчер печати
Бесплатный Интернет Или Как Стать Хакером
Поколения ЭВМ
КОМПЬЮТЕРНЫЕ ПРЕСТУПЛЕНИЯ
Неправомерный доступ к компьютерной информации (ст. 272 УК)
Рисование эллипса или окружности
Геометрические объекты в GEOSTAR
Дисплей (монитор)
Политика конфиденциальности Microsoft Internet Explorer
Создание звукового комментария
Мышь
Создание загрузочной дискеты
TCO '95
Место кибернетики в системе наук
Законы Безопасности
Internet
Чтение таблицы FAT
Мониторы сегодня
Государственное регулирование информатизации Украины
Дата создания или изменения файла
Стримеры
Самый востребованный софт!
Коммерческое использование
WordPad: Поиск и замена слов по шаблону
ПРЕСТУПЛЕНИЯ В СФЕРЕ КОМПЬЮТЕРНОЙ ИНФОРМАЦИИ
Области применения МП
Crm, Создание Программного Обеспечения