许可C#应用程序

时间:2016-07-07 13:24:17

标签: c# licensing

我想知道如何设置我的应用程序的到期日期,但是客户(客户实际上并不存在,但让他们说有一天他们会存在)的方式需要粘贴一个哈希密钥(我的日期)到他们的产品实例中。现在我正在解决它,如下所述,但我认为这不是一个好主意,让我解释一下:

我使用日期时间选择器创建了一个小应用程序,我选择了一个日期,直到我的应用程序处于活动状态,例如7.7.2016,并将其作为刻度存储到注册表中,并在每次启动时从注册表中读取该刻度应用。它还不错,但问题是我必须在客户电脑上运行应用程序,通过选择日期来写入他们的注册表并且这不好,因为如果我忘记删除我的小应用程序客户可以根据需要设定日期。另一个解决方案是在我的本地计算机上生成一个日期,从注册表副本中读取一个刻度值,并远程输入密钥(来自注册表的刻度值)或其他任何给客户的电脑。但这不是一个好的解决方案,我对此并不满意,因为客户可能会发现我在哪里存储刻度并将其复制到另一台机器和另一台机器上......

我想知道我是否可以做以下事情:

在我的开发机器上,我将运行用于激活的软件(密钥生成器)然后我可以选择一个日期,直到我的软件应该有效并获得处理器或硬盘驱动器的ID并将它们组合在一起以创建哈希[ID + DATE](因此它对于每台机器都是唯一的)并将其存储到数据库或注册表中,无论如何,并且在我的应用程序中我可以接下来打开"解包"哈希只获取日期部分,所以每次客户运行应用程序时我都可以做以下事情:

if(DateTime.Now > "HASHED date part")
    Message : application has expired!

我可以将日期+ ID放在一起并对其进行散列处理或以某种方式保护它,以便用户无法读取或修改它,之后我会删除日期部分并检查应用程序是否仍然有效吗?

3 个答案:

答案 0 :(得分:1)

不,你不能。哈希的整个 point 具体,它是单向的。它是一个设计的算法,可以防止您确定生成哈希的原始数据。

如果您希望能够从密码数据重新创建原始数据,则需要加密数据。

还值得注意的是,有很多方法可以阻止用户阻止用户运行程序;许可软件很难。

答案 1 :(得分:1)

此外,我是否可以特别建议(根据已经销售商业上成功的产品的经验,现在,超过20年......),您的许可控制方案应该,首先,简单。

我特别(!)建议您尝试检查或验证CPU-id,以及许可机器的任何其他物理特性。事实证明,我所见过的每一件工具都证明是不可靠的。此外,我的客户一再告诉我,他们很欣赏软件 易于从一台机器移动到另一台机器的事实。

(是的,我们确实扫描了几个目录,只是为了“减少日期”......)

我们信任他们,猜猜他们做了什么?嗯......他们购买它。如果你对某人诚实并给他们一件真正值得你收费的产品,那么人们也很乐意对你说实话。 (而且,不要失去那些没有的人......这些人不是你的顾客,而且他们永远都不会。对于那些 付钱给你。)

在我们产品的最新版本中,许可证信息存储在Windows注册表中,并在产品安装时使用与安装程序打包并调用的DLL文件插入。它只是由一个模糊的十六进制字符串中的序列号,产品特征向量和到期日期组成。该号码还用于隐藏“许可到”公司名称,该名称在软件启动时显示在初始屏幕上。安装程序运行时需要管理员权限,原因有很多,包括此原因。要更改许可证信息,您必须重新安装。

您打算向政府出售的任何软件(非常有利可图的细分市场), 必须必须具有许可控制功能,并且不得有“免费演示”任何形式的选择,因为政府通常不允许公共资金用于“免费”(以任何方式)获得的任何东西。

最后一条评论:我们不提供任何形式的“免费演示”。如果您想“试用”我们的产品,您必须购买有时间限制的副本。您可以在限期内将全价应用于非定时副本。有些人只是购买(更便宜)有时间限制的许可证,使用我们的产品来解决他们的问题,他们的问题(因为它发生)再也不会发生了,他们我很开心,所以我们也是。我们收入的很大一部分就是这样。

对我而言,重点是:“照顾好您的客户,他们会照顾您。”如果您的许可方案“繁琐且有气味”...... ; - ) ......好吧,这是人们在决定是否购买商品时非常认真考虑的事情之一。你可以因为你的计划在a * s中感到痛苦而失去销售。

答案 2 :(得分:0)

您可以托管许可服务器,并为每个用户提供一个令牌,以便在他们启动您的应用程序时用于验证。然后,您的所有日期时间都可以在您的服务器上处理,并且您的用户偷偷摸摸的风险要小得多。这意味着运行你的应用程序的每个人都需要连接到网络,这对你来说可能是不可接受的。