首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在不访问原始密钥文件的情况下对.NET程序集执行StrongName

在不访问原始密钥文件的情况下对.NET程序集执行StrongName
EN

Stack Overflow用户
提问于 2012-09-11 06:37:12
回答 2查看 6.3K关注 0票数 4

我对现有的.NET程序集动态链接库中的代码进行了一些更改。我没有用来签署代码的密钥文件。如何在不注册跳过验证(不可移植)的情况下强制.NET可执行文件加载它,并且不删除StrongNames (损坏应用程序)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-11 07:25:41

您可以在Reflexil (.NET反射器插件)中编辑.NET动态链接库,并在修改后的代码上保留原始签名。感谢您的回答。

对于那些希望编辑程序集而不对其重新签名的人,可以使用Reflexil。仅仅因为人们否定了这个答案,并不意味着它是错误的。

票数 3
EN

Stack Overflow用户

发布于 2012-09-11 06:38:09

你不能,这就是强名称的全部意义所在。

强名称验证可执行文件未被非作者篡改。(假设拥有原始密钥文件的任何人都是作者。)由于您没有密钥文件,因此您一定不是作者,因此强命名会阻止您执行想要执行的更改。

如果你想加载你的DLL,你必须使用你建议的任何一种解决方案。

如果至少满足以下条件之一,则编辑 Since .NET 3.5 SP1, strong name verification is

  • 程序集使用Authenticode;
  • the完全签名程序集完全受信任(不考虑其强名称证据);
  • 程序集被加载到完全受信任的AppDomain中(这是大多数scenarios);
  • the中桌面应用程序所发生的情况)。从AppDomain的AppDomain下的位置加载程序集(即,程序集与应用程序一起分发,并存在于同一目录中)。

基本上,除了Silverlight之外的所有用例都禁用了强名称验证。但是,系统管理员可以使用注册表键在默认情况下重新启用名称验证:

代码语言:javascript
复制
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework]
"AllowStrongNameBypass"=dword:00000000

微软表示,允许这种更改的原因是strong names were not an integrity checking mechanism而不是程序集标识机制。对于实际的完整性检查,Authenticode是可行的。

这意味着,对于所有实际目的,强名称对于防止篡改都没有用处,任何人都可以篡改任何程序集,并且仍然可以正确地加载它,除非系统管理员阻止它。

为了正确回答这个问题,应该提到的是,修改程序集将使其强名称无效,因此,如果snk不可用,则无法在不使强名称无效的情况下编辑。但是,在大多数情况下,它不会阻止它的加载。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12360400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档