我为本机C ++代码创建了一个C ++ CLI包装器,而后者又在我的C#应用程序中引用。有可能以某种方式保护这个程序集,以便它只能在我的应用程序中使用而不会有其他人使用它吗?
我是微软技术开发人员,我只是自私自利:)
答案 0 :(得分:3)
我已成功使用this technique。
基本上,它是通过放置链接时安全性需求并使用程序集强名称的公钥作为证据来保护程序集免于加载。只有使用您的私钥签名的程序集才能加载它。
答案 1 :(得分:0)
是的,但这对于一个坚定的攻击者来说将是一场失败的战斗。
例如,您可以提供仅接受特定密钥的加密版本,正如某些人所建议的那样。但是,您需要在可能没有加密内存存储的客户端上对其进行解密,因此确定的攻击者可以简单地读取相应的内存块并对结果进行反序列化以获得原始程序集。
答案 2 :(得分:0)
不完美。 LinkDemand仅在部分信任环境中强制执行。以完全信任方式运行的代码也可以使用反射来访问私有类型,并且通常会绕过您需要讨论的任何保护。
也许您希望您的C ++ / CLI代码调用Assembly :: GetEntryAssembly,并针对该库所针对的已批准应用程序的白名单进行检查。
当然,您希望最大限度地减少检查中涉及的托管代码(和属性)的数量,因为托管代码非常容易反编译。
实际上,将偶尔的检查混合到C ++代码的核心逻辑中是唯一希望它不会被绕过的希望。