2010-02-09 6 views
1

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

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

+1

Вы не указали, на каком языке? – t0mm13b

+2

@tommie Я предполагаю, что это .NET –

+0

@ Антон: достаточно справедливо ... но Shimmy должен добавить тег, чтобы указать, какой язык вместо нас угадывает, он имеет в виду .NET или DLL ресурсов в C/C++? – t0mm13b

ответ

1

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

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

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

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

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

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

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

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

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

+0

Мне все равно, это частная программа, которая должна запускаться на 10-15 машинах. Я хотел бы больше узнать о шифровании и использовании зашифрованных библиотек DLL. – Shimmy

3

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

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

+0

Это еще не в дикой природе, я ищу способ ограничить его до того, как он достигнет ... – Shimmy

+1

CAS не защитит вас от кого-то с полным доверием. CAS не предназначен для принудительного лицензирования компонентов и, следовательно, не будет работать на нем. – erikkallen

0

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

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

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

+0

Как я могу создать эти «проверки»? Я не возражаю, чтобы изменить исходный код сборки, имеющей внутренний список авторизованных гидов и т. Д. – Shimmy

+0

if (Environment.UserName! = "MuUserName") throw new Exception («Эта функция не для вас»); Сертификат более сложный и не так-то просто найти образец кода для – Arve

+0

Я думаю, я могу доказать, что я - я, потому что я буду использовать эту DLL из своего собственного кода, вопрос в том, как я могу идентифицировать вызывающего DLL. – Shimmy

1

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

+0

Вопрос в том, как определить вызывающего DLL, возможно ли это? – Shimmy

+0

вы можете проверить вызывающую сборку с Assembly.GetCallingAssembly –

0

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

1

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

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

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

1

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

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

+0

Но можно ли декомпилировать? Если это так, я предпочитаю опрыскивание. – Shimmy

+1

Все незащищенные в .NET могут быть декомпилированы. Это часть платформы. Если вы хотите также сделать свою защиту от несанкционированного доступа, вам понадобится больше, чем обфускация. Такой инструмент, как DeployLX CodeVeil (http://codeveil.com), будет использовать собственный ключ шифрования, который шифрует часть сборки с кодом из другого. Любые модификации уничтожат ключ шифрования, тем самым разрушая сборку. –

+0

Интересно. Спасибо! – Shimmy