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

Защита вновь создаваемых программ
Категория: Статьи

Ключевую информацию (будем для краткости называть ее ключ) о незараженной программе можно хранить в отдельном файле, но в этом случае существует опасность потерять дополнительный файл при копировании про¬граммы или ошибочно уничтожить его. Гораздо надежнее хранить ключ в теле самого защищаемого файла. К сожалению, его нельзя подобно вирусу пристыковать в конец файла, т.к. в случае заражения вирус изменит поля PartPag и PageCnt и мы никогда не сможем определить то место в файле, где он рас¬полагается. Вспомним, что все константы (в том числе и типизированные) создаются на этапе компиляции программы, таким образом, в файле обяза¬тельно имеется область данных, содержащая значения этих констант. Эта область в Турбо Паскалевых программах располагается в самом конце за¬гружаемой части файла (см. рис.6.2).
Следовательно, мы должны объявить в программе типизированную кон¬стант, предназначенную для хранения ключа, а затем в область файла, отве¬денную для ее размещения, поместить нужную информацию.
Каким образом отыскать в ЕХЕ-файле место, занимаемое ключом? Ко¬нечно, можно перед ним в программе разместить какую-либо типизиро¬ванную константу с характерным значением (например, заранее обуслов¬ленную текстовую строку) и затем отыскивать ее в файле. Однако такое ре¬шение вряд ли можно признать удовлетворительным: во-первых, всегда существует вероятность того, что какой-то фрагмент кодов программы со¬держит ту же цепочку байт, что и заголовок ключа; во-вторых, придется просматривать подчас большой по объему ЕХЕ—файл в поисках нужной константы. Значительно изящнее выглядит решение, основанное на точном вычислении смещения от начала файла до ключа.
Для этого нужно определить начало области данных в файле. В заголовке файла не предусмотрено никакой информации о начальном значении регистра DS, в котором хранится сегмент данных. Перед передачей управления про¬грамме загрузчик устанавливает значение этого регистра так, чтобы он ука¬зывал на начало так называемого префикса программного сегмента {PSP), а запущенная программа уже сама должна установить его надлежащим образом.
Префикс программного сегмента имеет длину 256 байт (16 параграфов) и размещается загрузчиком в оперативной памяти непосредственно перед за¬груженной программой. В PSP содержится различная служебная информация, которая может быть достаточно важной для ДОС и работающей программы (в PSP, например, хранятся параметры обращения к программе), но в нем нет указаний на содержимое регистра DS. Таким образом, найти начало области данных в файле достаточно трудно. Однако это нетрудно сделать в работающей программе-для этого предусмотрена стандартная функция DSeg, возвра¬щающая сегмент данных. Если бы программа могла получить также инфор¬мацию о сегменте PSP, с которого начинается загруженная программа, можно было бы вычислить смещение в файле от его начала до начала области данных. Такая возможность есть-функция MS-DOS с номером $62 возвращает в регистре ВХ значение сегмента PSP. Следовательно, программа должна полу¬чить значения обоих сегментов, вычислить их разницу и таким образом оп¬ределить место в файле, с которого начинается область данных.
Остается последняя проблема-как найти нужную константу. Турбо Паскаль размещает константы в области данных по мере их объявления в программе. Зная размер каждой константы и порядок их объявления, можно вычислить место размещения нужной нам типизированной константы. Однако этот метод не годится для универсальной программы защиты, так как порядок объявления констант может меняться от программы к программе. К счастью, мы можем использовать операцию получения адреса @. Результатом приме¬нения этой операции к адресу константы, выбранной в качестве ключа, яв¬ляется указатель (четырехбайтный адрес); смещение адреса, который он со¬держит, и является нужным нам смещением начала ключа относительно начала области данных.

Защита вновь создаваемых программ

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

Предупреждение компьютерных преступлений
Глобальный уровень
Компания Lenel Интегрировала Биометрические Считыватели Нескольких Производителей В Свою Систему Контроля Доступа
Использование Агентств Охраны Для Профессионального Поддержания Безопасности
Схема бесплатного ускорения Интернета
Разработка контрольно-информационных инструментов для PADS
РАЗВИТИЕ ИНФОРМАЦИОННОГО ОБЩЕСТВА
Требования к антивирусным программам
Windows Vista как платформа
СПЕЦИФИКА ИНФОРМАЦИОННОГО ОБЕСПЕЧЕНИЯ САПР
ЧТО ТАКОЕ КОМПЬЮТЕР?
Обзор Windows Vista
Маркировка + контроль вскрытия с этикетками В-367
Уровни работы сети
Элементарные Методы Сортировки
ПЕРЬЕВЫЕ ПЛОТТЕРЫ (ПП, PEN PLOTTER)
Описание построения графической схемы терминала
Интерфейсные места кабельной системы
Шифрование. PGP-ключ
Папка Избранное
Мониторы сегодня
Физическая среда передачи в локальных сетях
WordPad: Выделение текста кеглем шрифта
Назначение деловых игр
Нормативно-техническая документация
Система программного обеспечения ЕС ЭВМ
Graycatsoft - Сайт Программного Обеспечения
Будущие модули CompactPCI- которые будут производится в ближайшее время
Клавиатура
Поиск людей (Кто есть Who)
Восьмибитные чипы
Перезапуск задач печати
"ТРОЯНСКИЙ КОНЬ"
Создание и конфигурирование сжатых дисков
Черный Баннер - История его обнаружения
Коммутаторы NetGear
Работа с файлами в редакторе Paint
Математическая логика в технике
Узнайте правду о ваших малышах занимаясь серфингом привычки
Универсальный мультисенсор SVEA совмещает в себе датчик освещенности и присутствия
Управление Памятью Freebsd
Компонент вывода
Запуск Windows
Типы Java программ
Основные пункты меню и их назначение
Запись
Области применения МП
Количество Интернет-Атак На Банки Продолжает Расти
Физические основы организации квантовых компьютеров
Заливка области рисунка
Дополнительные настройки Microsoft Internet Explorer
Малогабаритные 3U формата CompactPCI контроллеры INOVA
CMOS (полупостоянная память)
Списки воспроизведения
Появление перцептрона