您好,我正在尝试弄清楚如何确保提供的 DLL 是正确的。 原因是我们的分布式解决方案是由许多小型 DLL 构建的,每个 DLL 都包含应用程序的某些部分,有时我们会推出其中一些的新版本。
这不是一个“更新问题”,而是一个很好的问题 - 我们如何检查是否:
它是正确的二进制/汇编
客户/客户篡改了该文件,并可能将其替换为具有类似功能的同名文件,从而返回错误值?
多种原因
这可以用于复制保护/许可证测试或其他重要的验证问题,所以我试图弄清楚 MD5 校验和 + 某种汇编信息是否足够? (如果是这样,如何访问程序集详细信息或类似信息?)
当然,当您可以反编译 .NET DLL 时,没有什么是万无一失的,但正是因此,我们希望确保有人不只是反编译我们的函数列表,然后编写我们的“哦,如此重要”DLL 的自己的替换 DLL。
我们的原因是,当我们遇到因错误或目的而破坏这些内容的客户时,调试/支持所需的麻烦量(我们不关心原因,我们只是尽力防止大多数可能的错误)。
最佳答案
我看到两个选项:
Digital signing 。您需要购买数字证书,但是一旦您使其发挥作用,您就可以对文件的来源非常有信心。还有一个优点是,您的程序不会在 Windows Vista 及更高版本中被标记为来自“未知发布者”。
哈希。您可以使用 MD5 (或更好 SHA-1 )哈希值。非常容易实现,但可以解决保护问题(尽管这样做并不简单)。
关于c# - 在 C#/.NET 中运行应用程序之前检查 DLL 是否真实/正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4120381/