Ответ 1
Лицензионное программное обеспечение еще не решило проблему - или, по крайней мере, сделать это безопасно, без неудобств для ваших пользователей и без инвестиций в крупную инфраструктуру не решается.
Местоположение/механизм, в котором вы сохраняете статус лицензии, в основном не имеет значения - реестр не более безопасен, чем текстовый файл - для получения доступа к контенту требуется несколько секунд, а "скрытие" записи в некоторой отдаленной реестр не очень помогает.
Предположительно, ваше программное обеспечение имеет какую-то настойчивость (файловая система базы данных?); вы можете использовать тот же механизм сохранения, чтобы сохранить статус регистрации.
Конечно, все, что может сделать ваше программное обеспечение для чтения/записи, можно получить у людей, пытающихся получить несанкционированный доступ к вашему программному обеспечению. Таким образом, вы можете зашифровать запись; то у вас возникла проблема управления ключом для этого механизма шифрования; afaik, сейчас нет надежных решений.
Итак, у вас может быть "сервер лицензий" в Интернете; ваше программное обеспечение может прочитать уникальный идентификатор вашего компьютера (например, MAC-адрес), отправить его на сервер лицензий и вернуть серверу статус лицензии. Опять же, это довольно тривиально, чтобы обойти, и теперь вы требуете от своих пользователей онлайн использовать ваше программное обеспечение.
Если ваше программное обеспечение отдаленно привлекательно для пользователей, хакеры могут сломать защиту лицензионного ключа в течение нескольких дней и опубликовать подробные инструкции в Интернете. Apple идет на необычную длину для защиты программного обеспечения на Iphone/Ipad, и все же приложения для джейлбрейка открывают их.
По моему мнению, если ваше программное обеспечение не будет стоить доходов в десятки миллионов долларов, вы должны сделать жизнь максимально простой для своих пользователей и не слишком беспокоиться об аспекте безопасности - используйте что-то с полки (например, bunting рекомендует) или установить для текстового файла.
В частности, я бы:
- проверить наличие действительного файла лицензии при запуске приложения
- Если файл лицензии отсутствует, попросите пользователя ввести лицензионный ключ
- сравнить этот ключ с вашим лицензионным ключом
- напишите "действительный" файл в файловой системе в каталоге приложения; или изменить существующий файл конфигурации.
Это тривиально легко для break;, чтобы вы могли идти дальше.
Во-первых, Java-приложения легко декомпилируются, и злоумышленник может легко прочитать вашу константу "лицензия". Вы должны использовать обфускатор, чтобы сделать это трудным (хотя и не невозможным).
Во-вторых, вы можете зашифровать свои локальные данные лицензии; это тоже усложнило бы абсолютно случайного хакера. Вы можете включить некоторые локальные данные в схему шифрования, чтобы хакер не мог просто повторно распространять ваше приложение с помощью рабочего лицензионного ключа (например, путем умножения лицензионного ключа на MAC-адрес машины).
В обоих случаях вы "настраиваете" лицензию в приложении; есть доски объявлений, где хакеры подписывают лицензионные ключи для приложений, и вы не сможете отвечать, кроме как выпустить новую версию приложения с помощью нового ключа.