.net 如何更改程序集的公共令牌

.net 如何更改程序集的公共令牌,.net,dll,assemblies,.net,Dll,Assemblies,我有两个集会。一个组件指的是另一个组件。我检查了第一个程序集的清单,发现它正在使用某个特定的令牌密钥引用第二个程序集 但是我检查了第二个程序集的令牌,发现它有一个不同的公共令牌。所以不知何故,我错过了正确的第二次装配。所以我想知道是否有一种方法可以将第二个程序集的公共令牌更改为第一个程序集需要的令牌 另外,我还有另一个第二个程序集,它的public token=null。您在问“如何伪造第二个程序集的签名,使第一个程序集认为它是原始的”。除非您有一个用于签署“正确”程序集的密钥对,否则您不能。因

我有两个集会。一个组件指的是另一个组件。我检查了第一个程序集的清单,发现它正在使用某个特定的令牌密钥引用第二个程序集

但是我检查了第二个程序集的令牌,发现它有一个不同的公共令牌。所以不知何故,我错过了正确的第二次装配。所以我想知道是否有一种方法可以将第二个程序集的公共令牌更改为第一个程序集需要的令牌


另外,我还有另一个第二个程序集,它的public token=null。

您在问“如何伪造第二个程序集的签名,使第一个程序集认为它是原始的”。除非您有一个用于签署“正确”程序集的密钥对,否则您不能。因此,最好的方法是要求组件供应商提供正确的组件对

听起来您想重建第二个程序集,并使用不同的密钥对其进行签名,如果您有源代码,这将很容易,所以我想您没有

我认为使用第二个程序集上存在的公钥令牌重建第一个程序集会更容易,以便它引用您拥有的第二个程序集。更简单,但不完全直接

我认为您应该能够通过
ildasm.exe
运行第一个程序集,将引用上的公钥标记更改为第二个程序集,然后通过
ilasm.exe
运行结果,从而生成第一个程序集的新版本

所涉及步骤的大致轮廓

  • 运行
    ildasm.exe/out=first.il first.dll
    (或
    first.exe
  • 编辑
    first.il
    并找到.assembly外部块以引用
    second.dll
  • 更改该块中的公钥令牌
  • 运行
    ilasm.exe first.il
    生成
    first.dll
    (或
    first.exe

  • 请注意,我已经很长时间没有使用这些工具了,而且从未以这种方式操作公钥令牌,因此您可能需要添加一些自己的独创性。但另一方面,我想不出这种方法不起作用的原因。

    根据我的个人经验,您可能希望更改您的app.Net framework,使其与DLL匹配。

    如果您知道公共令牌,那么这也是不可能的。请阅读非对称加密和签名的工作原理。您只能使用私钥进行签名。公钥用于验证(您不能使用公钥签名)。您能告诉我如何进行验证吗?@Nits过程如上所述。在#4中,我添加了两个开关
    /res:first.res/dll
    ,以获得dll而不是可执行文件。另请注意:il-D-asm与il asm命令不同。