Здравствуйте, Unhandled_Exception, Вы писали:
U_E>Спасибо!
1. Активация ключа через интернет с каким-либо идентификатором машины, ответ сервера сохраняется в реестре
2. В compile-time читаешь ответ сервера из реестра и внедряешь в ресурсы конечной сборки клиента. Если ответ сервера в реестре нет — генеришь ошибку компиляции с нужным текстом
3. В run-time проверяешь внедрен ли хеш в какую либо сборку (рекурсивно)
ответ сервера у меня, например, это подпись, соответсвенно в либе — проверка подписи
Ключевые слова для поиска в msdn LicenseManager, файл licx
Upd. Вижу уже, что про решение от Microsoft знаешь, а что не так с ним?
у меня работает на ура.
Здравствуйте, Unhandled_Exception, Вы писали:
U_E>Вопрос вот в чем. Если ключ для превращения библиотеки в ее полнофункциональную версию хранится (так или иначе; например, в вызове специального метода лицензируемой библиотеки) в приложении, которое эту библиотеку
использует, то это выглядит крайне уязвимо. .NET код смотрится элементарно, и там сразу будет виден ключ. Клиента обфусцировать свое собственное приложение не заставишь.
Я вижу ситуацию следующим образом: у вас есть одна библиотека, до покупки (без регистрации) она работает в "демо" режиме с какими-то ограничениями. После покупки вы отправляете клиенту (на мой взгляд есть 2 варианта):
1. Саму лицензию, которую ваш клиент передает в вашу библиотеку перед использованием.
2. Вы передаете клиенту уже полную версию версию библиотеки, в которой лицензия уже зашита в код (в этом случае дополнительных действий по лицензированию не требуется).
В обоих случаях для минимальной защиты библиотеки от нелицензионного использования (клиент передал лицензию/полную версию библиотеки другу/брату/любовнице/выложил в открытый доступ) можно в самой библиотеке сравнивать наименование владельца лицензии с аттрибутами главного модуля (например чтобы полностью совпадало наименование автора).
P.S. При этом всем вы сами обфусцируете свою библиотеку.
Как сейчас принято лицензировать .NET библиотеки? Наверняка есть какой-то кроссплатформенный способ.
Есть у меня один старый (ему почти 20 лет) продукт, но я там лицензирование когда-то организовал, честно говоря, не очень красиво. Полная версия отдается сервером, при этом сборка патчится, и чтобы она перешла в полный режим, программист должен специальным методом установить ключ.
Здравствуйте, Unhandled_Exception, Вы писали:
UE> Есть у меня один старый (ему почти 20 лет) продукт, но я там лицензирование когда-то организовал, честно говоря, не очень красиво. Полная версия отдается сервером, при этом сборка патчится, и чтобы она перешла в полный режим, программист должен специальным методом установить ключ.
Встречный вопрос: а дотнетовские либы без исходников принято продавать что-ли? Какова общая практика?
Здравствуйте, Unhandled_Exception, Вы писали:
U_E>Всем привет,
U_E>Как сейчас принято лицензировать .NET библиотеки? Наверняка есть какой-то кроссплатформенный способ.
А чем .NET библиотека в плане лицензирования принципиально отличается от натива?
Я никогда не покупал все эти DevExpress/Infragistics/etc. Может коллеги покупали и подскажут, как у них обстоит дело с активацией полной версии. Как-то ведь еще надо сделать, чтобы нельзя было из чужого дистрибутива взять DLL-ки и использовать их бесплатно.
Здравствуйте, Unhandled_Exception, Вы писали:
UE> R>Встречный вопрос: а дотнетовские либы без исходников принято продавать что-ли? Какова общая практика?
UE> Вполне, равно как и для Делфи. У меня чаще без исходников. Стоимость версии с исходниками в несколько раз выше.
Здравствуйте, Unhandled_Exception, Вы писали:
U_E>В прошлом сам .NET предлагал нечто.
Хорошо, задам вопрос по-другому: Если вы продаете .NET библиотеку без исходников (я правильно понял?), то чем лицензирование этой библиотеки будет принципиально отличаться от лицензирования библиотеки, написанной например на C++? Или вы не знаете как вам в C# прикрутить проверку лицензии?
Здравствуйте, drVanо, Вы писали:
V>Хорошо, задам вопрос по-другому: Если вы продаете .NET библиотеку без исходников (я правильно понял?),
Все верно.
V>то чем лицензирование этой библиотеки будет принципиально отличаться от лицензирования библиотеки, написанной например на C++? Или вы не знаете как вам в C# прикрутить проверку лицензии?
Принципиально ничем.
Вопрос вот в чем. Если ключ для превращения библиотеки в ее полнофункциональную версию хранится (так или иначе; например, в вызове специального метода лицензируемой библиотеки) в приложении, которое эту библиотеку использует, то это выглядит крайне уязвимо. .NET код смотрится элементарно, и там сразу будет виден ключ. Клиента обфусцировать свое собственное приложение не заставишь.
Здравствуйте, drVanо, Вы писали:
V>В обоих случаях для минимальной защиты библиотеки от нелицензионного использования (клиент передал лицензию/полную версию библиотеки другу/брату/любовнице/выложил в открытый доступ) можно в самой библиотеке сравнивать наименование владельца лицензии с аттрибутами главного модуля (например чтобы полностью совпадало наименование автора).
Спасибо за идеи!
Интересно, гиганты так же делают, или мирятся с тем, что их DLL-ки из чьего-нибудь дистрибутива кто-то может скопировать?
Здравствуйте, NWP, Вы писали:
NWP>1. Активация ключа через интернет с каким-либо идентификатором машины, ответ сервера сохраняется в реестре NWP>2. В compile-time читаешь ответ сервера из реестра и внедряешь в ресурсы конечной сборки клиента. Если ответ сервера в реестре нет — генеришь ошибку компиляции с нужным текстом
Обязательное наличие интернета для коммерческих продуктов это огромный минус для самого продукта (например у многих компаний билдсервера вообще не имеют связи с внешним миром) + гемор на поддержку сервера активации для самого разработчика.
Здравствуйте, drVanо, Вы писали:
V>Обязательное наличие интернета для коммерческих продуктов это огромный минус для самого продукта (например у многих компаний билдсервера вообще не имеют связи с внешним миром) + гемор на поддержку сервера активации для самого разработчика.
Ну только не для продукта, а для одноразовой активации. Для компиляции интернет уже не нужен.
А так любая система защиты вступает в противоречие с удобством использования
Здравствуйте, NWP, Вы писали:
NWP>2. В compile-time читаешь ответ сервера из реестра и внедряешь в ресурсы конечной сборки клиента. Если ответ сервера в реестре нет — генеришь ошибку компиляции с нужным текстом
Как это технически делается? Надо править код файла проекта?
И что будет, если ответ сервера из реестра перенести на другую машину?