2009-11-28 6 views
3

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

ответ

4

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

2

Вы можете указать obfuscate код вашей сборки, который сделает задачу более сложной, но вы не можете сделать это, чтобы 100% предотвратить сбор и использование пользователем. То, что вы можете сделать, это НЕ развертывать сборку на компьютере пользователя, а предоставлять функции через веб-службу.

2

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

Один из таких обфускаторов является с открытым исходным кодом и называется obfuscar. Продолженный проект можно найти здесь under this link.

1

Нет простого способа. Вы можете только усложнить ситуацию. Если ваши алгоритмы настолько уникальны и ценны [1], что вам необходимо сделать их невозможными для третьих сторон (или заглянуть внутрь), ваш единственный выбор - иметь логику в удаленном месте (за сервером) и иметь свою программу назови это.

[1] Что-то, что в моем скромном опыте никогда не бывает.

0

Вы можете использовать ILmerge для объединения сборки в исполняемый файл, а затем использовать обфускацию для защиты всего пакета (исполняемые файлы .NET можно рассматривать как сборки, на которые вы можете ссылаться).

0

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

Если вы подключаете AppDomain.CurrentDomain.AssemblyResolve с помощью специального обработчика, вы можете сделать это прозрачно - когда ваша сборка пытается загрузить определенную DLL, она терпит неудачу, ваш обработчик срабатывает и загружает сборку из зашифрованной библиотеки DLL.

У меня еще не было проблем с этим подходом.

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

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