我搜索了欺骗中的.net程序集,发现this post非常有用。但是,我在帖子中看到了一个非常明显的矛盾。有人指出,如果用户是同谋,则强名称无效:
但是如果用户是欺骗的同谋(如果他试图作弊就是这种情况),那么代码签名将只是一个速度提升并且不提供真正的保护。当然,强名称不提供与例如强名称相当的保护。 PunkBuster的。
几句后来,作者陈述了完全相反的东西:
然后,当您添加对已签名程序集的引用时,如果有人尝试使用相同的程序集名称(不是完全限定的程序集,只是没有版本,哈希和公钥的名称)和相同类型的不同程序集名称,尝试加载类型时CLR填充失败,表示无法找到它;使用完全限定的程序集名称以及名称空间和类型名称来解析类型。
所以:
1)这是矛盾还是我失去了什么?第一段中的作者是否在谈论验证强名称被禁用且不会重新启用的情况?
此外,令人惊讶地说:
如果攻击者能够修改您引用的程序集的强名称,那么他们就可以轻松地修改程序集以及执行中涉及的所有其他程序
2) 如何修改已部署的程序集(例如DLL)强名称?
答案 0 :(得分:1)
这里似乎没有矛盾 - 第二个引用正确表明只是将引用的程序集替换为包含相同名称类型的另一个程序集,具有不同(或没有)强名称将会失败,因为这个程序集与参考文献中指出的不匹配。从本质上讲,这是系统保护自己免受用户不想修改的方式。
但是,如果修改是意图(即用户是同谋,则按照第一个引用),那么有一些简单的方法可以启用加载已修改的程序集,例如通过禁用强名称检查(这将允许具有无效签名的程序集,例如由于它已经被修改)仍然可以加载,或者通过更改程序集引用本身。
在回答您的第二个问题时,虽然标准装配签名工具sn
没有选项可以将装配体的强名称替换为另一个,但它肯定是可能的,并且简短的搜索应该找到能够使用的各种工具这样做。 (事实上,使用简单的十六进制编辑器很容易做到这一点。)