我刚刚完成了我们的german VB.NET forums并且有一些有趣的东西给了我一些头痛。
实际上可以使用ReflexIL或其他一些IL编辑器编辑 .NET Framework程序集。您唯一要绕过的是程序集的强名称签名。更改程序集IL后,您必须运行sn.exe -Vr [assemblyname]
以跳过强名称验证。之后,您必须清除缓存的本机映像。只需浏览C:\Windows\assembly
目录并删除与程序集相关的每个图像。然后重启。登录后,运行ngen install [assemblyname]
。现在生成新原生图像。
这很有效。我在我的虚拟环境(Windows XP x86)中验证了此过程。现在让我最担心的是,您可以轻松绕过RSACryptoServiceProvider
的.NET VerifyHash
或VerifyData
方法。这实际上也有效。我和我的一位朋友测试过可以验证这个问题(see screenshots)。这很容易。
例如,如果我创建一个基于.NET Framework加密类的许可系统,则可以绕过系统范围来每个 .NET应用程序系统使用框架。此外,每个人都可以记录并更改我只是通过挂钩方法调用的函数输入。
现在我的问题是: 由于这可能是一个巨大的问题,我该怎么办呢?当然,恶意用户只能编辑我的应用程序,但这不会像在系统范围内那样糟糕。 我正在考虑一些框架校验和验证,但由于.NET Framework有很多不同的更新,这似乎是不可能的。
任何解决方案或建议? Microsoft是否以某种方式解决了这个问题?
答案 0 :(得分:8)
如果攻击者拥有对您计算机的管理员访问权限(这是您所描述的攻击所必需的),那么您几乎已经丢失了。你可以做的任何事都可以被攻击者规避。
正因为如此,我认为试图抵御这种类型的攻击是完全没有意义的。如果您必须处理不受信任的,可能受到攻击的计算机,那么您根本无法相信它们做任何敏感的事情,您必须在自己的服务器上执行此操作,或类似的事情。