背景:我部署了一个基于第三方许可证系统的激活系统,包括服务器、数据库和电子商务集成。我还单独编写了一个使用RSA密钥的C#激活系统,但从未部署过。
产品激活通常意味着软件必须在给定的机器上激活。我认为这就是你的意思。如果你只想要两个意思为“演示”和“已购买”的字符串,那么它们将在几小时内被解密并分发(假设你的产品有价值)。这没有任何意义。
所以,假设你想要“激活”,那么当用户购买你的软件时,需要执行以下过程:
1. 订单履行软件告诉服务器生成“购买密钥”并发送给用户
2. 用户将“购买密钥”输入到软件中
3. 软件将购买密钥和唯一的机器ID发送到服务器。
4. 服务器将购买密钥和机器ID组合成一个字符串,并使用其证书对其进行签名,然后将其返回给用户。
5. 软件使用服务器的公钥检查签名是否有效。
6. 软件可以在许多地方检查:在许多地方加载sig,在其他地方检查它。
在生成购买密钥时,服务器可以存储不仅购买了什么产品,还购买了什么级别的产品。您还可以拥有“免费”产品,这些产品有时间限制,因此用户可以在30天内尝试软件的完整版本。
您正在使用C#,因此请确保使用dotfuscator或等效工具混淆二进制文件。但是,即使这样,您也无法对抗决心的黑客。我认为您的目标是强制非付费用户成为黑客,或者冒着使用破解版本的风险:孩子们不在意,公司可能会在意。您的情况可能会有所不同。
进行检查的代码需要在需要保护的每个程序集中,否则攻击者可以轻松地通过替换执行检查的程序集来移除保护。如果必须,可以将代码复制并粘贴。
或者只需购买某些东西。
另一个选择是让服务器预先生成“购买密钥”并将其提供给订单履行服务,但是这样你就无法将密钥与客户详细信息关联(至少在他们注册之前无法关联)。最好在购买完成后让电子商务服务器访问您的服务器,并将其发送出去。
困难的部分不是激活密钥的生成,而是服务器、数据库的创建以及与电子商务软件的集成,最重要的是人员问题:您是否允许每个购买密钥进行无限次安装?只能安装1次吗?如果只能安装1次,则必须拥有客户支持和一种允许用户在新机器上安装它的方法。这只是一个问题。各种有趣的事情。