使用公钥证书激活产品

hs2*_*s2d 9 c# security activation certificate

我需要一些想法如何创建激活算法.例如,我有演示证书.提供应用程序以演示模式运行.提供完整版证书后,应用程序将以完整模式运行.它是否可能,如何创建这个系统是一个好方法?

一个简单的是我认为只有2个加密的字符串,现在当解密是使用演示公钥证书时,应用程序将在演示模式等运行.

编辑:使用C#和Windows 7

kga*_*dek 8

你可以这样做:

  1. 生成公钥/私钥对
  2. 作为私钥的所有者,您可以签署这些"激活证书"(从现在起称为AC)
  3. 在您的应用中,使用公钥,您可以检查标志是否正确

正如Overbose所提到的 - 你无法阻止逆向工程.一般来说,有人可以将功​​能放在他/她自己的应用程序中,从而消除任何可能的激活算法.所以你只能假设(或者说)这很难以不值得努力(这与加密相同 - 当你把破坏信息的成本提高到获得它的利润时你可以说它是很安全).

所以你可以:

  1. 进行可执行的自我验证(由您签名,基于硬编码的公钥进行自检(有一点:您必须在自检时跳过此值)).
  2. 做一些技巧与指针(指向激活功能,进入到它基于另一个指针有价值的东西第7位和变化值;在一些奇怪的地方更改硬编码值是基于其他地方的一些位的出现代码;一般来说 - 通过使用十六进制编辑器简单地更改可执行文件中的位来使其更难破解
  3. 尝试制作一些协议,您的服务器将使用该协议来询问有关应用程序的问题("给我自己293字节的值")并检查答案.
  4. 使用想象力并想到一些奇怪的自我检查方法之前没人用过:)

如上所述 - 这一切都不能确保关闭认证部分.但没有任何东西,这可能会让破解者更难.


jam*_*mie 5

背景:我已经部署了基于第三方许可证系统构建的基于激活的系统,即服务器,数据库,电子商务集成.我还使用RSA密钥单独编写了一个C#激活系统,但从未部署过它.

产品激活通常意味着必须在给定的机器上激活软件.我认为这就是你的意思.如果您想要做的只有两个字符串,意思是"演示"和"购买",那么它们将在几小时内解密和分发(假设您的产品很有价值).没有意义.

所以.假设您想要"激活",那么当用户购买您的软件时,需要执行以下过程:

  1. 订单履行软件告诉服务器生成"购买密钥"并发送给用户
  2. 用户在软件中输入"购买密钥"
  3. 软件将购买密钥和唯一的机器ID发送到服务器.
  4. 服务器将购买密钥和计算机ID组合成一个字符串,并使用其证书对其进行签名并将其返回给用户.
  5. 软件使用服务器公钥检查签名是否有效.
  6. 软件可以检查很多地方:在很多地方加载信号,在其他地方检查信号.

生成购买密钥时,服务器不仅可以存储购买的产品,还可以存储什么级别的产品.您还可以拥有时间有限的"免费"产品,因此用户可以在30天内试用该软件的完整版本.

您正在使用C#,因此请确保使用dotfuscator或等效的方法对二进制文件进行模糊处理.然而,即便如此,你也无法对付坚定的黑客.我认为,你的目标是迫使非付费用户自己成为黑客,或者不得不冒险使用破解版本:孩子们不会关心,公司可能.因人而异.

执行检查的代码需要位于需要保护的每个程序集中,否则攻击者可以通过替换执行检查的程序集来轻松删除保护.如果必须,剪切并粘贴代码.

或者只是买点东西.

另一个选择是让服务器预先生成"购买密钥"并将其提供给订单履行服务,但是您无法将密钥链接到客户详细信息(至少在他们注册之前).最好让电子商务服务器在购买时点击您的服务器,并让您的服务器将其发送出去.

困难的部分不是生成激活密钥,因为它是服务器,数据库的创建,以及与电子商务软件的集成,最重要的是人为问题:您是否允许每个购买密钥无限制安装?只有1个?如果只有1,那么您必须拥有客户支持并允许用户在新机器上安装它.这只是一个问题.各种乐趣.