我明白,StrongName并不阻止反射--这是一个模糊处理者的工作。但是,除了创建相当独特的名称之外,使用StrongNames的密码目的或保护是什么?
假设
MyAssembly有internal类和方法,这些类和方法通过[assembly: InternalsVisibleTo("MyAssemblyTest, PublicKey=RealRSAPublicKey")]公开给MyAssemblyTest,测试程序集。这两个程序集都有StrongNames,可能使用相同的RSA密钥对。
是什么阻止了某人
MyAssembly上删除签名[assembly: InternalsVisibleTo("MyAssemblyTest, PublicKey=FakeRSAPublicKey")]MyAssemblyMaliciousAssembly说我想我不清楚斯特隆格宁的真正职责是什么.会感谢你的洞察力。
发布于 2013-09-24 18:49:44
给程序集一个强名称的主要目的是防止恶意使用使用程序集的代码的用户用自己的代码替换代码。
考虑一下这种情况:您可以将TransmitSecret.dll程序集交给客户,以便他们能够以安全的方式与您的服务器进行通信。如果TransmitSecret.dll没有签名,恶意用户将能够编写自己的模块,该模块与您的模块显示相同的接口,将代码包装在自己的恶意代码中,拦截客户的所有“安全”传输,并将副本发送到自己的服务器。他们可以在不访问客户源代码的情况下做到这一点,只需将您的dll替换为他们的源代码即可。
但是,如果TransmitSecret.dll被签名了,并且您的客户代码是针对它的,那么交换程序集的技巧就行不通了:当您的客户代码尝试加载TransmitSecret.dll时,.NET会注意到更改,并阻止程序启动。
https://stackoverflow.com/questions/18989490
复制相似问题