Защита предложений приложения WinForms

Я искал простую систему ключей / лицензий для наших пользователей. Это частично для того, чтобы остановить пиратство (избегать совместного использования приложения пользователями), а другая половина - для отслеживания количества "лицензированных пользователей", которые у нас есть. Я уже прочитал несколько хороших предложений по SO, но мне любопытно, как люди внедрили 30-дневные критерии оценки.

Генерируете ли вы ключ, который хранит где-то дату, и проводите сравнение каждый раз, или это немного сложнее - удаление файла / удаление реестра не должно деактивировать.

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

Это для приложения Windows Forms.

5 ответов

Вы проверили проект Rhino-Licensing от Ayende Rahien. Вы также можете увидеть его сообщение в блоге о лицензировании коммерческого продукта, которое привело его к разработке этого решения.

Я не просто говорю это, потому что моя компания продает решение для лицензирования программного обеспечения OffByZero Cobalt для.NET: ваш руководитель должен знать, что получить лицензию на программное обеспечение очень трудно, и если вы откажетесь от него, вы будете его поддерживать для обозримом будущем.

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

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

Что важнее для вашей компании: добавление важной новой функции в ваш продукт или отслеживание специфического поведения разрешений в старой версии Windows, которая мешает вашей системе лицензирования?

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

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

Это было удобно, потому что нам все равно, сколько копий приложения в дикой природе, мы только отслеживаем соединения с сервером. Мы включили данные идентификации машины, такие как MAC-адрес, в данные соединения, чтобы мы могли отслеживать, какие машины подключаются.

Есть две отдельные проблемы: Как предотвратить запуск скопированного приложения. II. Как не дать пользователям разорвать / обойти вашу схему предотвращения. Первый обычно делается путем точного копирования подписи системы пользователя (например, идентификатора жесткого диска + идентификатора процессора + ОЗУ и т. Д.) И использования ее в качестве начального числа / ключа И активации его в режиме онлайн путем вызова "home".

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

Я не уверен, что вы действительно можете защитить.NET - могут быть коммерческие решения, которые делают свое дело. Причина в том, что.NET-код можно увидеть через Лутца Редера (спасибо Джейсону за помощь). Отражатель Red Gate (ранее это был названный выше парень). Лучший способ справиться с этим - искать запутанность кода, которая делает отражение более хитрым, я могу указать вам на одно знакомое мне место, где это делается бесплатно - Phoenix - NtCore.Com.

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

Кто-то однажды сказал - "Безопасность через мрак"....

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

Другие вопросы по тегам