Добрый день!
Создавая свое первое коммерческое приложение, я стал задумываться о системе, которая защитит его от несанкционированного копирования, и косвенно поможет мне контролировать его продажи. Сам я программист и не имею опыта в продажах, и на этапе распространения ПО, хотел привлекать для этого специально обученных людей. Для этого я разработал для своего ПО специальную систему лицензирования. Как выяснилось мне позже, Ваше ПО после создания никто продвигать не будет, пока оно не станет известным и без ошибок работающим. Так что надо учиться продавать так же хорошо, как и программировать. А система лицензирования – она осталась, и надеюсь, в будущем она еще сыграет свою роль в распространении ПО.
В общем, я и хочу поведать о системе лицензирования, которую я разработал для своего ПО. Вдруг какие-то идеи пригодятся кому-то для того чтобы получать больше денежек за свои приложения. Эта система не претендует за абсолютно защищенную, но это очень хорошая защита от дурака.
Давайте не будем делать из себя ангелочков и меценатов. Все программисты хотят получать достойный денежный эквивалент за свои программы.
Т.е. цели при создании системы лицензирования были такими:
1. Контроль установки ПО, бесплатного и не бесплатного
2. Возможность сделать ПО внезапно платным
3. Контроль функционала ПО
Тех. задание от самого себя самому себе ставилось такое:
4. ПО не должно работать не получив ключа активации
5. Ключ активации не должен храниться в дистрибутивах ПО и его нельзя просто вычислить (вычислить можно, но не просто)
6. ПО не должно запускаться, если его «пропатчить»
7. Ключ активации должен быть привязан только к одному работающему экземпляру ПО
8. Возможность менять ключи активации после обновления ПО
9. Возможность ограничивать действие ключа активации по времени
10. Ключ активации должен нести информацию об задействованных модулях в программе.
Сразу оговорюсь, что ПО, для которой разрабатывалась система лицензирования – программа для продаж. В ней используется СУБД MS SQL. Распространять это программное обеспечение планируется через интернет, как бесплатную версию и через продавцов за деньги. В бесплатной версии предполагается отключать некоторый функционал, и если клиент решает использовать полную версию, то он может ее приобрести.
Через некоторое время общая схема работы системы лицензирования стала такова:
Все начинается с того что пользователь получает ПО. ПО можно получить, загрузив его с сайта программы. Далее устанавливает его на своем сервере СУБД и рабочих станциях. После установки программа не запускается, а просит ввести ключ активации.
Вообще активация может выполняться двумя способами:
1. Активации ПО как бесплатного
2. Активация ПО, полученного через продавца
Прежде чем описать шаги по активации ПО, кратко опишу, как его сначала подготовить.
Перед тем как создать дистрибутив и начать распространять ПО, после компиляции в его бинарный файл и базу данных вносятся изменения и дополнительная информация. Это прежде всего версия ПО, и разрешения на запуск некоторых модулей. Так же шифруются критически важные для работы участки кода. Ключ шифрования известен только поставщику ПО, который создал релиз.
Ну а теперь сама активация. Механизм активации таков:
1. Клиент получает ПО
2. Установка ПО
3. Первый запуск ПО
4. Получение регистрационного кода программы
5. Получение кода активации
6. Перезапуск программы
Но для получения кода активации нужно регистрационный код программы сначала передать поставщику ПО. Код активации можно получить как с сервера активации, который расположен в интернете, так и вручную, связавшись с поставщиком ПО по почте или телефону.
По регистрационному коду программы создается код активации. Для этого исходными данными для получения кода активации служат переданные через регистрационный код: Релиз программы, номер жесткого диска или сетевой карты, ИД базы данных.
Так же для создания кода активации необходим ключ шифрования ПО. При активации как бесплатного ПО, через интернет, ключ шифрования «зашивается» в код активации через механизмы на сервере активации.
Если клиент получает код активации через продавца, то продавец потом запрашивает его у вас (т.е. поставщика ПО), чтобы потом передать его клиенту. Для одного приложения у меня процесс получения кода активации через продавца так же был автоматизирован. На каждого продавца в системе лицензирования заводился аккаунт, где он мог получать коды активации для ПО.
Здесь изображен интерфейс приложения, которое генерирует коды активации:
Интерфейс получения кода активации через интернет с ограничением функционала:
В полученном коде активации содержится ключ, по которому зашифрованы критически важные участки кода. Как только код активации попадает в базу данных программы, она начинает работать.
Вроде как идея проста, но реализовать это все оказалось немного сложнее, чем я рассчитывал. Особенно, наверное, потому что при реализации серверной части системы лицензирования мне пришлось познакомиться с особенностями создания расширений для PHP, «прокачаться» в программирование на Си, да и вообще узнать, что такое Unix платформа поближе (у хостинга, где размещается система лицензирования установлена FreeBSD). Это волшебный мир… Выбор в сторону Unix был сделан по экономическим соображениям. Хоститься на юниксе дешевле в 15 раз, чем на виндовс. Сервер стоит, и кушать не просит.
В системе лицензирования использовались библиотеки OpenSSL. Без шифрования никуда.
Это мой первый пост на хабре. Если у народа возникнут более конкретные технические вопросы по этой системе лицензирования, то я с удовольствием на них постараюсь ответить.
Всем побольше работающих приложений и побольше денюшек.
Спасибо за внимание.
ссылка на оригинал статьи http://habrahabr.ru/post/190844/
Добавить комментарий