我该如何保护我的程序集,因为一旦我部署了设置,程序集也将被部署,并且用户有可能从 Program Files 中获取程序集,并可能添加对任何其他项目的引用或基于它创建新项目!任何解决方案或帮助将不胜感激。
6 回答
您可以将程序集内的所有成员设置为内部成员,并且只允许其他人通过InternalsVisibleToAttribute使用它。但如果有人足够坚持,就没有办法阻止他们使用它。
您可以混淆程序集的代码,这会使使用它的任务变得更加困难,但是您无法做到 100% 阻止用户选择和使用程序集。您可以做的不是在用户计算机上部署程序集,而是通过 Web 服务提供功能。
你不能完全阻止这种情况。但是您可以以某种方式混淆您的程序集,使得公开的类和方法没有任何合理的名称。
一种这样的混淆器是开源的,称为混淆器。可以在此链接下找到一个后续项目。
没有简单的方法。你只能让它变得更加困难。如果您的算法是如此独特和珍贵[1],以至于您需要使第三方无法使用(或窥视)它们,那么您唯一的选择是将逻辑放在远程位置(在服务器后面)并让您的程序称它为。
[1] 以我卑微的经验,从来都不是这样。
您可以使用 ILmerge 将程序集合并到可执行文件中,然后使用混淆来保护整个包(.NET 可执行文件可以被视为可以链接到的程序集)。
虽然它显然不安全 - 您仍然必须将解密密钥存储在某个地方 - 它可以很好地加密磁盘上的 DLL,然后加载它们并在内存中解密。
如果您使用自定义处理程序挂钩 AppDomain.CurrentDomain.AssemblyResolve,您甚至可以透明地执行此操作 - 当您的程序集尝试加载特定 DLL 时,它会失败,您的处理程序会触发,并从加密的 DLL 加载程序集。
我还没有发现这种方法有任何问题。
此外,如果您只担心人们在他们自己的项目中使用您完成的 DLL,您可以在代码中添加一些堆栈检查,以及解析正在运行的程序集并对其执行哈希检查。但是,这两种对策都可以轻松地从您的 DLL 中编辑出来。