我认为StrongName不会阻止反射 - 这是混淆器的工作。但除了创建相当独特的名称之外,使用StrongNames的加密目的或保护是什么?
假设
MyAssembly
有internal
个类和方法,通过它们公开
[assembly: InternalsVisibleTo("MyAssemblyTest, PublicKey=RealRSAPublicKey")]
到
MyAssemblyTest
,测试装配。
这些程序集都有StrongNames,可能使用相同的RSA密钥对。
什么阻止某人
MyAssembly
[assembly: InternalsVisibleTo("MyAssemblyTest, PublicKey=FakeRSAPublicKey")]
MyAssembly
MaliciousAssembly
我想我不清楚Strongnaming的真正职责是什么......会欣赏一些见解。
答案 0 :(得分:0)
为程序集提供强名称的主要目的是防止使用程序集的其他人的代码的恶意用户用自己的代码替换代码。
请考虑这种情况:您将一个TransmitSecret.dll
程序集提供给客户,以便他们能够以安全的方式与您的服务器进行通信。如果TransmitSecret.dll
未签名,恶意用户将能够编写自己的模块,该模块提供与您相同的界面,将您的代码包装在他们自己的恶意代码中,拦截客户的所有“安全”传输,并发送复制到自己的服务器。只需将dll
替换为他们的TransmitSecret.dll
,他们就可以无需访问客户的源代码即可完成此操作。
但是,如果TransmitSecret.dll
已签名,并且您的客户代码与其相关联,那么交换程序集的技巧就不会起作用:当客户的代码尝试加载{{1}}时, .NET会注意到这一变化,并阻止程序启动。