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

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

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

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

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

Метод простой итерации
Математические модели
Внесение примесей
Коммутаторы NetGear
Уровни работы сети
Требования, предъявляемые к техническим средствам ЭВМ
Шифрование. PGP-ключ
Дисплей (монитор)
НЕМНОГО О ЛИЧНОСТНЫХ ОСОБЕННОСТЯХ КОМПЬЮТЕРНЫХ ПРЕСТУПНИКОВ
Краткий обзор антивирусных программ
Access
Рисование кривой
Настройка интерфейса
Описание переменных
«Откат» к предыдущей версии Microsoft Windows
Возможности INTERNET
Краткие сведения о кодировках кириллицы
Использование анонимного ftp по e-mail
Государственное регулирование информатизации Украины
ВОПРОС ДОВЕРИЯ К РЕЗУЛЬТАТАМ ДЕЯТЕЛЬНОСТИ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА
Бесплатный Интернет Или Как Стать Хакером
ЧТО ТАКОЕ КОМПЬЮТЕР?
Модемы и факс-модемы
Общая схема расследования неправомерного доступа к компьютерной информации
Немного о контроллере прямого доступа к памяти
Арм Врача Эндоскописта, Арм Врача Функциональной Диагностики
Зарождение кибернетики
WordPad: Выделение текста гарнитурой шрифта
Структура конструкций и поколения ЭВМ
МИНИМАЛЬНЫЙ НАБОР ТИПОВЫХ ОПЕРАЦИЙ ПРИ ПОДГОТОВКЕ ТЕКСТА
Системный реестр Windows XP
Современное состояние информационной сферы Украины
Nosy о привычках вашего парня он-лайн?
Эрг-упражнения для улучшения осанки
Зарождение кибернетики
Програмное обеспечение для предприятий - добавлять эффективность к делу
Создание и использование сводных таблиц EXCEL
Банковские операции с использованием вычислительной техники
Программа решения системы нелинейных уравнений методами Ньютона и простых итераций
Законы Безопасности
Запись и воспроизведение звука
Черный Баннер - Угроза или новые технологии?
Что такое стандарт CompactPCI?
Просмотр графики в Программе просмотра изображений и факсов
Motorola и Verizon представили Android-телефон DEVOUR
Законы алгебры логики
Пристрої, що запам'ятовують
Глобальная настройка параметров печати
Разделенная база данных Access
Региональная Система Имен
Анализ мировых тенденций развития сети Internet
Настройка уровня звука
HotMail своими руками, или Что может PH
Графические интерфейсы пользователя
Блокнот: Автоматическая вставка даты и времени