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