我最近一直在阅读一些有关加密的内容,并且对保护许可证文件不被篡改感兴趣。现在这可能不是最好的方法,在这种情况下,我愿意接受建议。但我想保护它的一种方法是简单地加密它。
但是,如果我要使用加密,我需要使用对称密钥,但这提出了一个问题。如果我在源代码中存储一个密钥,使用反射器之类的工具,真的值得吗?获取初始化向量、盐、密钥等似乎是一项相当微不足道的任务,从而破解加密。有没有办法保护源中的密钥?或者这是完全错误的方法?
我最近一直在阅读一些有关加密的内容,并且对保护许可证文件不被篡改感兴趣。现在这可能不是最好的方法,在这种情况下,我愿意接受建议。但我想保护它的一种方法是简单地加密它。
但是,如果我要使用加密,我需要使用对称密钥,但这提出了一个问题。如果我在源代码中存储一个密钥,使用反射器之类的工具,真的值得吗?获取初始化向量、盐、密钥等似乎是一项相当微不足道的任务,从而破解加密。有没有办法保护源中的密钥?或者这是完全错误的方法?
如果要防止篡改,则需要签名/散列,而不是加密。类似的理论 - 但这意味着您可以使用应用程序中的公钥验证文件,而不需要您保留在服务器上的私钥(并用于颁发许可证)。
搜索加密哈希/签名。
系统客户端上的任何东西都可能受到损害。
如果你加密你的文件,你还必须以某种方式将解密密钥放在你的程序中。任何拥有十六进制编辑器的人都可以单步执行您的代码以找到此密钥,然后解密您的许可证文件并为您的系统创建密钥。
互联网激活将是一个很好的方法,但我会看看你是否可以找到第三方为你做这件事,因为他们以前会走这条路。
也就是说,通过一些 AES 256 加密运行您的许可证文件不会受到伤害:)。
如果您在谈论 MS/.NET 环境,我建议您使用DPAPI。它是一个 API,用于存储受密码保护的数据。然后你可以问我“但是我有同样的问题”,答案是否定的,因为在这种情况下你使用用户密码来保护你的数据。因此,要访问您的数据,您必须做的是在特定凭据下运行您的应用程序。在 MS 环境下,它是最好的解决方案。
从文档中:
DPAPI 专注于为用户提供数据保护。由于它需要密码来提供保护,因此 DPAPI 以某种方式使用用户的登录密码是合乎逻辑的步骤。DPAPI 实际上使用用户的登录凭据。在用户使用密码登录的典型系统中,登录凭证只是用户密码的哈希值。然而,在用户使用智能卡登录的系统中,凭证会有所不同。为简单起见,我们将使用术语用户密码、登录密码或仅密码来指代此凭据。
您正在尝试的是 DRM;在当前的 PC 硬件上没有 100% 的方法可以做到这一点。您可以采取许多措施来混淆程序的某些部分。这是你想要混淆多少和你想让付费客户经历多少障碍之间的权衡。