16

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

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

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

好的,为了证明我在 StackOverflow.com 上进行了很多搜索和搜索,我列出了我得到的所有可能的策略:

1.注册表项

首先,一些用户可能甚至无法读取注册表。

其次,如果我们将Protection Trial Info放在一个注册表项中,用户可以通过比较软件安装前后的差异,随时找到它在哪里。他们可以简单地改变它。

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

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

我不知道如何处理这个问题。请帮忙。

一个普通文件

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

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

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

- 软件本身

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

- 试用产品密钥

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

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

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

总之,用户必须多做一个步骤(请求试用产品密钥)才能尝试使用该软件,这并不酷(认为自己是用户)。

注意:这个问题不是关于许可,而是关于在哪里存储试用信息。试用期结束后,用户应申请许可证(CD-Key/Product-Key)。我将使用 RSA 签名(绑定到用户硬件)

PS:我的软件将针对中国市场,其软件市场与美国不同。大多数中国人只买硬件,一般不买微软Windows/Office之类的软件(他们只用盗版)。但是,一些针对特定领域的专业软件,如果没有破解版或者破解版很难安装,研究人员还是愿意购买的。

4

5 回答 5

13

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

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

你不会找到一个完美的解决方案。您为此付出的努力应该与您生产的产品的价格成正比。如果物超所值,请购买专业的解决方案。如果没有,请使用您找到的任何方法组合。使用注册表,请求在线试用密钥,检查用户是否操纵系统时间等等。

于 2010-12-23T18:46:03.367 回答
1

我建议采取稍微不同的策略。

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

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

测试日期并采取相应措施。如果它不存在,那么只需作为精简版运行。

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

对于奖励积分,请将试用密钥与机器本身的某些指标联系起来。哪怕只是盒子的名字。这些变化很少,无论如何这是一个试验。

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

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

现在,密钥管理只是你正在对抗的邪恶的一个方面。

下一步是你需要对你的应用程序进行模糊处理,使他们不能简单地反编译它并绕过你的密钥检查。这比传递密钥文件更常见。

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


对于那些有足够报复心的人来说,最后的奖励是:用关键生成软件为各种盗版板播种,这些软件会对试图敲诈你的人的机器做一些有趣的事情。你可以在这里获得真正的创意。

或者,就像乔尔说的,你可以根本不用担心他们。毕竟,如果他们不遗余力地寻找您软件的破解版,他们无论如何都不会为此付费,而且您真的没有丢失任何东西。

于 2010-12-23T19:56:14.980 回答
0

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

于 2010-12-23T19:33:29.927 回答
0

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

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

于 2018-05-28T12:41:37.373 回答