【发布时间】:2015-05-26 11:48:40
【问题描述】:
我继承了一个 C# .NET 应用程序,该应用程序需要对其中一个 DLL 程序集中的一些路径名字符串进行轻微修改。很遗憾,我没有源代码。
我使用 ILSpy 和 Reflexil 插件进行了必要的修改。当我保存 DLL 时,我被告知原始文件已签名,如果没有签名,新文件将无法工作。新文件现在“延迟签名”。
我可以用 Reflexil 看到公钥、公钥令牌和哈希算法。
我对 .NET IL 完全陌生。如何使用我必须签署修补的 DLL 的公钥信息?
我有 Visual Studio 2013,所以可以访问 sn.exe,如果有帮助的话。
【问题讨论】:
-
如果你能做到这一点,整个签名过程将毫无用处。唯一的方法是完全删除签名(这很可能会通过几个程序集传播)。您需要私钥才能正确签署程序集。
-
@Luaan 我可以从我的机器上创建一个私钥。这会有帮助吗,还是必须是原始私钥?
-
这取决于你想要做什么。离开没有签名的程序集可能会很好。创建自己的密钥并用它签名可能会很好。但是在这两种情况下,您将拥有不同的程序集——任何引用它的程序集都必须重新编译(好吧,它们的引用必须改变)。签名是程序集身份的一部分——你不希望有人给你他们自己的 mscorlib,它会默默地替换你自己对 mscorlib 的引用,对吗?
-
@Luaan 好的,谢谢。如果我使用 Reflexil 删除强名称并使用其 AutoScan 组装工具来检测需要删除强名称的其他文件,它只会显示主应用程序。所以我想唯一要做的就是删除强名称并查看程序的行为。
-
为什么这被否决了?更好的是,那个人应该说些什么。
标签: c# .net dll strongname assembly-signing