(C # / C ++ CLI) Можно ли защитить мои сборки C ++ CLI от использования в других проектах .NET? - PullRequest
5 голосов
/ 28 января 2010

Я создал оболочку CLI C ++ для нативного кода C ++, на который я, в свою очередь, ссылаюсь в своем приложении на C #. Можно ли каким-то образом защитить эту сборку, чтобы она могла использоваться только в моем приложении, без возможности использования ее кем-то еще?

Я разработчик технологий Microsoft, я все о эгоизме:)

Ответы [ 3 ]

3 голосов
/ 29 января 2010

Я использовал эту технику с успехом.

По сути, речь идет о защите вашей сборки от загрузки путем выставления требования безопасности во время соединения и использования открытого ключа строгого имени сборки в качестве доказательства. Только сборки, подписанные вашим закрытым ключом, смогут загрузить его.

0 голосов
/ 04 апреля 2010

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

Возможно, вы хотите, чтобы ваш код C ++ / CLI вызывал Assembly :: GetEntryAssembly и сверял его с белым списком утвержденных приложений, для которых предназначена библиотека.

Конечно, вы хотите минимизировать объем управляемого кода (и атрибутов), участвующих в проверках, поскольку управляемый код действительно легко декомпилировать.

На самом деле, смешивая время от времени проверку с основной логикой кода C ++, у вас есть единственная надежда, что она не будет обойдена.

0 голосов
/ 29 января 2010

Да, но это будет проигранная битва против решительного нападающего.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...