Защищать сборку? - PullRequest
       6

Защищать сборку?

1 голос
/ 09 февраля 2010

У меня есть .NET DLL (C # / VB) с пользовательскими элементами управления, расширениями и другими вещами.

Я хочу, чтобы он был доступен только для меня. Есть ли способ ограничить несанкционированный доступ к DLL?

Ответы [ 7 ]

3 голосов
/ 09 февраля 2010

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

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

1 голос
/ 12 марта 2012

Если вы правильно называете свои сборки, рассмотрите возможность использования PublisherIdentityPermissionAttribute . Вы можете добавить это в свою DLL, и только сборки, подписанные с правильным ключом издателя, смогут вызывать этот метод или класс.

Это бесплатно и встроено в .NET Framework. Если вам нужны дополнительные функции (например, возможность лицензировать DLL другим разработчикам), рассмотрите средство защиты от копирования профессионального уровня, такое как наш инструмент DeployLX Licensing .

1 голос
/ 09 февраля 2010

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

Вот почему DRM не работает. Вы хотите защитить X, но вы хотите, чтобы кто-то еще посмотрел его. Проблема в том, что человек, которого вы не хотите просматривать / использовать X, и человек, которому вы хотите использовать X, на каком-то уровне один и тот же человек .

Мне так надоело работать с лицензионным кодом третьей стороны (ломать / отменять регистрацию / думать, что я не был законным пользователем, когда я должен был быть), что я стал членом FSF. Не стоит тратить время на то, чтобы обходить чужие ограничения, и не стоит тратить время на их устранение. Их код не был таким уж особенным.

1 голос
/ 09 февраля 2010

Ваш лучший вариант - упаковать / зашифровать / скрыть DLL, как указал Антон. А потом молитесь, чтобы никто не прошел через все трудности, связанные с распаковкой.

Обычный термин для этого - просто "упаковка".

Это то, что разработчики игр делают с SecuROM .

от Sony.

Но все программы упаковки имеют одинаковые недостатки:

  1. Они могут быть перепроектированы, и ключ шифрования должен быть встроен в двоичный файл
  2. Они обычно стоят денег, а те, которые не стоят ( UPX ), легко распаковываются.
  3. Проблемы с несовместимостью платформ могут возникнуть в процессе распаковки.
  4. Упакованные двоичные файлы имеют тенденцию выводить антивирусов из строя.

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

Вы могли бы также сделать свой собственный упаковщик, но поверьте мне, когда я говорю это: Вы не хотите идти туда;)

Короче говоря, то, что вы хотите, непросто достичь даже для крупных игроков. Сколько времени нужно, чтобы игра SecuROM появилась на пиратском заливе? Поэтому единственное, что вы можете сделать, - это «поднять планку» и надеяться, что хорошие реверс-инженеры останутся незамеченными.

Наконец, зная, во что вы ввязываетесь: стоит ли это того? Допустим, вы отправили распакованную DLL - как есть. Людям все еще придется перепроектировать это, чтобы использовать это. Кто вообще использует недокументированные сторонние библиотеки? Я делал это только один или два раза в моменты безумия.

1 голос
/ 09 февраля 2010

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

0 голосов
/ 09 февраля 2010

Вы должны проверить инфраструктуру лицензирования. Я понятия не имею, как его реализовать, но вы используете его, создав файл .licx, а затем, я думаю, процесс сборки использует инструмент lc.exe, чтобы сделать что-то для встраивания лицензии.

0 голосов
/ 09 февраля 2010

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

Как вы докажете, что вы являетесь DLL. (Вы можете проверить что-нибудь попроще, например, текущее имя пользователя, но это может быть не идеально)

Вы можете потребовать, чтобы exe-файл был подписан вашим сертификатом.

...