Я создал обертку CLI C++ для собственного кода C++, на который в свою очередь я ссылаюсь в своем приложении C#. Действительно ли возможно так или иначе защитить этот блок так, чтобы это могло только использоваться в моем приложении без возможности кого-то еще использующего его?
Я - технологический разработчик Microsoft, я - все об эгоизме :)
Я использовал это Техника с успехом.
В принципе, речь идет о защите вашей сборки от нагрузки, размещая потребность в цепочке связи и используя открытый ключ сборки в качестве доказательства. Только сборы, подписанные с Ваш , ваш закрытый ключ сможет загрузить его.
Да, но это будет проигрышная битва с решительным атакующим.
Например, вы можете предоставить зашифрованную версию, которая принимает только определенный ключ, как это предлагают некоторые. Но тогда вам придется расшифровывать его на ваших клиентах, у которых, возможно, нет зашифрованных хранилищ памяти, поэтому решительный злоумышленник может просто прочитать соответствующий блок памяти и десериализовать результат, чтобы получить вашу оригинальную сборку.
Не идеально. LinkDemand применяется только в среде частичного доверия. Код, работающий с полным доверием, также может использовать отражение для доступа к закрытым типам и, как правило, обходить любую защиту, которую вы хотите обсудить.
Возможно, вы хотите, чтобы ваш код C ++ / CLI вызывал Assembly :: GetEntryAssembly и сравнивал его с белым списком одобренных приложений, для которых предназначена эта библиотека.
Конечно, вы хотите минимизировать количество управляемого кода (и атрибутов), задействованного в проверках, поскольку управляемый код действительно легко декомпилировать.
На самом деле, добавление случайных проверок к основной логике кода C ++ - единственная надежда на то, что ее не обойдут.