如何防止在其他应用程序中加载DLL

时间:2010-05-24 18:10:35

标签: c# .net visual-studio-2008 dll custom-controls

目前我正在开发一个C#.Net应用程序,我正在使用我之前开发的自定义控件。我需要在新的应用程序中发布dll - 但可以理解的是我不希望dll文件用于外国应用程序。

这就是为什么我需要在新应用程序中以某种方式编译自定义DLL。目前,dll已复制到应用程序目录中。

有什么想法吗?应该是琐碎的imho。

谢谢&问候, 丹尼尔

4 个答案:

答案 0 :(得分:5)

我认为您需要考虑授权您的控件: http://msdn.microsoft.com/en-us/library/fe8b1eh9.aspx

答案 1 :(得分:3)

查看IL Merge。此实用程序允许您将多个.NET程序集组合到一个程序集中。

我引用:

  

ILMerge是一个实用程序,可用于将多个.NET程序集合并到一个程序集中。 ILMerge接受一组输入程序集并将它们合并到一个目标程序集中。输入程序集列表中的第一个程序集是主程序集。当主程序集是可执行文件时,目标程序集将创建为具有与主程序集相同的入口点的可执行文件。此外,如果主程序集具有强名称,并且提供了.snk文件,则使用指定的键重新签名目标程序集,以使其具有强名称。

然而,要考虑的是,人们仍然可以使用创建的程序集。考虑一下混淆和许可以保持随和,但请记住,如果有人想要你的代码足够严重,他们就会得到它。

某些事情使得它变得更加困难,例如拥有Web服务,但即使这样,这也不是完全证据。

答案 2 :(得分:1)

如果您可以使用专有控件更改DLL,则可以...

  1. 标记控件DLL内部的所有内容。
  2. 编译程序集,以便调用DLL可以访问控制DLL的内部成员。
  3. 签署调用DLL。
  4. 有关如何执行此操作的详细信息,请参阅此MSDN page

答案 3 :(得分:0)

你可以做很多不同的黑客攻击,让人们更难以使用。所有这些都可以被规避,但这就是生活。

您可以在此处查看此回复,以禁止未知程序集引用您的程序集:Secure C# Assemblies from unauthorized Callers

如果你真的很紧张,你应该对你的集会进行模糊处理。这将使更难反编译。像Babel这样的东西效果很好:http://babelobfuscator.blogspot.com/

您还可以使用ILMerge将程序集存储在另一个程序集中。但是,此程序集将在运行时提取并公开。您可以沿着这些行执行某些操作,从一个程序集中提取二进制资源,并创建一个在运行时使用的临时程序集。如果有人真的有动力,他们也可以找到临时装配......

真正的问题是你想走多远!?在某些时候它是不值得的。那就是你停下来的地方。