Защита вновь создаваемых программ
Ключевую информацию (будем для краткости называть ее ключ) о незараженной программе можно хранить в отдельном файле, но в этом случае существует опасность потерять дополнительный файл при копировании про¬граммы или ошибочно уничтожить его. Гораздо надежнее хранить ключ в теле самого защищаемого файла. К сожалению, его нельзя подобно вирусу пристыковать в конец файла, т.к. в случае заражения вирус изменит поля PartPag и PageCnt и мы никогда не сможем определить то место в файле, где он рас¬полагается. Вспомним, что все константы (в том числе и типизированные) создаются на этапе компиляции программы, таким образом, в файле обяза¬тельно имеется область данных, содержащая значения этих констант. Эта область в Турбо Паскалевых программах располагается в самом конце за¬гружаемой части файла (см. рис.6.2).
Следовательно, мы должны объявить в программе типизированную кон¬стант, предназначенную для хранения ключа, а затем в область файла, отве¬денную для ее размещения, поместить нужную информацию.
Каким образом отыскать в ЕХЕ-файле место, занимаемое ключом? Ко¬нечно, можно перед ним в программе разместить какую-либо типизиро¬ванную константу с характерным значением (например, заранее обуслов¬ленную текстовую строку) и затем отыскивать ее в файле. Однако такое ре¬шение вряд ли можно признать удовлетворительным: во-первых, всегда существует вероятность того, что какой-то фрагмент кодов программы со¬держит ту же цепочку байт, что и заголовок ключа; во-вторых, придется просматривать подчас большой по объему ЕХЕ—файл в поисках нужной константы. Значительно изящнее выглядит решение, основанное на точном вычислении смещения от начала файла до ключа.
Для этого нужно определить начало области данных в файле. В заголовке файла не предусмотрено никакой информации о начальном значении регистра DS, в котором хранится сегмент данных. Перед передачей управления про¬грамме загрузчик устанавливает значение этого регистра так, чтобы он ука¬зывал на начало так называемого префикса программного сегмента {PSP), а запущенная программа уже сама должна установить его надлежащим образом.
Префикс программного сегмента имеет длину 256 байт (16 параграфов) и размещается загрузчиком в оперативной памяти непосредственно перед за¬груженной программой. В PSP содержится различная служебная информация, которая может быть достаточно важной для ДОС и работающей программы (в PSP, например, хранятся параметры обращения к программе), но в нем нет указаний на содержимое регистра DS. Таким образом, найти начало области данных в файле достаточно трудно. Однако это нетрудно сделать в работающей программе-для этого предусмотрена стандартная функция DSeg, возвра¬щающая сегмент данных. Если бы программа могла получить также инфор¬мацию о сегменте PSP, с которого начинается загруженная программа, можно было бы вычислить смещение в файле от его начала до начала области данных. Такая возможность есть-функция MS-DOS с номером $62 возвращает в регистре ВХ значение сегмента PSP. Следовательно, программа должна полу¬чить значения обоих сегментов, вычислить их разницу и таким образом оп¬ределить место в файле, с которого начинается область данных.
Остается последняя проблема-как найти нужную константу. Турбо Паскаль размещает константы в области данных по мере их объявления в программе. Зная размер каждой константы и порядок их объявления, можно вычислить место размещения нужной нам типизированной константы. Однако этот метод не годится для универсальной программы защиты, так как порядок объявления констант может меняться от программы к программе. К счастью, мы можем использовать операцию получения адреса @. Результатом приме¬нения этой операции к адресу константы, выбранной в качестве ключа, яв¬ляется указатель (четырехбайтный адрес); смещение адреса, который он со¬держит, и является нужным нам смещением начала ключа относительно начала области данных.
Статьи по теме:
Математическая логика в техникеПроблема предотвращения формирования общества потребленияРисование кривой Сброс дисковой системыКрэкинг (вершина айсберга)ПРЕДУПРЕЖДЕНИЕ КОМПЬЮТЕРНЫХ ПРЕСТУПЛЕНИЙОсновные черты NetWare 3.x - 4.xМетодика и практика расследования преступлений в сфере компьютерной информацииОчистка большой области рисунка Численные методы, используемые в данной работеОбыск и выемкаПрочие функции Microsoft Internet Explorer 6 Горизонтальная подсистемаПонятие окон в WINDOWS. Типы окон. Элементы оконРемонт & обслуживание регистратуры WindowsТИПЫ ЛКССпособы совершения компьютерных преступленийОрганизация объектов сетиСтруктура СКСПрокладка абонентских линийОтложенная печать документов ОС Windows Vista повысит популярность планшетных компьютеровПонятие компьютерных преступленийЗао «Лайт Коммуникейшн» Подтвердила Свой Статус «Microsot Gold Certified Partner» В 2008 ГодуЗащита памяти в ЕС ЭВММаркировка + контроль вскрытия с этикетками В-367Системный блокРазработка Баз Данных, Взгляд ИзнутриНазначение деловых игрНастройка интерфейса редактора Paint Замена стандартного ядра и HAL Работа со сжатыми дискамиМЕТОДЫ ЗАЩИТЫ ОТ КОМПЬЮТЕРНЫХ ВИРУСОВОбласти в которых используются компьютерные системы на базе CompactPCIПредпосылки развития информационного общества в УкраинеО Windows VistaКакое сжатие файлов лучшее?Электронная почтаИспользование команд контроллера НГМДHесанкционированный доступ к информации, хранящейся в компьютереЭкспертные СистемыУправление выполнением программыСтруктура функционирования сетиУголовно-правовой анализ ст? 274 гл? 28 УК РФ "Нарушение правил эксплуатации ЭВМ, системы ЭВМ или их сети"МИКРОПРОЦЕССОР КАК ОСНОВА ЭВМАмериканские проекты создания информационной супермагистралиЭВМЭлектронные платыУровень агентовРежимы работы ЕС ЭВМУкраинский сегмент сети Internet сегодня Создание сети с человеческим лицом. Прикладное обеспечениеИспользование комментариев Классификация ЭВММесто кибернетики в системе наук