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

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

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

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

1.注册表项

首先,某些用户可能无权读取注册表。

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

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

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

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

一个普通文件

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

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

同样,用户只需卸载软件并删除这些纯文件,然后重新安装软件即可。

- 软件本身

如果我们把保护试用信息(过期日期,我们不能把使用次数)放在软件本身中,它仍然容易出现我上面提到的情况。此外,这样做并不酷。

- 试用产品密钥

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

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

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

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

笔记:这个问题与许可无关,而是关于在哪里存储试用信息。试用期满后,用户应索取许可证(CD 密钥/产品密钥)。我将使用 RSA 签名(绑定到用户硬件)

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

有帮助吗?

解决方案

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

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

其他提示

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

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

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

如果他们想试用“专业”版本,请要求他们获取试用密钥。这应该以某种格式加密,将其存储在您想要的任何地方。当应用程序启动时,测试此试用密钥是否存在。如果存在,则解密它。密钥内应包含软件的到期日期。

测试日期并采取相应行动。如果它不存在,则仅作为精简版本运行。

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

为了获得奖励积分,请将试用密钥与机器本身的某些指标联系起来。即使只是盒子的名称。这些很少改变,而且无论如何这都是一次尝试。

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

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

现在,密钥管理只是您所对抗的邪恶的一方面。

下一步是您需要以这样的方式混淆您的应用程序,使他们无法简单地反编译它并绕过您的密钥检查。这比传递密钥文件更常见。

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


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

或者,就像乔尔说的那样,你可以只是不担心他们。毕竟,如果他们不遗余力地寻找您软件的破解版本,无论如何他们都不会付费,而且您实际上并没有失去任何东西。

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top