Как мне помешать другим программистам обернуть мою сборку?
Может кто-нибудь сказать мне, что лучший подход к защите моих компонент DLL в.Net?
Я написал несколько компонентов DLL, которые будут общедоступны. Они будут лицензированы соответственно, но я хочу программно убедиться, что никто не использует компоненты в своих решениях незаконно.
Есть идеи?
5 ответов
Поскольку ваш код уже запутан, вы можете принудительно создать экземпляр встроенных классов с помощью лицензионного ключа до вызова любого из методов. Если вы обнаружите, что ключ недействителен / присутствует, вы можете либо отобразить окно сообщения, либо вернуть ошибку / исключение. Есть много примеров, где это делается (см. Xceed.com), но, как показывают предыдущие посты, это просто для того, чтобы отговорить конечных пользователей от попыток использовать вашу сборку незаконно. Не полностью это предотвратить. При наличии достаточного времени и стимула любая вещь может быть сломана.
Попытка запретить людям делать что-то на технологическом уровне приведет только к самоотверженной работе вокруг ваших усилий, чтобы остановить их с помощью реверс-инжиниринга (которому запутанный код никогда не остановит их, это только замедлит их), дизайн чистой комнаты и так далее. Лучше всего подкрепить тем, кто получает лицензию на использование ваших библиотек, условия использования и отстаивать свои законные права для обеспечения соблюдения условий использования.
Лучшее, что вы можете сделать - это запутать ваш код. Это не будет на 100% безопасно и может быть переработано.
хороший
Если не "не распространять их", нет 100% надежного способа предотвратить несанкционированный доступ.
Вы можете посмотреть устройства лицензирования аппаратного или программного обеспечения. Обсыпайте лицензии проверками по всему вашему коду и, если устройства нет, просто прервите все.
Другая идея и состоит в том, чтобы объявить все ваши типы в сборке как internal
затем настройте ваше основное приложение EXE как сборку с InternalsVisibleTo
атрибут сборки. Обычно это используется для внутреннего тестирования юнит-модулей, и я не знаю, насколько это будет безопасно на практике. Это не помешает людям разобрать вашу сборку, поэтому вы все равно можете захотеть запутать ее, и это совсем не сработает, если вы продаете библиотеку и намереваетесь использовать ее только для лицензий клиентов (потому что вам придется предоставлять индивидуальные сборки каждому покупатель).
Как сказал Феникс, на самом деле нет способа полностью защитить ваш код, так как он все еще может быть декомпилирован с помощью такого инструмента, как рефлектор.
Одним из таких инструментов будет использование Dotfuscator.