Защита программного обеспечения
Я хочу защитить свое программное обеспечение от использования без разрешения. Я предоставлю это бесплатно сторонам, которым я разрешаю использовать это.
Кто-нибудь знает хорошую схему защиты от копирования и запуска посторонними лицами?
До сих пор я думал о введении механизма проверки ключей: периодически пользователю необходимо отправлять мне (запрос веб-сайта) код, на основе которого я генерирую новый код, который проверяет приложение. Существует исходный код, и поэтому я могу отслеживать пользователей...
Мысли?
Позже редактирование: я изменил лицензионную часть, чтобы избежать несфокусированного обсуждения.
6 ответов
Мы используем систему лицензирования PELock, она имеет расширенный API SDK, что позволяет нам настраивать модель лицензирования до мельчайших деталей.
Вы в основном оборачиваете части своего кода в маркеры шифрования, и эти чанки шифруются, без действительного лицензионного ключа эти чанки даже не выполняются, как только пользователь предоставляет лицензионный ключ, они дешифруются, выполняются и повторно шифруются.
#incude "pelock.h"
void FullVersionProc()
{
FEATURE_1_START
// this code runs only, if the license key has
// enabled FEATURE_1 section
FEATURE_1_END
}
Чтобы заблокировать ключ к определенному компьютеру, мы используем идентификатор оборудования с нашей собственной пользовательской подпрограммой для чтения определенных компонентов оборудования. Этот идентификатор оборудования затем используется для генерации лицензионных ключей.
Это обязательно потерпит неудачу в любом случае. Принудительное подключение пользователей к сети может привести к раздражению пользователей, как упоминалось выше; схемы проверки в автономном режиме, такие как серийные номера, подвержены дублированию; ограниченные во времени копии склонны сбрасывать часы или метки времени и т. д.
Схема защиты, о которой вы думаете, не собирается вообще защищать ваше программное обеспечение от несанкционированного использования, потому что будет очень легко перепроектировать его и просто заставить защиту никогда не запрашивать периодическую проверку, о которой вы говорите.
Довольно сложно придумать схему, которая работает без слишком большого количества ложных срабатываний и не раздражает ваших пользователей. Некоторые люди видят эту вещь "позвони домой" как "Я слежу за тобой".
Другой подход заключается в том, чтобы каким-то образом вставить идентификацию пользователя в программное обеспечение, а затем, если вы обнаружите утечку копии, вы будете точно знать, кого винить. Дайте понять пользователям, что вы сделали это, и положитесь на них, не желая, чтобы их поймали, чтобы вырезать копии. Несколько крупных игроков используют эту схему; Я думаю, что книги О'Рейли одна?
Simply Licensing предназначена для современных приложений .NET.
Автономные ключи, онлайн-ключи - вы можете создать свою модель лицензирования практически в любом случае, если захотите ее реализовать. Работает на Windows, Mac и Linux.
Этого можно достичь по крайней мере двумя способами: либо вы используете механизм проверки автономного ключа (ознакомьтесь с этой статьей: http://www.codeproject.com/Articles/764610/Licensing-systems-in-NET). или онлайн-система проверки.
Проверка автономного ключа имеет недостаток - невозможно отследить, использовался ли ключ на каком-либо другом компьютере и не было ли сброшено время. Однако это облегчает задачу, так как для активации приложения не требуется подключение к Интернету.
Проверка ключей в режиме онлайн дает вам больше контроля. Здесь вы можете выбрать принудительное подключение пользователя к Интернету при каждом запуске приложения или только один раз / периодически. Первый вариант дает вам лучший контроль, поскольку вы можете заблокировать серийный ключ или изменить количество машин, на которых может работать ключ, и это изменение повлияет на пользователя клиента при следующем запуске программного обеспечения. Последний вариант дает вам немного меньше контроля, но он избавляет пользователя клиента от постоянного доступа к Интернету. Кроме того, вы всегда можете сравнить местное время с интернет-временем, чтобы убедиться, что пользователь не манипулировал им.
Примером (2) является платформа SKM ( https://serialkeymanager.com/). Примеры приложений / алгоритмов, описанных в (1), можно найти в статье, которую я упоминал в начале.