我们需要修补程序集,目前无法从源代码重建。我可以使用 ildasm mydll.dll /all /out=mydll.il 转储 IL,然后我可以使用 ilasm /dll mydll.il 重建它,这一切都很好,除了文件版本、公钥等都丢失了新的二进制文件。我怎样才能告诉 ilasm 添加这些?我试过 /mdv 开关但没有运气。
问问题
1464 次
1 回答
7
密钥不会往返 - 否则您将能够破解任何人的程序集并将其作为原始程序传递。
为了在您的情况下签署程序集,您需要密钥。一旦你反编译了你的程序集,修补它 - 如果你继续并在其他 Assmbly 属性所在的区域添加以下行,这是最简单的:
.custom instance void [mscorlib]System.Reflection.AssemblyDelaySignAttribute::.ctor(bool) = ( 01 00 00 00 00 )
该属性告诉 ilasm 为密钥留出空间。添加该属性并使用 ilasm 重新组装代码后,您需要使用 sn 实用程序延迟对其进行签名。语法应该是这样的:
sn /R myreassembled.dll originalassemblykey.snk
那应该让议会辞职。
您指的是哪个文件版本?它应该是 IL 中的程序集属性,但如果不是,您可能需要 al.exe 实用程序来执行此操作。
于 2012-01-06T22:14:51.123 回答