【问题标题】:How do I know that my Application loads the correct assemblies?我怎么知道我的应用程序加载了正确的程序集?
【发布时间】:2017-11-24 16:58:08
【问题描述】:

我有一个程序集,用于验证我的应用程序的安全性,例如许可证。 我如何授予每次我的应用程序调用验证方法时,这是从正确的程序集中加载的? 我想防止有人创建伪造的程序集来绕过这些验证。

通过添加.snk 来获得强命名密钥,这会解决我的问题吗?

例如如果我的应用程序使用MySecurity.dll,如果其他人创建了一个同名程序集并在bin 文件夹中覆盖它,我的应用程序会知道这不是正确的程序集吗?

我很担心,因为我们的解决方案使用两种验证方式,本地使用公共证书作为许可证文件,以及在线(如果有互联网连接)。但其中任何一个都可以轻松绕过。

【问题讨论】:

  • 强命名机制正是针对这种情况而存在的。
  • @Gusdor 不,不是。如果是最终用户将无法disable it via the command line。存在强命名以防止来自多个供应商的程序集的名称冲突。
  • @ScottChamberlain 完整性在文档docs.microsoft.com/en-us/dotnet/framework/app-domains/… 中特别提及
  • 这是关于在没有最终用户同意的情况下通过第三方修改文件的完整性。它不能防止最终用户尝试替换或修改文件

标签: c# .net .net-assembly


【解决方案1】:

您可以在代码中硬编码该 dll 文件的哈希字符串,并在运行时检查它(可能在计时器中)

您还需要使用Eazfuscator.NET 之类的东西来保护您的程序集

【讨论】:

  • Authenticode 签名将是检查它的最佳方式。在您的 assembly.load 事件中,检查程序集是否由预期的证书签名。注意 OP 验证码和强名称签名是两种不同的机制。
猜你喜欢
  • 1970-01-01
  • 2019-09-05
  • 1970-01-01
  • 2012-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多