C# 用自制密钥算法保护WPF应用

C# 用自制密钥算法保护WPF应用,c#,wpf,key,C#,Wpf,Key,我需要找到一种方法来锁定软件产品,这样只有购买了它的客户才能使用它。我正在考虑实现我自己的“CD键”功能 工作原理: 我有一个单独的程序,只用于生成密钥 该程序使用与所售软件相同的算法。钥匙随程序一起提供(比如说手册),并一次性输入程序。之后,用户无需再次输入即可自由使用(直到重新安装) 这看起来很简单,对我来说是可行的,但唯一的问题是密钥可以在其他设备上重复使用,所以我需要实现一种方法,当程序卸载时,密钥在线标记为已使用和未使用。我会试着问这个问题,而不是在这里-但我建议您查看(非)-商业产

我需要找到一种方法来锁定软件产品,这样只有购买了它的客户才能使用它。我正在考虑实现我自己的“CD键”功能


工作原理: 我有一个单独的程序,只用于生成密钥

该程序使用与所售软件相同的算法。钥匙随程序一起提供(比如说手册),并一次性输入程序。之后,用户无需再次输入即可自由使用(直到重新安装)


这看起来很简单,对我来说是可行的,但唯一的问题是密钥可以在其他设备上重复使用,所以我需要实现一种方法,当程序卸载时,密钥在线标记为已使用和未使用。

我会试着问这个问题,而不是在这里-但我建议您查看(非)-商业产品/API帮助您摆脱困境(例如),而不是重新发明车轮。由于它不是你的核心业务,你可能会有一个比其他人可能提供给你的更差的最优解决方案(因此是脆弱的和泄漏的解决方案)

您可以查看的一些产品:

免费

  • QLicense(关于CodeProject):
按需付费使用

  • SSWare的加密许可:
  • 索拉科:


PS:如果你想自己开始实现一个许可解决方案,请不要在部署的代码和生成器中实现相同的算法——这太容易进行反向工程了。试着使用一些支持公钥/私钥机制的数学公式,例如,或者像我说的那样,试着依靠这个领域的专业库/api。

我会试着问这个问题,而不是在这里——但我建议你研究(非)商业产品/api来帮助你(例如)而不是重新发明轮子。由于它不是你的核心业务,你可能会有一个比其他人可能提供给你的更差的最优解决方案(因此是脆弱的和泄漏的解决方案)

您可以查看的一些产品:

免费

  • QLicense(关于CodeProject):
按需付费使用

  • SSWare的加密许可:
  • 索拉科:


PS:如果你想自己开始实现一个许可解决方案,请不要在部署的代码和生成器中实现相同的算法——这太容易进行反向工程了。尝试使用一些支持公钥/私钥机制的数学公式,例如,或者如我所说,尝试依赖于该领域的专业库/api。

问题:

由于您的代码可以进行反向工程,所以没有真正的方法为您的密钥存储提供安全的解决方案。所有硬编码到应用程序或单独文件中的变量,在这些文件中使用相同的应用程序进行加密,都是不安全的。您需要将它们视为公开可用的

第二,即使您将再次提供服务器密钥身份验证方法。您的代码可以进行反向工程。黑客将删除认证部分,并将重新构建您的应用程序,DRM免费

第三,即使您的整个代码都将被加密,仍然有方法对其进行解码并删除身份验证(查看denuvo最新的失败)

如果您将代码加密和服务器端密钥验证连接起来,这取决于参与黑客攻击的人数,那么您可以将他们延迟有限的时间

解决方案:


有100%安全的方法来防止你的应用程序被黑客攻击,你需要使它100%基于网络。如果您希望使用C作为服务器引擎,有类似ASP.Net的解决方案。

问题:

由于您的代码可以进行反向工程,所以没有真正的方法为您的密钥存储提供安全的解决方案。所有硬编码到应用程序或单独文件中的变量,在这些文件中使用相同的应用程序进行加密,都是不安全的。您需要将它们视为公开可用的

第二,即使您将再次提供服务器密钥身份验证方法。您的代码可以进行反向工程。黑客将删除认证部分,并将重新构建您的应用程序,DRM免费

第三,即使您的整个代码都将被加密,仍然有方法对其进行解码并删除身份验证(查看denuvo最新的失败)

如果您将代码加密和服务器端密钥验证连接起来,这取决于参与黑客攻击的人数,那么您可以将他们延迟有限的时间

解决方案:


有100%安全的方法来防止你的应用程序被黑客攻击,你需要使它100%基于网络。如果您希望使用C作为服务器引擎,有类似ASP.Net的解决方案。

@someone1可能会检查QLicense产品,也许。。。至于在线注册你的“密钥”——一旦一个密钥被发布,我会说把它锁定给一个特定的用户——并建立一个用户可以注册他的软件的Web服务?但正如我所说,请留意API链接(以及谷歌的其他链接),看看它们是否提供了更防水的解决方案。@someone1可能会检查QLicense产品,也许。。。至于在线注册你的“密钥”——一旦一个密钥被发布,我会说把它锁定给一个特定的用户——并建立一个用户可以注册他的软件的Web服务?但正如我所说的,留意API链接(和谷歌其他链接),看看它们是否提供了更防水的解决方案。非常正确!如果你不需要走桌面路线,那么最好让它有点网络化。或者是一个瘦客户端,它仍然需要连接到服务器以获取服务器上的结果、数据和计算,因此您的业务逻辑并不是分布在每台机器上。这是真的!如果你不需要走桌面路线,那么最好让它有点网络化。或者是一个