【问题标题】:Protection offered by using assembly StrongName?使用程序集 StrongName 提供的保护?
【发布时间】:2013-09-24 18:40:20
【问题描述】:

我知道 StrongName 不会阻止反射 - 这是混淆器的工作。但除了创建相当独特的名称之外,使用 StrongNames 的加密目的或保护是什么?

假设

  1. MyAssembly 具有 internal 类和方法,它们通过以下方式公开 [assembly: InternalsVisibleTo("MyAssemblyTest, PublicKey=RealRSAPublicKey")]

  2. MyAssemblyTest,测试程序集。

这两个程序集都有 StrongNames,可能使用相同的 RSA 密钥对。

是什么阻止了某人

  1. 剥离MyAssembly上的签名
  2. 创建假/伪 RSA 密钥对
  3. 将程序集属性修改为[assembly: InternalsVisibleTo("MyAssemblyTest, PublicKey=FakeRSAPublicKey")]
  4. 使用他们自己的假/伪 RSA 密钥对重新签名 MyAssembly
  5. 在他们自己的程序集中使用内部组件,比如MaliciousAssembly

我想我不清楚 Strongnaming 的真正职责是什么……希望能得到一些见解。

【问题讨论】:

    标签: c# .net-assembly strongname


    【解决方案1】:

    为程序集提供强名称的主要目的是防止恶意用户使用其他人的代码使用您的程序集来替换您自己的代码。

    考虑这种情况:您制作了一个TransmitSecret.dll 程序集,并将其提供给您的客户,以便他们能够以安全的方式与您的服务器通信。如果TransmitSecret.dll 未签名,恶意用户将能够编写他们自己的模块,提供与您相同的界面,将您的代码包装在他们自己的恶意代码中,拦截您客户的所有“安全”传输,并发送一份副本到自己的服务器。他们无需访问您客户的源代码就可以做到这一点,只需将您的dll 替换为他们的即可。

    但是,如果 TransmitSecret.dll 已签名,并且您的客户代码链接到它,则交换程序集的技巧将不起作用:当您的客户代码尝试加载 TransmitSecret.dll 时,.NET 会注意到更改,并停止程序启动。

    【讨论】:

      猜你喜欢
      • 2014-09-23
      • 2011-12-30
      • 1970-01-01
      • 2011-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-03
      • 1970-01-01
      相关资源
      最近更新 更多