Подтвердить что ты не робот

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

У меня очень большая проблема. Это "Как создать лицензию для моего программного обеспечения".

ОК, подумайте, что это мой лицензионный ключ - 12345YW

когда пользователь вводит этот лицензионный ключ, программное обеспечение должно позволить ему использовать программное обеспечение. Хорошо, как только пользователь вводит лицензионный ключ, мое программное обеспечение должно помнить, что он ввел действительный ключ, правильно? (Потому что со следующего раза ему не нужно запрашивать диалоговое окно лицензии). Мой вопрос: как я могу сделать свой программное обеспечение, чтобы помнить, что пользователь ввел лицензию? В приложениях на базе окон большинство из них - это ввод записи в реестр Windows. Могу ли я сделать то же самое? (Тогда как насчет Ubuntu и Mac?)

Я подумал о написании файла .txt, чтобы программное обеспечение smogло прочитать его и найти, введена ли лицензия или нет. Однако это самая безопасная система, о которой я могу думать.

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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

В частности, я бы:

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

Это тривиально легко для break;, чтобы вы могли идти дальше.

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

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

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

Ответ 2

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

Итак, вместо того, чтобы пытаться получить почетный Comp Sci Ph.D, создав программное обеспечение, которое обеспечивает политику безопасности компании для злого клиента...

(крайне маловероятно)

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

Примечание. Бонус заключается в том, что вы получаете устойчивый поток доходов для "управления" программным обеспечением для ваших клиентов.

Ответ 3

Похоже, вы пытаетесь создать лицензирование в своем программном обеспечении. Вы считали, что используете библиотеку для этого, а не для этого? Возможно, посмотрите True License, он должен делать то, что вам нужно.