Как создать лицензию для моего программного обеспечения Java? [закрытый]
У меня очень большая проблема. Это "как создать лицензию для моего программного обеспечения".
Ладно, думаю, это мой лицензионный ключ-12345YW
Когда пользователь вводит этот лицензионный ключ, программное обеспечение должно позволить ему использовать программное обеспечение. Хорошо, как только пользователь вводит лицензионный ключ, мое программное обеспечение должно помнить, что он ввел действительный ключ, верно?(потому что в следующий раз он не должен запрашивать лицензионный диалог) мой вопрос заключается в том, как я могу сделать свое программное обеспечение, чтобы помнить, что пользователь имел ввели лицензию? В приложениях на базе windows большинство из них вводят запись в реестр windows. Могу ли я сделать то же самое? (Тогда как насчет Ubuntu и Mac?)
Я думал написать а .txt-файл, так что программное обеспечение m может прочитать его и найти, введена ли лицензия или нет. Однако это самая безопасная система, которую я могу придумать.
Итак, если я ввожу вышеуказанный лицензионный ключ, как я могу заставить свое программное обеспечение запомнить его? Я очень рад, если вы можете дать мне пример кода тоже (т. е. не знаю, как редактировать реестр, в случае реестра windows и т.д.). Пожалуйста, помогите мне...
3 ответа:
Лицензирование программного обеспечения еще не решена проблема-или, по крайней мере, сделать это безопасно, не причиняя неудобств вашим пользователям, и без инвестиций в основную инфраструктуру не решена.
Расположение / механизм, с помощью которого вы сохраняете статус лицензии, в основном не имеет значения - реестр не более безопасен, чем текстовый файл - требуется несколько секунд, чтобы получить доступ к содержимому, и "скрытие" записи в каком-то удаленном захолустье реестра не очень помогает.
Предположительно, ваш у программного обеспечения есть какая-то постоянная вещь (база данных? файловая система?); вы можете использовать тот же механизм сохранения для сохранения статуса регистрации.
Конечно, все, что ваше программное обеспечение может читать / записывать, может быть доступно людям, пытающимся получить несанкционированный доступ к вашему программному обеспечению. Итак, вы можете зашифровать запись; тогда у вас есть проблема управления ключом для этого механизма шифрования; afaik, сейчас нет надежных решений для этого.
Итак, тогда у вас может быть "сервер лицензий" в интернете; ваше программное обеспечение может прочитать уникальный идентификатор вашей машины (например, MAC-адрес), отправить его на сервер лицензий и заставить сервер вернуть статус лицензии. Опять же, это довольно тривиально, чтобы обойти, и теперь вы требуете, чтобы ваши пользователи были онлайн, чтобы использовать ваше программное обеспечение.
Если ваше программное обеспечение удаленно привлекательно для пользователей, хакеры взломают защиту лицензионного ключа в течение нескольких дней и опубликуют подробные инструкции в интернете. Apple идет на крайние меры, чтобы защитить программное обеспечение на Iphone / Ipad,и все же джейлбрейк приложений разблокировать их.
На мой взгляд, если ваше программное обеспечение не стоит доходов в десятки миллионов долларов, вы должны максимально облегчить жизнь своим пользователям и не слишком беспокоиться о безопасности - использовать что-то готовое (как рекомендует @bunting) или довольствоваться текстовым файлом.
В частности, я бы:
- проверьте наличие действительной лицензии файл при запуске приложения
- если файл лицензии отсутствует, попросите пользователя ввести лицензионный ключ
- сравните этот ключ с вашим лицензионным ключом
- запишите "допустимый" файл в файловую систему в каталоге вашего приложения; или измените существующий конфигурационный файл.
Это тривиально легко сломать; так что вы можете пойти еще на один шаг дальше.
Во-первых, Java-приложения легко декомпилируются, и злоумышленник может легко прочитать вашу константу "лицензия". Вы должны использовать обфускатор сделать это сложно (хотя и не невозможно).
Во-вторых, вы можете зашифровать свои локальные лицензионные данные; это также усложнит задачу для совершенно случайного хакера. Вы можете включить некоторые локальные данные в схему шифрования, чтобы хакер не смог просто повторно распространить ваше приложение с рабочим лицензионным ключом (например, умножив лицензионный ключ на MAC-адрес машины).
В обоих случаях вы" проводите " лицензию в приложение; есть доски объявлений где хакеры публикуют лицензионные ключи для приложений, и вы не сможете ответить иначе, чем выпустив новую версию приложения с новым ключом.
Я удивлен, что одна возможность была упущена. Самый простой способ защитить данные от ненадежного клиента-никогда не позволять клиенту получить их. Несколько архитектур приложений позволяют это: веб-приложение, настольный клиент, подключающийся к удаленному серверу, или высокопроизводительный тонкий клиент, подключающийся к виртуализированному рабочему столу на удаленном сервере. Веб-приложения уже популярны благодаря своим преимуществам в области установки, резервного копирования и обслуживания данных.
Итак, вместо того, чтобы попытка получить почетную степень доктора наук, создав программное обеспечение, которое применяет политику безопасности компании к злому клиенту...
(крайне маловероятно)
...вы просто помещаете интеллектуальную собственность на доверенный сервер, и клиент просто имеет пользовательский интерфейс (и неконфиденциальную логику). Эта стратегия имеет свой собственный gotcha'S, хотя ее послужной список намного лучше, чем защита от копирования клиентов.
Примечание: бонус заключается в том, что вы получаете постоянный поток дохода за "управление" программное обеспечение для ваших клиентов.
Похоже, что вы пытаетесь встроить лицензирование в свое программное обеспечение. Вы рассматривали возможность использования библиотеки для этого, а не делать это вручную ? Возможно, взгляните наTrue License , он должен делать то, что вам нужно.