存储软件保护目的的保护试用信息的位置

时间:2010-12-23 18:36:56

标签: c# store protection trial

它可能与其他问题重复,但我发誓我搜索了很多并在StackOverflow.com上搜索了很多,我找不到我的问题的答案:

在C#.Net应用程序中,何处存储保护试用信息,例如到期日期,使用次数?

据我所知,各种软件保护策略都可以被一个狡猾的黑客破解(因为他们几乎总能绕过到期检查步骤)。但我现在要做的只是以合理的方式保护它,使“普通”/“高级”用户无法搞砸它。

好的,为了证明我在StackOverflow.com上搜索过大量搜索和搜索,我列出了我得到的所有策略:

1。注册表项

首先,一些用户可能无法访问甚至读取Registry表。

其次,如果我们将保护试用信息放在注册表项中,则用户可以通过比较软件安装之前和之后的差异来始终找到它。他们可以简单地改变它。

好的,您可能会说我们应该加密保护试用信息,是的,我们可以这样做。但是如果用户在安装之前只更改了系统日期呢?

好的,你可能会说我们也应该把最后使用的日期,如果出现问题,最后使用的日期可以作为保护指南。但是,如果用户只是卸载软件并删除与该软件相关的所有注册表项,然后重新安装软件,该怎么办?

我不知道如何处理这件事。请帮忙。

纯文件

首先,有一些地方可以放置普通文件:

  • 2.a)软件安装路径下的简单XML文件
  • 2.b)配置文件

同样,用户可以卸载软件并删除这些普通文件,然后重新安装软件。

- 软件本身

如果我们在软件本身中提供保护试用信息(到期日期,我们不能将使用次数),它仍然容易受到我上面提到的情况的影响。此外,这样做甚至都不酷。

- 试用产品密钥

它的工作方式类似于许可流程,也就是说,我们将试用信息放入RSA签名的字符串中。但是,要求用户尝试使用该软件需要太多步骤(他们可能会失去耐心):

  • 4.a)用户下载软件;
  • 4.b)用户通过提供用户名(或电子邮件)或硬件信息发送电子邮件以请求试用产品密钥;
  • 4.c)服务器接收请求,RSA签名并发回给用户;
  • 4.d)用户现在可以在(有效期和使用次数)的条件下使用它。

现在,服务器记录了用户的用户名或硬件信息,因此用户将被拒绝请求第二次审判。收集硬件信息是否合法?

总之,用户必须再做一个额外的步骤(请求试用产品密钥)只是为了尝试使用该软件,这并不酷(将自己视为用户)。

注意:此问题与许可无关,而是与存储TRIAL信息的位置有关。试用期结束后,用户应该要求许可证(CD-Key / Product-Key)。我将使用RSA签名(绑定到用户硬件)

P.S。:我的软件将针对中国市场,其软件市场与美国不同。在中国大多数人,他们只购买硬件,他们通常不会购买Micosoft Windows / Office等软件(他们只使用盗版)。但是,一些针对特定领域的专业软件,研究人员仍然愿意购买它,如果没有破解版本或破解版本很难安装。

5 个答案:

答案 0 :(得分:13)

选项1(普通注册表项)或2(普通文件)都可以。这是我的理由:

  • 标准特权用户确实具有注册表的读取权限。如果他们无法读取您的密钥,则其他错误。标准特权用户没有注册表的写权限,但这并不重要,因为他们也没有首先安装软件的权限。换句话说,用户将有权在安装时创建注册表项,或者无论如何都需要帮助安装。因此,您为注册表项引发的基本技术问题并不是真正的因素。
  • 只是不要担心那些执行诸如缩短系统时钟或手动破解注册表以破坏密钥的用户。让我再说一遍:只是不要担心有意识地决定改变他们的系统以超越试用限制的用户 - 并且不要搞错,将系统时钟设置回来或编辑注册表是重大修改。您不应该担心这些用户的原因是他们的潜在收入正好是0美元。一个愿意采取这种有意识的盗版软件选择的用户不会放弃并决定支付你的产品,如果它不起作用。如果他们无法免费获得您的软件,他们要么与竞争对手一起去,要么不做。你是为了赚钱 - 你不想花时间和资源试图抓住你无法赢得的销售或者将用户送到竞争对手那里。因此,您为任一选项提出的基本安全问题都不是一个因素。

答案 1 :(得分:1)

您将找不到一个完美的解决方案。您投入的努力应该与您所生产的产品的价格成比例。如果它值得很多,那就买一个专业的解决方案。如果没有,则使用您找到的任何方法组合。使用注册表,请求在线试用密钥,检查用户是否操作系统时间等等。

答案 2 :(得分:1)

我建议采取稍微不同的机制。

提供您的软件的“精简”版本。没有试用,只是功能非常有限。

如果他们想要试用“专业”版本,请让他们获得试用密钥。这应该以某种格式加密,存储在任何你想要的地方。当应用程序启动时,请测试此试用密钥是否存在。如果它在那里然后解密它。密钥内部应该是软件的到期日期。

测试日期并采取相应行动。如果它不存在则只运行精简版。

要获得试用密钥,您可以让他们在您的应用中的框中输入您想要的电子邮件地址和其他信息。要求机器连接到互联网这个有限的部分是不合理的。甚至MS Office也要求您短暂连接到互联网以验证密钥。让应用程序通过密钥请求与您的服务器联系。通过电子邮件将密钥发回给他们。

对于奖励积分,将试用键与机器本身的某些指标联系起来。即使它只是盒子的名称。这些变化很少,无论如何都是试验。

如果您真的不能强迫他们连接到互联网以获取密钥,那么您可以采用稍微不同的路线。让应用程序生成一个请求(包括机器名称或其他内容)。让用户使用生成的请求ID给您打电话,或让他们将其插入网站。然后通过电子邮件向他们发送该机器的密钥。

所有这些都会阻止共享密钥。如果钥匙位置被顶住,则有后退,并防止钥匙被移动到其他机器。它还为您提供了一种完全断开连接的方式。即使他们从您的应用程序中删除公共加密密钥以解密软件许可证密钥,他们也不会拥有您的私有加密密钥来构建新的许可证密钥文件。

现在,关键管理只是你正在战斗的邪恶的一个方面。

下一步是您需要对应用进行模糊处理,使其无法简单地反编译并绕过您的密钥检查。这比传递密钥文件更常见。

您甚至可能在应用中使用多种方法以不同方式测试密钥。但这是一个不同的问题。


作为那些足以做到这一点的报复的最后奖励:使用关键的基因软件播种各种海盗板,这些软件可以为那些试图扯掉你的人的机器做有趣的事情。你可以在这里获得真正的创意。

或者,就像乔尔说的那样,你可以根本不用担心它们。毕竟,如果他们不顾一切地找到你软件的破解版本,他们就不会为此付费而且你真的没有丢失任何东西。

答案 3 :(得分:0)

您是否可以要求使用试用版的用户连接到互联网?如果是这样,只需让试用版在启动期间联系服务器,您就可以检查各种事情。您不必担心在用户计算机上存储内容或者篡改数据或系统时间。

答案 4 :(得分:0)

我知道这是一个旧线程,但我偶然发现它,其他人可能会觉得这很有用。

这些天的有效选项可能是您的应用程序在安装时查询休息服务以生成试用版或付费许可证。每次用户打开应用程序时,应用程序都会向其余服务查询链接到该特定软件副本的许可证信息。