我刚刚浏览了我们的德国 VB.NET 论坛,有一些有趣的事情让我有些头疼。
实际上可以使用 ReflexIL 或其他一些 IL 编辑器来编辑.NET Framework 程序集。您唯一需要绕过的是程序集的强名称签名。更改程序集 IL 后,您必须运行sn.exe -Vr [assemblyname]
以跳过强名称验证。之后,您必须清除缓存的本机图像。只需浏览C:\Windows\assembly
目录并删除与您的程序集相关的每个图像。然后重新启动。登录后,运行ngen install [assemblyname]
. 现在生成了新的本机图像。
这行得通。我在我的虚拟环境(Windows XP x86)中验证了这个过程。现在最让我担心的是你可以轻松绕过.NETVerifyHash
或. 这实际上也有效。我和我的一个朋友经过测试可以验证这个问题(见截图)。那相当容易。VerifyData
RSACryptoServiceProvider
例如,如果我要创建一个基于 .NET Framework 加密类的许可系统,那么对于使用该框架的系统上的每个 .NET 应用程序,都可以在系统范围内绕过它。此外,每个人都可以通过挂钩方法来记录和更改我调用的函数的输入。
现在我的问题是:既然这可能是一个大问题,我该怎么做呢?当然,恶意用户可以只编辑我的应用程序,但这不会像在系统范围内那样糟糕。我在考虑一些框架校验和验证,但由于 .NET 框架有很多不同的更新,这似乎是不可能的。
有什么解决方案或建议吗?微软是否以某种方式解决了这个问题?