7

我刚刚浏览了我们的德国 VB.NET 论坛,有一些有趣的事情让我有些头疼。

实际上可以使用 ReflexIL 或其他一些 IL 编辑器来编辑.NET Framework 程序集。您唯一需要绕过的是程序集的强名称签名。更改程序集 IL 后,您必须运行sn.exe -Vr [assemblyname]以跳过强名称验证。之后,您必须清除缓存的本机图像。只需浏览C:\Windows\assembly目录并删除与您的程序集相关的每个图像。然后重新启动。登录后,运行ngen install [assemblyname]. 现在生成了的本机图像。

这行得通。我在我的虚拟环境(Windows XP x86)中验证了这个过程。现在最让我担心的是你可以轻松绕过.NETVerifyHash或. 这实际上也有效。我和我的一个朋友经过测试可以验证这个问题(见截图)。那相当容易。VerifyDataRSACryptoServiceProvider

例如,如果我要创建一个基于 .NET Framework 加密类的许可系统,那么对于使用该框架的系统上的每个 .NET 应用程序,都可以在系统范围绕过它。此外,每个人都可以通过挂钩方法来记录更改我调用的函数的输入。

现在我的问题是:既然这可能是一个大问题,我该怎么做呢?当然,恶意用户可以只编辑我的应用程序,但这不会像在系统范围内那样糟糕。我在考虑一些框架校验和验证,但由于 .NET 框架有很多不同的更新,这似乎是不可能的。

有什么解决方案或建议吗?微软是否以某种方式解决了这个问题?

4

1 回答 1

8

如果攻击者对您的计算机具有管理员访问权限(这是您描述的攻击所必需的),那么您几乎已经迷失了。您可以做的任何事情都可能被攻击者规避。

因此,我认为试图防御这种攻击是完全没有意义的。如果您必须处理不受信任的、可能受到威胁的计算机,那么您根本不能相信它们会做任何敏感的事情,而您必须在自己的服务器上或类似的东西上做。

于 2013-01-24T19:49:58.627 回答