Как создать лицензионный ключ для программы

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

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

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

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

О чем еще мне следует подумать в этом сценарии?

Riri 1 Мар 2009 в 16:41

15 ответов

Лучший ответ

Лицензионный ключ программы на Python | ЧАСТЬ 2 | Создание клиент-серверной программы и генератора

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

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

  • Сгенерируйте себе секретный ключ для продукта
  • Возьмите имя пользователя
  • Объедините имя пользователя, секретный ключ и хэш (например) с SHA1
  • Распакуйте хэш SHA1 как буквенно-цифровую строку. Это «ключ продукта» отдельного пользователя.
  • В программе сделайте тот же хеш и сравните с ключом продукта. Если равно — ОК.

Но, повторяю: это не предотвратит пиратство

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

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

Steven A. Lowe 10 Дек 2010 в 18:08
Если программа включает секретный ключ (как подразумевается в шагах выше), взломать его тривиально.
Steven A. Lowe
8 Дек 2010 в 17:49
Отредактирован, чтобы быть более очевидным; не могу переоценить что-то фундаментальное 😉
Steven A. Lowe

10 Дек 2010 в 18:09

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

Amir Moghimi
19 Июн 2012 в 10:43

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

Как крякнуть практически любую программу (обзор Avenger)

5 Дек 2012 в 02:56

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

5 Дек 2013 в 01:01

Я один из разработчиков платформы лицензирования программного обеспечения Cryptolens и работаю над системами лицензирования с 14 лет. На этот ответ я включил несколько советов, основанных на опыте, накопленном за эти годы.

Читайте также:
Программа чтобы строить дома в раст

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

Преимущества сервера лицензионных ключей

Преимущества сервера лицензионных ключей:

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

Соображения

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

Решение состоит в том, чтобы всегда подписывать ответ с лицензионным ключом от сервера, используя криптосистему с открытым ключом, такую ​​как RSA или ECC (возможно, лучше, если вы планируете работать во встроенных системах). У вашего приложения должен быть только открытый ключ , чтобы проверить ответ лицензионного ключа.

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

Примечание , вы всегда должны проверять ответ сертификата лицензионного ключа, даже если вы подключены к Интернету), чтобы убедиться, что он не был изменен после того, как покинул сервер (это все еще должно быть сделано, даже если ваш API к серверу лицензионных ключей использует https)

Защита секретных алгоритмов

Большинство .NET-приложений можно довольно легко реконструировать (существует как диассемблер, предоставляемый Microsoft для получения кода IL, так и некоторые коммерческие продукты могут даже получать исходный код, например, на C #). Конечно, вы всегда можете запутать код, но это никогда не безопасно.

В большинстве случаев цель любого решения по лицензированию программного обеспечения — помочь честным людям быть честными (то есть, чтобы честные пользователи, которые готовы платить, не забывали платить по истечении пробного периода и т. Д.).

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

Реализация

Если вы не хотите реализовывать все самостоятельно, я бы рекомендовал взглянуть на это руководство (часть Cryptolens)

Artem 25 Авг 2018 в 19:50

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

Amir Mahdi Nassiri
8 Май 2020 в 20:33

Разве пользователи не могут обойти сервер онлайн-лицензий, определив узел обратной связи в Windows? Я видел много таких пиратских приложений, и помню только Resharper и Matlab.

Amir Mahdi Nassiri
8 Май 2020 в 20:35

По вопросу 1: если компьютер постоянно находится в автономном режиме, вы можете использовать ключ часов реального времени (RTC) в качестве надежного источника времени. По вопросу 2: поскольку ответ подписан закрытым ключом поставщика (и подтвержден открытым ключом внутри приложения), злоумышленнику потребуется повторно подписать файл, не зная закрытого ключа, который на момент написания невозможно с 2048-битными ключами RSA.

Читайте также:
Как перезагрузить программы на телевизоре

10 Май 2020 в 15:56

Механизм C # / .NET, который мы используем для генерации лицензионных ключей, теперь поддерживается как открытый исходный код:

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

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

gb2d 20 Янв 2015 в 14:35

Не могли бы вы сделать руководство по использованию этого продукта? Я обнаружил, что их вики немного не хватает.

Источник: question-it.com

Как создаются лицензионные ключи программного обеспечения?

Лицензионные ключи являются стандартом defacto как мера борьбы с пиратством. Честно говоря, это выглядит как (in) Security Through Obscurity, хотя я действительно не знаю, как генерируются лицензионные ключи. Какой хороший (безопасный) пример генерации лицензионного ключа? Какой криптографический примитив (если есть) они используют? Это дайджест сообщений?

Если да, то какие данные они будут хешировать? Какие методы применяют разработчики, чтобы затруднить взломщикам создавать собственные генераторы ключей? Как генерируются ключевые генераторы?

ОТВЕТЫ

Ответ 1

Для старомодных компакт-дисков, это просто вопрос составления алгоритма, для которого ключи компакт-диска (которые могут быть любой строкой) легко создавать и легко проверять, но соотношение действительных CD-ключей и Недопустимые ключи CD настолько малы, что случайное угадывание ключей CD вряд ли приведет вас к действительной.

НЕПРАВИЛЬНЫЙ СПОСОБ ДЕЛАТЬ ЭТО:

Starcraft и Half-life использовали одну и ту же контрольную сумму, где 13-я цифра подтвердила первый 12. Таким образом, вы можете ввести что-либо для первых 12 цифр и угадать 13-е (есть только 10 возможностей), что приводит к печально известному 1234-56789-1234

Алгоритм проверки является общедоступным и выглядит примерно так:

x = 3; for(int i = 0; i < 12; i++) < x += (2 * x) ^ digit[i]; >lastDigit = x % 10;

ПРАВИЛЬНЫЙ ПУТЬ ДЕЛАТЬ ЭТО

Windows XP занимает довольно много информации, шифрует его и помещает буквенную/цифровую кодировку на стикер. Это позволило MS одновременно проверить ваш ключ и получить тип продукта (домашний, профессиональный и т.д.) Одновременно. Кроме того, для этого требуется онлайн-активация.

Полный алгоритм довольно сложный, но хорошо очерченный в этот (полностью законный!) Документ, опубликованный в Германии.

Конечно, независимо от того, что вы делаете, если вы не предлагаете онлайн-сервис (например, World of Warcraft), любой тип защиты от копирования — это просто стойка: к сожалению, если это любая игра стоит ценность, кто-то нарушит (или, по крайней мере, обход) алгоритм CD-ключа и все другие меры защиты авторских прав.

РЕАЛЬНЫЙ ПРАВИЛЬНЫЙ ПУТЬ ДЕЛАТЬ ЭТО:

Для онлайн-сервисов жизнь немного проще, так как даже с двоичным файлом вам необходимо пройти аутентификацию со своими серверами, чтобы использовать ее (например, иметь учетную запись WoW). Алгоритм CD-ключа для World of Warcraft, используемый, например, при покупке игровых карт — вероятно, выглядит примерно так:

  • Создайте очень большое криптографически безопасное случайное число.
  • Сохраните его в нашей базе данных и распечатайте на нем.

Для онлайн-сервисов нет причины не использовать приведенную выше схему; используя что-либо еще, приведет к проблемам.

Ответ 2

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

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

Читайте также:
Программа методы психологического исследования

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

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

enter image description here

В качестве примера мы построим этот график, выделим четыре точки и закодируем в строку как «0, -500; 100, -300; 200, -100; 100,600»

Как я могу создать ключ продукта для моего приложения C #?

Как я могу создать ключ продукта для моего приложения C #? Мне нужно создать ключ продукта (или лицензии), который я обновляю ежегодно. Кроме того, мне нужно создать пробную версию.

  • Как лучше всего скрыть код подтверждения лицензии на продукт C #?
  • Как вы защищаете свое программное обеспечение от незаконного распространения?

14 ответы

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

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

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

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

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

edit: Я просто хочу добавить, не тратьте на это слишком много времени и не думайте, что каким-то образом ваша запутанная схема будет отличаться и не поддается взлому. Этого не будет и не может быть до тех пор, пока люди контролируют оборудование и ОС, на которых работает ваша программа. Разработчики пытались придумать для этого все более сложные схемы, думая, что если они разработают для этого свою собственную систему, то она будет известна только им и, следовательно, «более безопасна». Но на самом деле это программный эквивалент попытки построить вечный двигатель. 🙂

Источник: stackovergo.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru