我搜索了保护 .net 程序集免受欺骗,发现这篇文章非常有用。但是,我在帖子中看到了一个非常明显的矛盾。有一点指出,如果用户是同谋,则强名称是没有用的:
但是,如果用户是欺骗的同谋(如果他试图作弊,就会出现这种情况),那么代码签名将只不过是一个减速带,并不能提供真正的保护。当然,强名称不提供与例如 PunkBuster 相媲美的保护。
几行之后,作者完全相反地陈述了一些事情:
然后,当您添加对已签名程序集的引用时,如果有人尝试使用相同的程序集名称(不是完全限定的程序集,只是没有版本、哈希和公钥的名称)和相同类型名称的不同程序集,则尝试加载类型时CLR填充失败,表示找不到;使用完全限定的程序集名称以及命名空间和类型名称来解析类型。
所以:
1)这是矛盾还是我失去了什么?第一段中的作者是否在谈论验证强名称被禁用并且不会重新启用的情况?
此外,令人惊讶的是,它指出:
如果攻击者能够修改您引用的程序集的强名称,那么他们就可以轻松修改您的程序集和所有其他参与执行的程序集
2) 如何修改已部署程序集(例如 DLL)的强名称?