Профессионалы/Недостатки использования блока как файл лицензии?

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

UI и распечатанные отчеты ко-брендированы с логотипами дистрибьюторов, таким образом, было бы хорошо, если это могло бы быть встроено в лицензию. Я знаю, что это могло быть сделано с сериализированным XML-файлом, но я задавался вопросом, каковы за и против того, чтобы хранить эти данные в скомпилированном блоке?

Инструмент поколения лицензии мог скомпилировать блок с соответствующими свойствами и ресурсами и подписать его.

Обновление
Из того, что я вижу, использование сериализировало xml, или блок будет довольно подобен. С моей точки зрения блоки позволили бы мне добавлять другие ресурсы и оставляют некоторую гибкость для будущего. Как только ресурсы становятся сложными, XML-сериализация является болью.

Update2
Программное обеспечение только работает с нашими аппаратными средствами, таким образом, безопасность лицензии не является значительным беспокойством. Основная цель состоит в том, чтобы мешать обычному пользователю активировать опции, за которые они не заплатили. Я выбрал бы один по другому для простоты дизайна!

13
задан BradleyDotNET 9 June 2015 в 19:58
поделиться

6 ответов

Класс Logger ранее не был частью jdk, поэтому возникло несколько реализаций библиотеки. Библиотека Log4j имеет один из самых комплексных наборов утилит ведения журнала (Formatters, Appenders и т.д.). Однако для большинства разработчиков это будет перебор и простой java.util.Logger будет достаточно.

Я лично использую пользовательскую обертку над своей реализацией регистратора. Это позволяет определить пользовательские вызовы для выполнения функционального ведения журнала/аудита.

-121--3815139-

Я нашел это из библиотеки закрытия, может быть удобно:

/**
 * A youtube regular expression matcher. It matches the VIDEOID of URLs like
 * http://www.youtube.com/watch?v=VIDEOID.
 * @type {RegExp}
 * @private
 */
goog.ui.media.YoutubeModel.matcher_ =
    /https?:\/\/(?:[a-zA_Z]{2,3}.)?(?:youtube\.com\/watch\?)((?:[\w\d\-\_\=]+&(?:amp;)?)*v(?:<[A-Z]+>)?=([0-9a-zA-Z\-\_]+))/i;
-121--3095697-

Подписанный XML-файл лицензии имеет несколько преимуществ, но они могут быть неприменимы к вашей ситуации:

  1. Вы можете проверить его содержимое с помощью простого инструмента, такого как блокнот или веб-браузер. Если вам нужно управлять большим количеством лицензий и много времени проходит, вы можете проверить область лицензии проще, просто просматривая файл. Даже клиент может прочитать вам самые важные пункты своей лицензии по телефону.
  2. Если для установки одного приложения может быть назначено много лицензий (на пользователя, на функцию и т.д.), проще управлять списком xml-файлов, чем динамически загружать сборки.
  3. Проще создать инструмент для создания клиентской лицензии - > приложение отправит на подпись неподписанный XML-файл.
  4. Проще управлять версиями. Если новая версия программного обеспечения имеет новые параметры лицензирования, и старая лицензия должна работать с обновленной версией, в зависимости от реализации сборки singed licensing, можно разорвать старое программное обеспечение.

Если у вас нет ни одной из этих особых потребностей, используйте опцию assembly-as-a-license, поскольку ее проще реализовать.

Обновление

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

Подписание лицензии в DLL-файле или внешнем XML-файле является достаточно хорошим.

6
ответ дан 2 December 2019 в 00:31
поделиться

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

См. статью CAS Tamper-Proofing is Broken (Защита от взлома): Последствия для лицензирования программного обеспечения для получения более подробной информации.

4
ответ дан 2 December 2019 в 00:31
поделиться

Хорошее решение, которое всегда работало для меня, - это создать класс лицензии со всеми необходимыми свойствами, такими как имя, срок действия, логотипы и т. Д. Сериализуйте класс в двоичные данные в памяти, затем зашифруйте их и сохраните в файл. Это не требует подписи, а файл устойчив к взлому. Чтобы прочитать вашу лицензию, просто сделайте обратное: прочтите файл, расшифруйте, десериализуйте. Одно предостережение заключается в том, что если несколько сборок собираются читать этот файл лицензии, то функции шифрования / расшифровки должны находиться в отдельной общей сборке.

3
ответ дан 2 December 2019 в 00:31
поделиться

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

0
ответ дан 2 December 2019 в 00:31
поделиться

Я бы предпочел версию сборки, потому что:

  • Вместо подписи .net вы можете использовать Authenticode (для этого нужен сертификат, но это не так что дорого ), или вы можете использовать оба. Затем в вашем приложении вы можете проверить подпись. Это устраняет брешь в безопасности для подделки знака .net.
  • Он более гибкий. Вы можете определить интерфейс для сборки лицензии, который впоследствии может быть расширен.
  • У вас может быть некоторая логика в сборке лицензии.

Но помните. Это просто программная защита. Следующим шагом будет использование криптографического ключа ( hasp , marx …)

0
ответ дан 2 December 2019 в 00:31
поделиться

Я бы не стал использовать сборку как файл лицензии - как отмечали другие, его относительно легко сломать.
Я бы использовал файл (xml или любой другой), а затем заблокировал бы его на машине пользователя. Этого можно добиться несколькими способами:
1) Используйте System.Cryptography.ProtectedData - это просто обертывает Windows DPAPI и использует хранилище ключей Windows (для каждого пользователя или для каждого локального компьютера). машина ). Это простой (ish) подход, но вам придется использовать Encoding.UTF8.GetString (или любую другую кодировку) для обратного преобразования из массива байтов. Это просто, но не в промышленных масштабах, так как кто-то все еще может раскопать хранилище ключей и т. Д.
2) Используйте уникальный идентификатор компьютера, такой как SID, с симметричным алгоритмом, таким как Rijndael или Blowfish, и укажите SHA -256 хеш незашифрованного файла лицензии как IV. Это немного сложнее реализовать, так как вам нужно будет использовать WMI для поиска SID, а затем использовать System.Security.Cryptography.RijndaelManaged и т.д. для шифрования / дешифрования.

1
ответ дан 2 December 2019 в 00:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: