Я являюсь одним из разработчиков платформы лицензирования программного обеспечения Cryptolens и работаю над системами лицензирования с 14 лет. В этот ответ я включил несколько советов, основанных на опыте, приобретенном за года.
Лучший способ решить эту проблему - настроить сервер лицензионных ключей, который будет вызывать каждый экземпляр приложения для проверки лицензионного ключа.
Преимущества сервера лицензионных ключей
Преимущества использования сервера лицензионных ключей:
- Вы всегда можете обновить или заблокировать лицензионный ключ с немедленным вступлением в силу.
- каждый лицензионный ключ может быть привязан к определенному количеству компьютеров (это помогает запретить пользователям публиковать лицензионный ключ в сети для других пользователей).
Вопросы
Хотя проверка лицензий в режиме онлайн дает вам больший контроль над каждым экземпляром приложения, подключение к Интернету не всегда присутствует (особенно если вы нацелены на крупные предприятия), поэтому нам необходим другой способ проверки лицензионного ключа.
Решение состоит в том, чтобы всегда подписывать ответ лицензионного ключа от сервера, используя криптосистему с открытым ключом, такую как RSA или ECC (возможно, лучше, если вы планируете работать на встроенных системах). Ваше приложение должно иметь только открытый ключ для проверки ответа лицензионного ключа.
Таким образом, в случае отсутствия подключения к Интернету, вы можете использовать предыдущий ответ с лицензионным ключом. Убедитесь, что в ответе сохранены и дата , и идентификатор машины , и убедитесь, что он не слишком старый (например, вы разрешаете пользователям оставаться в автономном режиме не более 30 дней и т. Д.) И что ответ лицензионного ключа принадлежит правильному устройству.
Примечание Вы должны всегда проверять сертификат ответа лицензионного ключа, даже если вы подключены к Интернету), чтобы убедиться, что он не был изменен после того, как он покинул сервер (он по-прежнему имеет должно быть сделано, даже если ваш API к серверу лицензионного ключа использует https)
Защита секретных алгоритмов
Большинство приложений .NET могут быть легко спроектированы в обратном порядке (Microsoft предоставляет как дизассемблер, чтобы получить код IL, так и некоторые коммерческие продукты могут даже получать исходный код, например, в C #). Конечно, вы всегда можете запутать код, но он никогда не будет на 100% безопасным.
В большинстве случаев цель любого решения по лицензированию программного обеспечения состоит в том, чтобы помочь честным людям быть честными (т. Е. Честные пользователи, которые готовы платить, не забывают платить по истечении пробного периода и т. Д.).
Однако у вас все еще может быть какой-то код, который вы никоим образом не хотите разглашать общественности (например, алгоритм прогнозирования цен на акции и т. Д.). В этом случае единственный способ - создать конечную точку API , которую ваше приложение будет вызывать каждый раз, когда должен выполняться метод. Требуется подключение к Интернету, но это гарантирует, что ваш секретный код никогда не выполняется на клиентском компьютере.
Осуществление
Если вы не хотите реализовывать все самостоятельно, я бы порекомендовал взглянуть на этот урок (часть Cryptolens )