Как создать и проверить лицензионный ключ программного обеспечения? - PullRequest
216 голосов
/ 01 марта 2009

В настоящее время я занимаюсь разработкой продукта (разработанного на C #), который будет доступен для бесплатной загрузки и установки, но в очень ограниченной версии. Чтобы получить доступ ко всем функциям, пользователь должен оплатить лицензионный сбор и получить ключ. Затем этот ключ будет введен в приложение для «разблокировки» полной версии.

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

  1. Как это обычно решается?
  2. Как мне сгенерировать ключ и как его можно проверить приложением?
  3. Как можно также избежать публикации ключа в Интернете и его использования другими лицами, которые не заплатили лицензию (ключ, который в основном не является "их").

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

Что-нибудь еще, о чем я должен подумать в этом сценарии?

Ответы [ 15 ]

4 голосов
/ 01 марта 2009

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

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

3 голосов
/ 13 мая 2017

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

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

Я создал Keygen с учетом этого типа лицензирования. Keygen - это лицензионный REST API, который позволяет управлять учетными записями пользователей, лицензиями, а также отслеживать использование / ассоциации компьютеров.

Что бы я сделал, это настроил 2 типов лицензий ( policy в Keygen), где один является базовой политикой для ограниченной бесплатной версии, а другой - политикой для платная версия.

Я не уверен, что вы используете для платежей, но давайте предположим, что вы используете что-то вроде Stripe (довольно стандартное в наше время), которое предлагает webhooks . У Keygen также есть webhooks (используете ли вы это или нет, все это все еще применимо). Вы можете интегрировать Keygen для общения с вашим платежным провайдером с помощью веб-крюков с обеих сторон (подумайте: customer.created -> создать базовую лицензию для клиента, license.created -> взимать плату с клиента за новую лицензию).

Таким образом, используя webhooks, мы можем автоматизировать создание лицензий для новых клиентов. Так как насчет проверки лицензии в самом приложении? Это может быть сделано различными способами, но наиболее популярным является требование, чтобы ваш клиент ввел длинный лицензионный ключ в поле ввода, которое затем можно проверить; Я думаю, что это ужасный способ обработки проверки лицензии в вашем приложении.

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

Хорошо, а какая альтернатива? Я думаю, что лучшая альтернатива - делать то, к чему привыкли все ваши клиенты: , позволяя им создать учетную запись для вашего продукта, используя адрес электронной почты / пароль . Затем вы можете связать все их лицензии и их машины с этой учетной записью. Так что теперь вместо ввода лицензионного ключа они могут просто войти в систему, используя свои учетные данные.

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

Теперь к проверке лицензии : всякий раз, когда ваш клиент входит в ваше приложение со своим адресом электронной почты / паролем, вы можете запросить в своей учетной записи пользователя лицензии, которыми они владеют, чтобы определить, могут ли они использовать feature-X или feature-Y . А поскольку ваше приложение теперь самообслуживается , вы можете позволить своим клиентам приобретать дополнительные функции непосредственно из вашего приложения!

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

В любом случае, это стало длинным, но, надеюсь, кому-то это поможет!

3 голосов
/ 08 января 2015

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

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

2 голосов
/ 31 января 2016

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

Лицензирование на узле (машине) заблокировано, если вы хотите предотвратить повторное использование лицензионных ключей. Я использую Cryptlex уже около года для своего программного обеспечения. У него также есть бесплатный тариф , поэтому, если вы не ожидаете слишком много клиентов, вы можете использовать его бесплатно.

0 голосов
/ 10 апреля 2018

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

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

Вы должны запустить готовое программное обеспечение через De4Dot и .NetReflector, чтобы перепроектировать его и посмотреть, что взломщик увидит, если они сделают то же самое, и убедиться, что вы не оставили важный код открытым или скрытым.

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

https://quantum -key.net

Как использовать ConfuserEx?

https://github.com/0xd4d/de4dot

https://www.red -gate.com / динамическая / продукция / DotNet-разработка / отражатель / скачать

...