2

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

它不是一个“更新问题”,而是一个好消息——我们如何检查:

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

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

多种原因

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

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

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

4

2 回答 2

5

我看到两个选项:

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

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

于 2010-11-08T00:16:17.127 回答
0

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

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

于 2010-11-08T00:24:17.150 回答