直接读取Windows PE文件时,我似乎无法找到延迟签名程序集的强名称。我可以访问CLR标头并读取所有CLR标头条目,包括标志和StrongNameSignature字段。不幸的是,在延迟签名的程序集中,StrongNameSignature被清零。是否在CLR标题中指定了MetaData目录中的信息?如果有的话,是否有人有一个如何阅读这个表的例子?
我对调用ILDASM或加载程序集不感兴趣。
答案 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
它可能有助于解析清单的细节作为起点,但我承认我并没有深入研究它。