14.3. Условно бесплатные и Demo-версии | Телекоммуникации вчера, сегодня, завтра

Последовательность действий при создании объекта радиосвязи

Бланк формы №1 ТАКТИКО-ТЕХНИЧЕСКИЕ ДАННЫЕ РЭС

Поставка оборудования обеспеченного радиочастотами

Витрина



14.3. Условно бесплатные и Demo-версии

Для того чтобы потенциальные пользователи смогли лучше оценить возможности программы, разработчики часто распространяют демонстрационные версии своих продуктов. Такие версии, как правило, имеют ограниченный набор функций и/или ограничение на время использования или количество запусков программы.

Условно бесплатные продукты обычно являются ограниченными версиями, которые предоставляют пользователю возможность ввода регистрационного кода, после чего все ограничения снимаются.

14.3.1. Ограничение функциональности

Если автор демонстрационной версии программы хочет сделать недоступным, например, пункт меню Save, то он может пойти двумя путями:

  • при инициализации программы сделать этот пункт недоступным;
  • удалить из программы весь код, относящийся к сохранению данных на диске, и при инициализации программы сделать пункт меню Save недоступным.

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

Поэтому необходимо исключить из кода демонстрационной программы те функции, которые должны присутствовать только в полной версии. Достичь желаемого результата, не создавая две очень похожих программы, можно, например, путем использования директив условной компиляции, поддерживаемых препроцессором языка С. К полезным директивам относятся, например, #define, #ifndef, #ifdef, #else и #endif. С их помощью можно добиться того, что, изменяя в настройках проекта всего одно определение препроцессора (аналог #define), можно будет из одного набора исходных текстов получить совершенно разные по набору функций программы.

14.3.2. Ограничение периода использования

Для того чтобы ограничить период возможного использования продукта, необходимо в некоторой области компьютера сохранить дату установки или количество запусков. Обычно для этого используются произвольные файлы или реестр (Registry Database). Многие считают, что, спрятав такой счетчик в самый дальний угол операционной системы, они сделают невозможным обнаружение его местоположения, а следовательно, и сброс счетчика. Однако существует два семейства инструментов, позволяющих определить, где именно располагается счетчик. К первому семейству относятся программы-мониторы. Они отслеживают все обращения к файлам или реестру и протоколируют те из них, которые попросил запомнить пользователь. Мониторы обычно состоят из двух частей: драйвера, устанавливаемого в ядро операционной системы, и интерфейсной части, посредством которой пользователь имеет возможность управлять работой монитора и получать результаты протоколирования. Наиболее известными являются, наверное, программы Ffle System Monitor и Registry Monitor, разработанные компанией Sysinternals.

Однако программы могут противодействовать мониторам. Очень важен тот факт, что монитор является активным инструментом — для того чтобы монитор выполнял свои функции, он должен находиться в памяти во время работы исследуемой программы. Следовательно, защищенная программа может обнаружить присутствие монитора и скорректировать свое выполнение разными способами. Например, она может просто отказаться работать, если в памяти присутствует монитор. Другой способ заключается в посылке интерфейсной части монитора сообщения о необходимости завершения работы. При этом монитор оказывается выгруженным из памяти, программа продолжает функционирование в чистом окружении. Красиво выглядит и следующий способ: защищенная программа посылает драйверу монитора команду временно приостановить регистрацию событий, выполняет важные обращения, а затем снова разрешает драйверу работать. При этом интерфейсная часть монитора никак не отражает тот факт, что работа драйвера была откорректирована. И пользователь находится в полной уверенности, что программа не производила никаких обращений, в то время как они имели место, но монитор в это время просто был отключен.

Противодействие мониторам работает только в том случае, если программа знает, как определить наличие монитора в памяти и как его обезвредить. Поэтому часто противнику достаточно изменить логическое имя драйвера монитора, чтобы программа оказалась не в состоянии его обнаружить.

Кроме программ-мониторов, принадлежащих к семейству активных инструментов, есть и семейство пассивных инструментов. Это программы, которые позволяют отслеживать произошедшие изменения, не находясь все время в памяти. Просто до первого запуска защищенной программы необходимо сохранить текущее состояние реестра или определенных файлов, а после запуска сравнить новое состояние с предыдущим. Те записи, которые были изменены, сразу окажутся на подозрении у противника. Использование пассивных инструментов не может быть обнаружено защитой, и единственный способ противостоять им — внести очень большое количество фиктивных изменений, чтобы затруднить противнику определение действительно важных записей. Но такой подход неминуемо приведет к снижению производительности.

14.3.3. Программы с возможностью регистрации

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

Однако интуитивно понятно, что подобная схема может быть уязвлена множеством способов.

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

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

И, конечно же, если регистрационные данные просто проверяются на корректность, ничто не мешает противнику исправить тело процедуры проверки таким образом, что любые введенные регистрационные коды будут считаться правильными. Лучше сделать так, чтобы регистрационная информация использовалась в жизненно важных функциях программы.

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



Поиск по сайту


Смотрите также