【问题标题】:Need help understanding assembly signing process需要帮助了解程序集签名过程
【发布时间】:2011-03-25 19:08:58
【问题描述】:

我有一个正在签名的 .NET 程序集。这是我对过程和相关问题的理解。

  1. 为了对组装进行签名,编译器执行组装的单向散列,然后使用发布者私钥对散列进行加密。现在这个加密的哈希值必须存储在某个地方。当我签署一个程序集并运行 ILDasm 以查看程序集的 IL 时,我看到了一个 .public key 部分,但看不到这个散列在程序集中的存储位置。

  2. 根据我在运行时加载此签名程序集时所读到的内容,它正在执行相反的过程,包括生成程序集的哈希并解密“强名称签名”。将此解密的强名称签名与步骤 1 中的散列进行比较。如果这两者匹配,则运行时加载它,否则拒绝加载程序集。我不确定被解密的“强名称签名”到底是什么,我在哪里可以找到它。

TIA

【问题讨论】:

    标签: .net assemblies assembly-signing


    【解决方案1】:

    为了回答您的第一点,我写了一系列关于 .NET 程序集布局的博文;我在second post 中介绍了 CLR 元数据。如您所见,强名称哈希存储在程序集的 .text 部分中,位于 CLI 标头下方。

    恐怕我知道的不够多,无法回答您的第二个问题。但是请注意,不正确的强名称不会阻止程序集在完全信任的情况下正常加载和运行 - 您必须自己使用 pinvoke 调用明确检查强名称是否完好。

    【讨论】:

    • 谢谢。所以当我对一个签名的程序集运行 ILDASM 时,这个强名称哈希是否在那里可见,或者你只能通过一些十六进制查看器查看它?另外,您在博客中使用了哪个十六进制查看器?
    • @Simon:感谢您的提示,我通过十六进制查看器查看了程序集,也看到了您所指的内容。但是,我有一个未签名的程序集,其中还包含该偏移量 0250 处的一些数据。我怎么知道该偏移量处包含的数据实际上是带符号的哈希还是其他东西
    猜你喜欢
    • 1970-01-01
    • 2018-03-06
    • 1970-01-01
    • 2018-08-28
    • 2013-05-04
    • 1970-01-01
    • 2019-09-12
    • 1970-01-01
    • 2017-06-19
    相关资源
    最近更新 更多