2010-12-13 2 views
6

Что лучше всего подходит для защиты DLL для проектов, над которыми вы работаете? Некоторые DLL, которые меня интересуют, будут обладать функциональностью уровня доступа к данным (DAL) и функциональностью бизнес-логики (BLL). Могут быть несколько приложений, которые могут в конечном итоге поразить эти библиотеки DLL для выполнения конкретных бизнес-функций.Как защитить .NET DLL

Каков наилучший способ защитить эти DLL, чтобы они могли использоваться только приложениями-разработчиками?

Безопасность как для блокировки несанкционированного использования DLL, так и для защиты от возможной декомпиляции.

+2

Вы имеете в виду, что они защищают их от декомпиляции или просто защищают их от использования? – NotMe

+0

На данный момент я ищу использовать, но действительно ищем. Соответственно обновился вопрос. – Matt

ответ

4

Один из вариантов может заключаться в том, чтобы пометить все открытые классы в вашей DLL как «внутренние», а не «общедоступные», а затем использовать атрибут "InternalsVisibleTo" в вашей DLL, чтобы явно указать библиотеки DLL (и, возможно, exes), которые разрешено использовать ваши внутренние типы. Это может потребовать, чтобы все участники получили прозвище, но в любом случае это хорошо.

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

Лучшим способом обеспечения безопасности кода является вопрос: «Как трудно мы хотим, чтобы кто-то использовал этот код без лицензии или разрешения, и сколько времени/денег мы готовы потратить, чтобы достичь этого? ?» Если вы ничего не делаете, для кого-то очень просто использовать ваши библиотеки DLL в каком-то другом проекте. Если вы сделаете несколько простых вещей, вы можете сделать неудобным для кого-то использовать ваши DLL-файлы в другом месте. Если вы потратите месяцы усилий, вы, возможно, сможете очень затруднить кому-то злоупотреблять своим кодом, но вы никогда не сможете сделать это невозможным.

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

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

+0

Не совсем. .NET также позволяет ссылаться на сборки exe-файлов, поэтому он практически не отличается. –

+0

С инструментом, как Отражатель из Красных ворот. Даже в исполняемом файле почти все, кажется, декомпилируется с относительной легкостью. Так включает ли это в exe большую часть любой помощи в действительности? – Matt

+0

Я отклоняю предложение «вытащить код в DLL», в точку Брайана. Остальное стоит: нет абсолютных блокировок, поэтому вам нужно решить, сколько вы готовы инвестировать, чтобы сделать взлом результата более неудобным. – dthorpe

1

Установите аутентификацию с использованием механизма открытого ключа. Функции в DLL будут работать, только если вы предоставите действительный ключ и токен.

+0

Можете ли вы пояснить или предоставить ссылки на какой-то пример? – Matt

1

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

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

+0

Сценарий существует в реплицируемой среде. Машины могут иметь или не иметь подключения к Интернету в любой момент времени, что делает веб-службы не опцией. – Matt

+0

Sooooo ... Я не понимаю, в чем дело. Говорить напрямую с базой данных плохо, и у вас все еще нет причин говорить прямо с ней. – Phill

+0

Хорошо У меня есть DAL и BLL как в отдельных проектах, так и затем скомпилированы в DLL. Эти библиотеки управляют нашей логикой и операциями БД. Основное приложение - это приложение WPF, которое содержит только уровень представления. Существуют и другие подпрограммы, которые также будут влиять на некоторые из операций DAL и BLL. Это делается просто, чтобы избежать дублирования кодирования из разных приложений. Вся цель DAL - поговорить с БД. – Matt

1

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

Даже «лучшие» обфускаторы не являются непогрешимыми.Вероятно, вы могли бы отложить случайного хакера, но, как говорит д-торп, если кто-то действительно хочет декомпилировать ваши собрания, они это сделают.

Смежные вопросы