【问题标题】:Check if DLL is authentic/correct before running application i C# / .NET在运行应用程序 i C#/.NET 之前检查 DLL 是否真实/正确
【发布时间】:2010-11-08 00:03:42
【问题描述】:

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

这不是“更新问题”,而是很高兴 - 我们如何检查是否:

  1. 它是正确的二进制/汇编

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

多种原因

这可以用于版权保护/许可证测试或其他重要的验证问题,所以我想弄清楚 MD5 校验和 + 某种组合信息是否足够? (如果是这样,如何访问装配细节或类似信息?)

因为没有什么是故障安全的,当您可以反编译 .NET DLL 时,但正是因此我们希望确保有人不只是反编译我们的函数列表,然后在那里编写自己的替换 DLL,以替换我们“哦,太重要了”的 DLL。

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

【问题讨论】:

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


    【解决方案1】:

    我看到两个选项:

    1. Digital signing。您需要购买一个数字证书,但是一旦您使用它,您就会对文件的来源充满信心。 If 还有一个优点是您的程序在 Windows Vista 及更高版本中不会被标记为来自“未知发布者”。

    2. 散列。您可以使用 MD5(或更好的 SHA-1)哈希。非常容易实现,但可以解决保护问题(尽管这样做并非易事)。

    【讨论】:

      【解决方案2】:

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

      正如@Alberto Martinez 所提到的,我确实建议使用数字签名来获得针对故意篡改的最佳保护。

      【讨论】:

      • 在我看来,引用它们可能会出现问题,因为在某些情况下,我们可能会提供新的 DLL 而不替换 EXE。所以它需要某种“动态检查”。
      • 是的,这就是绑定重定向出于正当理由有用​​的地方。您必须更新 .exe.config 文件,但不需要部署新的 .exe
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-10
      • 1970-01-01
      • 2019-02-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多