【发布时间】:2013-01-24 15:55:59
【问题描述】:
我刚刚浏览了我们的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 应用程序绕过系统范围使用框架的系统。此外,每个人都可以记录和更改我通过挂钩方法调用的函数的输入。
现在我的问题是: 既然这可能是一个大问题,我该怎么做呢?当然,恶意用户可以只编辑 my 应用程序,但这不会像在系统范围内那样糟糕。 我在考虑一些框架校验和验证,但由于 .NET Framework 有很多不同的更新,这似乎是不可能的。
有什么解决方案或建议吗? Microsoft 是否以某种方式解决了这个问题?
【问题讨论】:
-
您需要再次完成整个练习,但这次没有管理员用户名和密码。这是威胁分析中的一个常见谬误,当入侵者有钥匙时,锁门是没有意义的。
-
另外,许可系统通常是徒劳的。
标签: .net security .net-assembly cil ngen