在不调用LoadAssembly的情况下查找强名称签名

时间:2010-05-02 09:04:53

标签: c#

直接读取Windows PE文件时,我似乎无法找到延迟签名程序集的强名称。我可以访问CLR标头并读取所有CLR标头条目,包括标志和StrongNameSignature字段。不幸的是,在延迟签名的程序集中,StrongNameSignature被清零。是否在CLR标题中指定了MetaData目录中的信息?如果有的话,是否有人有一个如何阅读这个表的例子?

我对调用ILDASM或加载程序集不感兴趣。

2 个答案:

答案 0 :(得分:2)

您可以使用Mono.Cecil反映装配而不加载它。

获取Mono.Cecil副本的最简单方法是安装MonoDevelop并深入到安装目录。

自己构建并不总是最简单的事情。

另外 - Mono.Cecil是一个独立的组件,IIRC,并不依赖于Mono。

答案 1 :(得分:0)

当您发现延迟签署程序集时,签名不会写入程序集,因为它尚未签名。

您可以获取Assembly Manifest中的公钥,公钥令牌是公钥(IIRC)的SHA1哈希的前8个字节。

因此,如果您不想加载程序集,则需要找到Manifest并解析数据。

我做了一个快速的'bing',发现了以下内容 http://www.codeproject.com/KB/dotnet/asmex.aspx

它可能有助于解析清单的细节作为起点,但我承认我并没有深入研究它。