2014-03-19 1 views
3

У меня есть относительно большой проект C#. Я хочу разрешить другим разработчикам сотрудничать со мной в проекте. Но я боюсь, что они скопируют исходный код дословно. Я хочу защитить свой код. Есть ли способ предоставить сотрудникам использование существующих .dll без возможности чтения исходного кода? Или предоставить им временный доступ к файлам .dll, а затем, когда они откатываются от проекта, просто отключите их способность использовать .dll?.NET Assembly. Шифрование и использование DLL в командах

ответ

2

Абсолютно, вы можете дать другим пользователям библиотеки DLL без доступа к исходному коду. В большинстве ситуаций, подобных этому, вы бы запутали dll (многие инструменты для этого, я бы начал с Dotfuscator, включенного в Visual Studio), чтобы они не могли декомпилировать его.

Если вы хотите, чтобы они могли видеть источник, вы не можете сделать это, чтобы избежать их копирования, так же, как «отключить их способность использовать его». Если у них есть копия файла, вы не можете прекратить их делать (технологически говоря). Единственная безопасность, о которой я могу думать, - это проверить, чтобы все публичные функции проверялись на каком-либо сервере перед выполнением (таким образом, чтобы DLL была бесполезной, если у вас есть сервер, который не позволяет им запускать), но это не 100%, и это сделает за ужасный опыт для конечных пользователей кода.

+0

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

+0

Как DLL узнает, загружена ли она? И если каждая функция не проверяет, не мог ли используемый код просто вызвать функции проверки? Мне было бы очень интересно узнать, как это сделать на уровне сборки. – BradleyDotNET

+0

А, позвольте мне уточнить. Я имел в виду, что каждая функция не требует вызова сервера лицензий; вам нужно будет проверить локальный флаг, чтобы узнать, предоставлена ​​ли лицензия. Таким образом, первая функция несет большие затраты на удаленный вызов, устанавливает флаг, а все остальные проверяют флаг, чтобы увидеть, разрешено ли им запускаться. Что касается DLL, зная, что он загружается, я не верю, что есть прямой способ (в отличие от неуправляемого, где для этого можно использовать 'DllMain()'). Однако можно использовать статический конструктор для основных типов (типов) и IIRC, если статический конструктор выбрасывает, тогда тип не загружается и не может быть использован, поэтому эффективно отключается сборка (да, бит хаки) – LB2

1

Чтобы добавить к ответу LordTakkera, часть о лицензировании.

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

+0

+1 Это еще один хороший способ «тайм-аута» dll с упомянутыми компромиссами. – BradleyDotNET

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