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

Ber*_*nDK 2 .net c# checksum assemblies dll-injection

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

它不是“更新问题”,而是快乐 - 我们如何检查:

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

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

多种原因

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

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

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

Alb*_*nez 5

我看到两个选项:

  1. 数字签名。您需要购买数字证书,但是一旦您使用它,您就可以对文件的来源非常有信心。如果还有优势,您的程序在 Windows Vista 和更高版本中不会被标记为来自“未知发布者”。

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