我对现有的.NET程序集动态链接库中的代码进行了一些更改。我没有用来签署代码的密钥文件。如何在不注册跳过验证(不可移植)的情况下强制.NET可执行文件加载它,并且不删除StrongNames (损坏应用程序)?
发布于 2012-09-11 07:25:41
您可以在Reflexil (.NET反射器插件)中编辑.NET动态链接库,并在修改后的代码上保留原始签名。感谢您的回答。
对于那些希望编辑程序集而不对其重新签名的人,可以使用Reflexil。仅仅因为人们否定了这个答案,并不意味着它是错误的。
发布于 2012-09-11 06:38:09
你不能,这就是强名称的全部意义所在。
强名称验证可执行文件未被非作者篡改。(假设拥有原始密钥文件的任何人都是作者。)由于您没有密钥文件,因此您一定不是作者,因此强命名会阻止您执行想要执行的更改。
如果你想加载你的DLL,你必须使用你建议的任何一种解决方案。
如果至少满足以下条件之一,则编辑 Since .NET 3.5 SP1, strong name verification is :
基本上,除了Silverlight之外的所有用例都禁用了强名称验证。但是,系统管理员可以使用注册表键在默认情况下重新启用名称验证:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework]
"AllowStrongNameBypass"=dword:00000000微软表示,允许这种更改的原因是strong names were not an integrity checking mechanism而不是程序集标识机制。对于实际的完整性检查,Authenticode是可行的。
这意味着,对于所有实际目的,强名称对于防止篡改都没有用处,任何人都可以篡改任何程序集,并且仍然可以正确地加载它,除非系统管理员阻止它。
为了正确回答这个问题,应该提到的是,修改程序集将使其强名称无效,因此,如果snk不可用,则无法在不使强名称无效的情况下编辑。但是,在大多数情况下,它不会阻止它的加载。
https://stackoverflow.com/questions/12360400
复制相似问题