Блог → О защите компьютерных программ от вскрытия. Часть 3

Прошлую заметку о защите программ от "вскрытия" я закончил рассказом о функциях собственно блока защиты, а сегодня пришло время поговорить о следующем компоненте защитной системы - блоке установки характеристик среды. Мы выясним, что это такое, зачем он нужен и более-менее детально разберёмся в его функциях. Итак, если вы готовы, то готов и я - приступаем?

Блок установки характеристик среды (или сокращённо, БУХС) отвечает за то, чтобы "ознакомить" защищаемую программу с характеристиками окружающей среды (т.е. той системы, в которой она будет выполняться). Инициатором этого "знакомства" может выступать как сама защищаемая программа, так и специальный компонент (назовём его "установщик"). Установщик заносит в тело защищаемого файла снятые им характеристики программно-аппаратной среды или, наоборот, подгоняет окружающую среду (например операционную систему DOS), под защищаемую программу, если она изначально не способна функционировать в нормальном окружении.

Чем может быть охарактеризована среда, или к чему именно способна "привыкнуть" программа? Мы будет считать, что такими характеристиками могут быть некоторые особенности: аппаратной среды ЭВМ; программной среды; психофизиологические характеристики оператора компьютера. При этом, если среда недостаточно индивидуальна, то её можно дополнительно индивидуализировать. Перефразируя известное изречение Бернарда Шоу, можно сказать: "Разумная программа сама приспосабливает себя к миру, а неразумная пытается приспособить мир для себя", именно поэтому наличие "неразумных" программ является одной из причин постоянного совершенствования операционных систем.

Особенности аппаратной среды

Речь пойдёт о таких характеристиках компьютера, которые пользователь не может изменять программным путем. Это включает и архитектуру машины, и особенности BIOS, и дополнительные устройства и т.п. Давайте рассмотрим кое-что из этого списка.

1. Архитектура компьютера: наличие жёских и съёмных дисков (устройств А:, В:, С:, D: и т.д.), тип видеоадаптера (XGA, QXGA, EGA, VGA), объём имеющейся оперативной памяти и т.п. Наша программа может получить доступ к оборудованию следующими способами: обратиться к любому из портов ввода/вывода, соответствующему присоединенному оборудованию или к любому адресу оперативной памяти. Если вам интересна тема, то вы без проблем найдёте литературу, где подробно описаны все существующие методы доступа к подобной информации.

Нужно иметь в виду, что при использовании такой информации в целях защиты, необходимо либо установщиком защищаемого пакета, либо самим пакетом, при первом же запуске запомнить в теле загрузочного файла содержимое слова по адресу 0:410, а затем просто осуществлять сравнение. Как только список оборудования перестает соответствовать первоначальному, программа считает, что её "украли".

Самыми большими недостатками данного подхода являются следующие:
- Все компьютеры, имеющие точно такой же список оборудования, программа считает "родными".
- В случае изменения конфигурации на родном компьютере программа, если это предусмотрено, кончает жизнь "самоубийством", несмотря на то что факт несанкционированного копирования отсутствовал.

2. Особенности BIOS (базовой системы ввода/вывода): контрольная сумма и дата создания. Начиная с адреса f000:e05b и до адреса f000:ffff памяти компьютера размещается ROM BIOS. По адресу f000:fff5 обычно указывается дата создания BIOS. Как правило, у всех современных компьютеров по указанным адресам стоит одно и то же значение. Поэтому целесообразно осуществлять одновременную проверку контрольных сумм всех имеющихся ПЗУ, в том числе BIOS винчестера, видеотерминала и т.д. Данный способ не позволяет защищать программное обеспечение в пределах серии.

3. Динамические характеристики различных частей компьютера и их соотношение между собой. Многие аналогичные электромеханические части различных компьютеров (дисковые накопители, принтеры и т.п.) одной серии обладают различными временными характеристиками. Можно измерять эти времена и использовать их, как характерную особенность аппаратной среды. Основные трудности при использовании динамических характеристик заключаются в их зависимости от температуры, времени работы и т.д., что делает затруднительным получение достаточно стабильных характеристик, индивидуальных для каждого устройства. Мне, к примеру, не удалось создать сколь либо приличного защитного механизма, используя динамические характеристики электромеханических частей ПЭВМ. Поэтому данный вариант построения БУХС, на мой лично взгляд (есть вероятность, что кому-то удасться создать что-либо подобное), носит чисто теоретический характер.

4. Специально модифицированный BIOS. Самый простой способ модификации BIOS - это изменение одной или двух ячеек. Для этого достаточно дизассемблировать BIOS, лучше всего дизассемблером Souser (SR), который специально реализует функцию дизассемблирования BIOS. В полученном листинге надо выбрать понравившиеся вам байты, содержимое которых не оказывает влияния на работу ПЭВМ (в конце ROM BIOS есть неиспользуемые участки). После этого требуется заново прошить соответствующие ПЗУ, и ваш компьютер получит уникальный идентификатор. Теперь остаётся лишь "вложить знания" о его уникальности в защищаемую программу, и делается это очень просто. Достаточно в зафиксировать соответствующие коды, прочитать выбранные адреса из ПЗУ и осуществить сравнение. Простой пример: перепрограммировать байт по адресу f000:ff4c на "с" (первоначально там был 0).

Существует и другой, более изощрённый вариант модификации BIOS. Например, можно изменить обработку прерывания 13h (или любого другого), дополнив обработку новой специальной функцией. А затем использовать эту специальную функцию в защищаемой программе. В частности, в качестве одной из первых команд, ответственных за обработку прерывания 13h, можно поставить команду, которая в случае если значение регистра АН (в нем обычно указывается номер функции) больше максимального, то определить его заново заранее выбранным номером функции. Этот выбранный номер функции, в свою очередь, нужно в пользовательской защищаемой программе, исправить на любой номер, больший максимального с помощью специального модификатора (пост-транслятора). В этом случае на компьютере с модифицированным BIOS будет работать вся стандартная математика, так как в ней отсутствуют обращения к прерыванию 13h с номерами функций больше максимального. Наша программа, в свою очередь, сможет работать правильно только на этой машине, прсото потому что ни одна другая не сможет правильно отработать ввод/вывод.

Данный способ защиты хорош в том случае, если вы сами устанавливаете свой пакет на компьютер заказчика, думаю - понятно почему. Вам придется под наблюдением заказчика вскрыть корпус его компьютера, и на его глазах, заменить в нём микросхему ПЗУ. Мне представляется, что, не привлекая внимания заказчика, проделать подобную операцию будет довольно непросто. В данном случае, именно сложность установки снижает конкурентоспособность указанного способа защиты программного обеспечения и является главным недостатком, не считая необходимости прошивки микросхемы ПЗУ (скажем, этот способ неприменим при продаже софта через Интернет или по почте).

5. Специальные устройства. Для усиления защиты часто используются специальные устройства: логические микросхемы, дополнительные ПЗУ, подключаемые к ЭВМ через параллельный или последовательный интерфейс (прозрачные для всех кодов, кроме заранее определенных управляющих последовательностей). В этом случае встает уже другой вопрос - защиты самого специального устройства от копирования. Наиболее простой из всех, заливка его смолой (например, эпоксидной) - далеко не всегда решает эту проблему, потому что всегда могут найтись любители аккуратно поработать с фрезой, срезая смолу слой за слоем.

Наиболее популярным устройством в данном случав является аппаратный интерфейс с пользовательскими пакетами (АИПП) для защиты программного обеспечения от несанкционированного копирования. Интерфейсный блок имеет размеры 8*3*1 см и предназначается для подключения в параллельный порт. Например, именно этим путем пошли разработчики защиты для русской версии пакета AUTOCAD 10 (разработка компании AutoDesk).

АИПП обеспечивает "прозрачную" передачу всех данных кроме ключевой последовательности, в ответ на которую АИПП отвечает специальным байтом. Каждый АИПП (или серия АИПП) отзывается на свою ключевую последовательность байт. Пользователь специально настраивает свой пакет программ на работу с АИПП. В результате пакет будет нормально функционировать только при наличии соответствующего АИПП. Наличие АИПП упрощает процесс поставки пакета заказчику. При продаже пакета, особенно если поставка осуществляется по почте, пользователь не должен заботиться о количестве установок. Тираж пакета определяется числом поставляемых АИПП. Попытка вскрытия АИПП приводит к уничтожению устройства.

Массового применения данный способ к настоящему времени не получил по двум причинам:
- сложность запитать отечественные недорогие микросхемы, не вскрывая корпус компьютера;
- необходимость разработки качественного блока защиты от "рипера". В данном случае это очень важно, потому что понять логику работы АИПП можно разобравшись с программой, т.е. с той ее частью, которая ответственна за интерфейс работы аппаратного интерфейса с пользовательскими пакетами.

6. Наличие на МД или в компьютере специально созданных дефектов, для этого "грубые" люди, как правило, царапают дискету или вырезают в ней отверстия, более "интеллигентные" портят дискеты лазером. Затем запоминают в программе номера дефектных секторов и из защищённой программы пытаются осуществлять запись в дефектные сектора, проверяя коды завершения. Носитель без дефекта (несанкционированная копия) позволяет осуществить нормальную запись в дефектное место, а носитель с дефектом этого не позволит. К примеру, именно таким путем пошли разработчики защиты для пакета KD4.

Недостаток данного способа защиты в том, что относительно несложно создать резидентную программу, которая будет перехватывать все обращения к устройству и возвращать в защищённый пакет все те коды завершения, которые тот желает получить. Поэтому наиболее распространенный способ снятия такой защиты - программное эмулирование особенностей диска.
Недостаток можно ликвидировать, если обращения к внешнему устройству адресовать напрямую, а не через DOS.

Указанные мероприятия по защите могут быть выполнены только для съёмных дисков. Съёмные диски позволяют осуществить доступ к их магнитной поверхности. Это даёт возможность придавать дискам индивидуальные свойства (делая различные физические отметки на носителе). С другой стороны, можно сделать очень точную копию диска с воспроизведением всех особенностей оригинала (физические повреждения можно воспроизвести с помощью лазера, но все это, конечно, требует специального оборудования). Поэтому теоретически вполне вероятно получить вполне адекватную копию съёмного диска, не разбираясь в системе его защиты.

Несъёмные диски (винчестеры) исключают доступ к магнитной поверхности со стороны пользователя. Операции с носителем производятся через устройства, объединенные с диском в одном пакете, поэтому для снятия адекватной копии необходимо разбираться с системой защиты. Со снижением цен на винчестеры возможно распространение ценных программных продуктов на отдельных винчестерах, если будет обеспечена их установка в компьютер.