我需要一些如何创建激活算法的想法。例如我有演示证书。假设应用程序在演示模式下运行。当提供完整版证书时,应用程序以完整模式运行。甚至有可能吗?创建这个系统的好方法是什么?
一个简单的事情是我在想只有 2 个加密字符串,现在当使用演示公钥证书成功解密时,应用程序将以演示模式运行等等。
编辑:使用 C# 和 Windows 7
我需要一些如何创建激活算法的想法。例如我有演示证书。假设应用程序在演示模式下运行。当提供完整版证书时,应用程序以完整模式运行。甚至有可能吗?创建这个系统的好方法是什么?
一个简单的事情是我在想只有 2 个加密字符串,现在当使用演示公钥证书成功解密时,应用程序将以演示模式运行等等。
编辑:使用 C# 和 Windows 7
您可以执行以下操作:
正如 Overbose 提到的——你不能阻止逆向工程。一般来说,有人可以获取功能并将其放入他/她自己的应用程序中,从而消除任何可能的激活算法。因此,您只能假设(或制造)这很难不值得付出努力(这与密码学相同-当您使破坏消息的成本大于获得它的利润时,您可以说它是安全可靠)。
所以你可以:
如前所述 - 这一切都不能安全地切断身份验证部分。但什么都不是,这可能会让饼干更难。
背景:我已经部署了一个建立在第三方许可系统之上的基于激活的系统,即服务器、数据库、电子商务集成。我还使用 RSA 密钥单独编写了一个 C# 激活系统,但从未部署它。
产品激活通常意味着必须在给定机器上激活软件。我想这就是你的意思。如果您只想拥有两个表示“演示”和“购买”的字符串,那么它们将在数小时内被解密和分发(假设您的产品很有价值)。没有意义。
所以。假设您想要“激活”,那么当用户购买您的软件时,需要发生以下过程:
在生成购买密钥时,服务器不仅可以存储购买的产品,还可以存储产品的级别。您还可以拥有有时间限制的“免费”产品,因此用户可以试用该软件的完整版 30 天。
您使用的是 C#,因此请确保使用 dotfuscator 或等效工具对二进制文件进行模糊处理。但是,即使这样,您也无法对抗坚定的黑客。我认为,您的目标是迫使非付费用户自己成为黑客,或者不得不冒险使用破解版:孩子们不会在意,公司可能会。YMMV。
执行检查的代码需要在每个需要保护的程序集中,否则攻击者可以通过替换执行检查的程序集来轻松删除保护。如果需要,请剪切并粘贴代码。
或者只是买点东西。
另一种选择是让服务器预先生成“购买密钥”并将它们提供给订单履行服务,但是您无法将密钥链接到客户详细信息(至少在他们注册之前)。购买后最好让电子商务服务器访问您的服务器,然后让您的服务器将其发送出去。
困难的部分不是激活密钥的生成,而是服务器、数据库的创建以及与电子商务软件的集成,最重要的是人为问题:您是否允许每个购买密钥无限制地安装?只有1个?如果只有 1 个,那么您必须拥有客户支持和一种允许用户将其安装在新机器上的方法。这只是一个问题。各种好玩。
一个简单的事情是我在想只有 2 个加密字符串,现在当使用演示公钥证书成功解密时,应用程序将以演示模式运行等等。
可能是一个简单的解决方案。但是这样你就不会阻止某人对你的二进制文件进行逆向工程并使执行跳转到正确的行。每个人都有你的程序,有一个完整的版本,所以只需要找到如何打破这个简单的机制。
也许更好的解决方案是加密使用完整应用程序版本所需的部分二进制文件,而不是简单的字符串。这种执行应用程序完整版本的方式需要解密这些二进制文件才能执行它们。
请考虑到即使这样的解决方案也不够。还有其他问题:
如何解决这些问题?没有简单的解决方案。大多数具有复杂保护系统的更重要的商业软件在发布后仅几个小时或几天就被破坏了。
产品激活不是非对称密码学可以解决的问题。非对称密码学是关于保守对手的秘密。问题是您无法保留存储在您的对手机器上的秘密,这将是安全的,尽管默默无闻。
做产品激活的正确方法。是生成存储在服务器上的数据库中的加密随机数。您在客户购买产品时将此 Nonce 提供给客户,然后他们在线激活它。此激活过程可以下载新材料,这将使攻击者更难修改他们必须“解锁”新功能的副本。
但即使使用要求您在使用产品时在线的 DRM 系统。就像在“From Dust”这样的新游戏中发现的那样,它们在发布后的几个小时内仍然被破坏。
公钥加密的好处之一是您可以验证给定数据的来源。因此,如果您将公钥存储在您的程序集中,然后签署给定的数据(例如授权码或序列号),您的程序集可以可验证地确定您是创建该数据的人 - 而不是黑客。实际数据本身并不是那么重要——它可以是一个简单的通过/失败值。
这实际上用 .NET 很容易做到。您可以使用 x509 证书或像我们在DeployLX Licensing the RSACryptoServiceProvider中使用的那样。
我强烈建议购买商业产品(尽管 DeployLX 非常出色,但并不重要),并且出于 2 个原因自己不要这样做
保护软件的第二阶段是确保它以您创建它的方式运行 - 并且没有被黑客修改。if( licensed )
如果黑客可以检查到,你使用什么加密真的没关系if( true )
。
您可以使用AsProtect解决此问题。这是一个很好的起点。