如何保护我的装配以供其他人使用?

时间:2009-11-28 18:54:47

标签: c# .net security assemblies privacy

如何保护我的程序集,因为一旦我部署了安装程序, 程序集也将被部署,用户可以从Program Files获取程序集,并可以添加对任何其他项目的引用或基于它创建新项目!任何解决方案或帮助将不胜感激。

6 个答案:

答案 0 :(得分:4)

您可以在程序集内部创建所有成员,并且只允许其他成员使用InternalsVisibleToAttribute。但如果有人足够坚持,就没有办法阻止他们使用它。

答案 1 :(得分:2)

你可以obfuscate你的程序集代码会使使用它的任务变得更加困难,但是你无法做到100%阻止用户选择程序集和使用它。您可以做的不是在用户计算机上部署程序集,而是通过Web服务提供功能。

答案 2 :(得分:2)

你不能完全阻止这一点。但是你可能会以一种方式模糊你的程序集,使暴露的类和方法没有任何合理的名称。

一个这样的混淆器是开源并称为obfuscar。可以在under this link找到一个持续的项目。

答案 3 :(得分:1)

没有简单的方法。你只能让它变得更加困难。如果您的算法是如此独特和珍贵[1],您需要让第三方无法使用(或查看),您唯一的选择是将逻辑放在远程位置(在服务器后面)并拥有您的程序叫它。

[1]在我谦逊的经历中,从来就不是这样的。

答案 4 :(得分:0)

您可以使用ILmerge将程序集合并到可执行文件中,然后使用模糊处理来保护整个程序包(可以将.NET可执行文件视为可以链接到的程序集)。

答案 5 :(得分:0)

虽然它显然不安全 - 你仍然需要在某处存储解密密钥 - 它可以很好地加密你的磁盘上的DLL,然后加载它们并在内存中解密。

如果您使用自定义处理程序挂接AppDomain.CurrentDomain.AssemblyResolve,您甚至可以透明地执行此操作 - 当程序集尝试加载特定DLL时,它会失败,处理程序将触发,并从加密的DLL加载程序集。 / p>

我还没有发现这种方法有任何问题。

此外,如果您只担心人们在自己的项目中使用已完成的DLL,您可以在代码中添加一些堆栈检查,以及解析正在运行的程序集并对其执行哈希检查。但是,这两种对策都可以很容易地从你的DLL中编辑出来。