Как защитить DLL моего проекта таким образом, чтобы они не могли ссылаться и использоваться другими людьми?
Спасибо
Как защитить DLL моего проекта таким образом, чтобы они не могли ссылаться и использоваться другими людьми?
Спасибо
Короткий ответ заключается в том, что помимо очевидных вещей, вы не можете многое сделать.
Очевидные вещи, которые вы, возможно, захотите рассмотреть (примерно в порядке возрастания сложности и уменьшения правдоподобия), включают:
Независимо от этого, достаточно определенный пользователь все еще может найти способы его использования. Порядочный дизассемблер быстро предоставит всю необходимую информацию.
Обратите внимание, что если ваша DLL действительно является COM-объектом или, что еще хуже, средой CLR, тогда существует огромная информация о типе времени выполнения, которую вы не можете удалить, не нарушая ее предполагаемого использования.
РЕДАКТИРОВАТЬ:. Поскольку вы переделали, чтобы подразумевать, что С# и .NET являются средой, а не чистой библиотекой Win32, написанной на C, тогда я действительно должен пересмотреть вышеописанное значение "You Can not, Но..."
В течение долгого времени существовал рынок инструментов для обфускации, чтобы иметь дело с средами, где доставка компилируемого источника является обязательной, но вы не хотите предоставлять полезный источник. Есть продукты С#, которые играют на этом рынке, и похоже, что хотя бы один из них вошел.
Поскольку для загрузки сборки требуется столько усилий из фреймворка, вполне вероятно, что есть биты разрешений, которые оказывают определенное влияние на честных поставщиков и потребителей ассемблий. Я не видел никакого обсуждения реальной безопасности, предоставляемой этими методами, и просто не знаю, насколько они эффективны против определенной атаки.
Многое будет зависеть от вашего варианта использования. Если вы просто хотите предотвратить случайное использование, вы можете найти решение, которое будет работать для вас. Если вы хотите защитить ценные коммерческие секреты от обратного проектирования и повторного использования, вы не можете быть так счастливы.
Вы сталкиваетесь с той же проблемой, что и сторонники DRM.
Если ваша программа (которую вы хотите запустить DLL) запускается какой-то учетной записью пользователя, то нет ничего, что могло бы остановить достаточно определенного программиста, который может войти в систему как этот пользователь из изоляции кода который выполняет дешифрование и использует это, чтобы расшифровать вашу DLL и запустить его.
Конечно, вы можете сделать это неудобно для выполнения этой обратной инженерии, и этого вполне может быть достаточно.
Взгляните на StrongNameIdentityPermissionAttribute. Это позволит вам объявить доступ к вашей сборке. В сочетании с хорошим инструментом защиты кода (например, CodeVeil (отказ от продажи я продаю CodeVeil)), вы будете вполне довольны.
Вы можете встроить его в свой исполняемый файл и извлечь и загрузить библиотеку во время выполнения и вызвать ее. Или вы можете использовать какой-то общий ключ для шифрования/расшифровки сопроводительного файла и сделать то же самое выше.
Я предполагаю, что вы уже рассматривали такие решения, как компиляция, если вы действительно не хотите, чтобы он был общим. Если кто-то действительно хочет добраться до него, есть много способов сделать это.
Ну, вы можете отметить все ваши "общедоступные" классы как "внутренние" или "защищенные внутренние", а затем пометить сборки с помощью [assembly: InternalsVisibleTo ("")] Атрибут, и никто, кроме отмеченных сборок, не сможет увидеть содержимое.
Вы пробовали реагент .Net? Я недавно наткнулся на это. Некоторые люди говорят, что это здорово, но я все еще проверяю это.
Вам может быть интересна следующая информация о собраниях Friend: http://msdn.microsoft.com/en-us/library/0tke9fxk(VS.80).aspx