欺骗.net程序集并讨论先前发布的注意事项



我搜索了保护。net程序集免受欺骗,发现这篇文章非常有用。然而,我在这篇文章中看到了一个非常明显的矛盾。有一点指出,如果用户是同谋,强名称是没有用的:

但是如果用户是欺骗的同谋(如果他试图欺骗,就会出现这种情况),那么代码签名将只不过是一个减速带,并没有提供真正的保护。当然,强名称不能提供像PunkBuster这样的保护。

几行之后,作者说了一些完全相反的话:

然后,当您向签名程序集添加引用时,如果有人试图将具有相同程序集名称(不是完全限定的程序集,只是没有版本,散列和公钥的名称)和相同类型名称的不同程序集放入,CLR填充在尝试加载类型时失败,表明它找不到它;使用完全限定的程序集名称以及名称空间和类型名称来解析类型。

:

1)这是矛盾还是我失去了什么?作者在第一段谈论的情况下,验证强名称被禁用,不打算重新启用?

此外,令人惊讶的是,有人说:

如果攻击者有能力修改你引用的程序集的强名称,那么他们就可以很容易地修改你的程序集以及执行过程中涉及的所有其他程序集

2)如何修改已部署程序集(例如DLL)的强名称?

这里似乎没有矛盾-第二个引号正确地指出,简单地将引用的程序集替换为包含相同名称类型的另一个具有不同(或没有)强名的程序集将失败,因为该程序集与引用中指示的程序集不匹配。从本质上讲,这是系统保护自身免受非用户意图修改的方式。

然而,如果修改是有意的(即用户是共谋的,根据第一个引号),那么有简单的方法可以加载修改后的程序集,例如禁用强名称检查(这将允许具有无效签名的程序集,例如,由于它被修改了)仍然被加载,或者通过更改程序集引用本身。

在回答您的第二个问题时,虽然标准程序集签名工具sn没有选择将程序集的强名称替换为另一个,但这当然是可能的,并且简短的搜索应该找到能够这样做的各种工具。(事实上,使用一个简单的十六进制编辑器就可以很容易地做到这一点)。

最新更新