2009-10-22 7 views
1

Может кто-нибудь сказать мне, что лучший подход к защите моих DLL-компонентов в .Net?Как запретить другим программистам обернуть мою сборку?

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

Любые идеи?

+3

Пожалуйста, определите 'незаконно' – pyrocumulus

+2

Похоже, вы в основном просите, как реализовать DRM для DLL. –

+0

Да, я думаю, что эквивалент стиля DRM - это, по сути, то, что я ищу. –

ответ

1

Поскольку ваш код уже запутан, вы можете принудительно внедрить встроенные классы, которые должны быть созданы с помощью лицензионного ключа, прежде чем вызывать любой из методов. Если вы обнаружите, что ключ недействителен/присутствует, вы можете либо отображать окно сообщения, либо возвращать ошибку/исключение. Существует много примеров того, где это делается (проверка Xceed.com на один), но, как показывают предыдущие сообщения, просто для того, чтобы не дать конечным пользователям попытать незаконного использования вашей сборки. Не полностью предотвратить это. Учитывая достаточное время и стимул, любая вещь может быть нарушена.

+0

Есть ли у вас примеры того, как это реализовано? Я ничего не вижу в кодепероте и т. Д. Если бы я мог хотя бы проверить, чтобы лицензионный ключ был законным и т. Д., Тогда это было бы обнадеживающим. –

+0

У меня их нет, но это должно быть довольно легко реализовать. a) Внедрение пользовательской лицензии, проверяющей алгоритм как класс. b) Убедитесь, что все ваши классы получены от него. За то, сколько усилий требуется для реализации, это может быть довольно неприятным для тех, кто пытается сломать его :). – ivymike

+0

Хорошо, спасибо. Я тоже посмотрю на это. Я думаю, что это, по сути, то, что я буду требовать, чтобы обеспечить доступ к использованию DLL для меня, предоставил лицензионные ключи и т. Д. –

3

Лучшее, что вы можете сделать, это запутать ваш код. Это не будет на 100% безопасным и может быть изменено с обратной стороны.

dotfuscator

хороший один.

+0

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

1

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

Одним из таких инструментов является использование Dotfuscator.

4

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

+0

Я отвечал с сатирическим ответом: «[Обязательный клик Stackoverflow отвечает, что любая форма защиты от копирования или DRM бессмысленна]», но вы избили меня. – mackenir

2

Недостаточно «не распространять их», нет 100% -ного уверенного способа предотвращения несанкционированного доступа.

Вы можете ознакомиться с аппаратными или программными лицензиями. Проверяйте лицензии на весь код, и если устройство отсутствует, просто прервите все.

Еще одна идея - объявить все ваши типы в сборке как internal, а затем настроить основное приложение EXE в качестве сборки друга с атрибутом сборки InternalsVisibleTo. Обычно это используется для модульных тестирования внутренних элементов, и я не знаю, насколько это безопасно на практике. Это не помешало бы людям разобрать вашу сборку, чтобы вы все еще могли запутаться, и это не работает вообще, если вы продаете библиотеку и собираетесь использовать только для клиентов лицензий, чтобы использовать ее (потому что вам придется предоставлять пользовательские сборки для каждого клиент).

+0

Спасибо, я посмотрю на это немного больше. Приветствия. –