在运行应用程序i C#/ .NET之前,请检查DLL是否真实/正确

时间:2010-11-08 00:03:42

标签: c# .net assemblies checksum dll-injection

您好我想弄清楚如何确保提供的DLL是正确的。 原因是我们的分布式解决方案是由许多小DLL组成的,每个小DLL包含应用程序的某些部分,有时我们会推出其中一些的新版本。

这不是“更新问题”,但请巧妙 - 我们如何检查:

  1. 正确的二元/汇编

  2. 客户/客户端已经篡改了文件,并且可能将其替换为具有相似功能的相同名称之一以返回错误值?

  3. 多重原因

    这可以用于copyprotection / licens测试或其他重要的验证问题,所以我想弄清楚MD5校验和+某种汇编信息是否足够? (如果是这样,如何获得装配细节或类似信息?)

    因为没有什么是故障保护的,当你可以反编译.NET DLL时,但是我们想要确保有人不仅仅反编译我们的函数列表然后写下我们的“oooh so important”DLL的替换DLL。

    我们的理由是调试/支持所需的麻烦,当我们让客户因错误或目的而破坏这些时(我们不关心原因,我们只是试图阻止大多数可能的错误)。

2 个答案:

答案 0 :(得分:4)

我看到两个选项:

  1. Digital signing。您需要购买数字证书,但一旦您完成它,您就会对文件的来源感到非常自信。如果还有一个优点,即您的程序不会被标记为来自Windows Vista及更高版本中的“未知发布者”。

  2. 散列。您可以使用MD5(或更好的SHA-1)哈希。很容易实现,但可以解决保护问题(虽然这样做并不简单)。

答案 1 :(得分:0)

在Visual Studio中,您可以指向对库的“特定版本”的引用。您只需在参考的属性中将默认的“False”更改为“True”。这将为您处理查找汇编信息。使用绑定重定向覆盖它是微不足道的,但是这会阻止程序在意外安装了错误版本的情况下运行。

正如@Alberto Martinez所提到的那样,我建议使用数字签名来防止故意篡改。