Блог → Общие принципы построения защиты от копирования

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

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

При рассмотрении вопроса о защите авторских прав можно выделить три основные ситуации, связанные с методом распространения программного обеспечения:
1. Распространение (рассылка или передача) программного продукта на магнитных носителях (дискетах) и установка самим пользователем. Это наиболее часто встречающийся способ распространения программ, который накладывает самые жёсткие требования на систему защиты. При этом у пользователя остается возможность практически неограниченных экспериментов с защищенным программным продуктом. Так, к примеру, пользователь может: пытаться копировать дистрибутивные дискеты, исследовать логику работы защиты при помощи отладочных и дисассемблерных средств, пытаться перенести инсталлированный пакет на другой компьютер, пытаться смоделировать логику работы системы защиты для изготовления тождественного варианта защищенного продукта. Следовательно, в этом случае в системе защиты должна быть предусмотрена защита по всем этим направлениям.
2. Установка программного продукта представителем фирмы. В этом случае возможности пользователя ограничены попытками переноса на другой компьютер или исследованием логики работы защищенных программ.
3. Использование программного продукта лицами, не заинтересованными в его дальнейшем распространении. Особенностью данного случая является то, что пользователь будет сам пытаться не допустить распространения программ и задача защиты от копирования в этом случае сводится к защите от несанкционированного доступа другими лицами. А эта проблема решается значительно легче. Такой случай не так редок, как это может показаться. Так, например, в условиях конкуренции, СУБД, используемая для торгов на бирже, или инженерная САПР на заводе будут строго охраняться от "ухода" к другим потенциальным пользователям-конкурентам. Наконец, можно выделить ситуацию, когда система защиты приобретается только для "взлома".

Надежность системы защиты от копирования

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

Утверждение 1: любая система защиты от копирования может быть раскрыта в конечное время. И утверждение 2: надёжность системы защиты равна надёжности ее слабейшего звена. Верность первого следует из того, что инструкции (команды) системы защиты от копирования достоверно распознаются компьютером, и в момент исполнения присутствуют в открытом виде как машинные команды. Следовательно, достаточно восстановить последовательность этих инструкций, чтобы понять работу защиты. А таких инструкций, очевидно, может быть лишь конечное число. Второе же утверждение вполне очевидно, и не требует комментариев.

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

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

После учёта всех этих моментов, вы сможете определить затраты в процентном отношении от цены защищаемого продукта, которые потребуются от вас для того уровня защиты, который вы признаете достаточно надежным. Главное, что надо решить - будете ли вы использовать готовую защиту или же изготавливать специализированную, для своего продукта. Как правило, специализированная защита обходится в 10—12 раз дороже чем готовая, но и во столько же раз более надежна!

Например, ваша программа стоит 2000 рублей, в месяц распродается 20 копий, периодичность смены версий составляет 3 месяца. Потребитель вашей программы - бухгалтерии различных фирм, т.е. возможности по снятию защиты малы. Если вы определяете допустимый размер затрат на защиту в 5% от цены, т.е. 100 рублей, то на защиту 60 копий вы можете потратить 6000 рублей, и купить достаточно хорошую пристыковываемую защиту типа Cerberus, Convoy или Protect. При хороших отношениях с пользователем можно в данном случае вообще не защищать программу от копирования.

Очень часто возникает ситуация, когда готовая защита:
- не работает с Вашим продуктом;
- не работает на Ваших компьютерах или компьютерах Вашего заказчика;
- легко снимается с Вашего продукта.

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

Структура защиты от копирования

Системы защиты от копирования состоят, как правило, из следующих компонент (в скобках указаны главы настоящего издания, в которых рассмотрены вопросы их построения):
1. Модуль проверки недублируемой или оригинальной информации - проверяет наличие некопируемых признаков на диске или оригинальную для данного компьютера информацию. По размещению этого модуля можно выделить 3 основных типа систем защиты:
- системы с "навесным" проверочным модулем, созданным по технологии файлового вируса (так работают системы Shield, Convoy, NOTA, Zond 3.0, Super Guard и Cerberus);
- системы с внешним проверочным модулем, вынесенным в отдельную программу (Protect 5.0, Protect-Super, Watch);
- системы с внутренними функциями проверки (защищенные пакеты MetaDesign, Boeing Graph, Xilinx).
2. Модуль защиты от просмотра и анализа логики системы (на этом я остановлюсь подробнее в следующих заметках).
3. Модуль согласования с защищенными структурами - обеспечивает правильную работу защищенных программ и адекватное восприятие защищенных данных в случае легальных копий (также будет рассмотрен позднее).

Некоторые авторы считают необходимым дополнять систему защиты блоком ответной реакции, который должен производить различные карательные действия в случае нелегальных копий, но мое твердое мнение - его быть не должно, поскольку защита, создающая "троянские кони" и заражающая компьютер "вирусами", вряд ли понравится пользователю. Более того - она становится ничем не отличимой от вируса. Да и жестоко наказывать за обычное любопытство нельзя.