Kur*_*uck 4 .net c# strongname strong-named-key
我对现有的.NET程序集dll中的代码进行了一些更改.我没有用于签署代码的密钥文件.如何在不删除StrongNames(Damages应用程序)的情况下强制.NET可执行文件加载它,而无需注册它以跳过验证(不可移植)?
zne*_*eak 12
你不能,这就是强名的全部意义.
强名称验证可执行文件未被作者非篡改.(原始密钥文件的任何人都被认为是作者.)由于您没有密钥文件,因此您不能是作者,因此强名称会阻止您执行您想要执行的更改.
如果要加载DLL,则必须使用您建议的任一解决方案.
编辑 自.NET 3.5 SP1以来,只要满足以下条件之一,就会绕过强名称验证:
ApplicationBase(即程序集随应用程序一起分发并存在于同一目录中).基本上,除了Silverlight之外,每个用例都禁用了强名称验证.但是,系统管理员可以使用注册表项默认重新启用名称验证:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework]
"AllowStrongNameBypass"=dword:00000000
Run Code Online (Sandbox Code Playgroud)
微软表示允许这种改变的原因是强名称不是完整性检查机制,而是一种程序集识别机制.对于实际的完整性检查,Authenticode是可行的方法.
这意味着,出于所有实际目的,强名称对防止篡改没有用,任何人都可以篡改任何程序集并仍然正确加载,除非系统管理员阻止它.
为了正确回答这个问题,应该提到的是,修改程序集将使其强名称无效,因此如果snk不可用,则无法在不使强名称失效的情况下编辑DLL.但是,在大多数情况下,它不会阻止它加载.
| 归档时间: |
|
| 查看次数: |
5769 次 |
| 最近记录: |