【问题标题】:Encrypt file on client side在客户端加密文件
【发布时间】:2011-12-09 04:35:51
【问题描述】:

我将创建一个将在客户端计算机上运行的应用程序。该程序将允许客户使用该软件N次,然后客户能够再次使用该软件,他/她需要购买X次才能使用该软件。这就像购买许可证或令牌(我不知道它们是否相同,因为我的英语不是那么好)。

我正在考虑创建一个 .lic 或 .txt 或其他任何内容,它们将被加密,并且当使用新的 .lic 或 .txt 等更新时,它会更改客户端能够执行的次数使用该软件。

问题是我认为这种方法不是很可靠,因为即使加密,客户端也能以某种方式破解并理解这个文件。

有人可以帮我找出解决方案吗?

PS:该软件无法通过互联网验证,客户端必须能够离线使用该软件,如果不是,我将通过互联网验证该软件的使用,不会出现此问题。

【问题讨论】:

  • 您如何跟踪软件运行的次数?这似乎比破解加密许可证更容易被利用。
  • 无论您做什么,加密密钥都必须始终位于客户端系统的某个位置。没有办法完全确保这一点,您只能尝试让客户难以破坏您的设计。
  • 回答第一条评论:我仍然没有办法监控客户端使用软件的次数。我正在考虑通过 alicense 文件或类似的东西来做这件事。回答第二个问题:就像我在想的那样。我必须创建一个加密文件,每次客户使用该软件时都会更改该文件。我还有其他方法可以为用户制造更多障碍吗?
  • 这样的系统真的很容易被破解……你只需要保留一份原始许可证文件的副本,当你用完信用时把这个副本放回去
  • 你说得对。我没有想到这一点。有什么改进建议吗?

标签: c# security file encryption


【解决方案1】:

首先,我必须同意简单地说,这将不安全的评论。即使它们是正确的,开发人员也很容易解决问题,但仍然可能存在有效的需求/愿望来阻止其他 99% 的人口。这是 DRM 面临的同一场战斗,总是有 1% 的人愿意花时间来破译你在做什么并解决它。但是,让我们继续讨论如何实现这一目标......

第 1 步 - 您需要一个“计数器”来了解您的应用程序运行了多少次。不幸的是,这只会被用户混淆,因为您的应用程序必须能够读取此值。通常这种混淆是通过在注册表和文件系统中的多个位置隐藏值来实现的。有时您会发现这些信息是使用主机上可用的信息、bios、cpu 类型、hdd id 等“加密”的(实际上它被加密算法混淆了)。

归根结底,执行计数器的这种存储和混淆是您的“秘密武器”,唯一难以逆转的就是将您正在做的事情保密(因为大多数形式的混淆都依赖于保密) .因此,我在为您提供解决方案时并没有真正的价值,一旦发布到这里就不再是秘密了:)

第 2 步 - 让此计数器正常工作后,您需要向用户提供“许可”。这实际上是最简单的部分,PKI cryptography 可以很好地为您服务。您想要的是只有您可以控制的私钥,而您的客户端软件在某处硬编码了公钥。然后,您使用您的私钥来“digitally sign”客户端的许可证文件。当您的客户端加载许可证文件时,它会验证签名以确保此许可证文件由相关的私钥签名,理论上只有您可以访问此密钥,这意味着您授权了此许可证。

第 3 步 - 现在您需要提供一种方法来验证此计数器未超过许可使用次数。这应该是直截了当的。

问题与解决方案

  1. 对这种解决方案最明显的攻击是对代码进行逆向工程。您需要使用 .NET obfuscation 库或编写非托管代码来解决此问题。

  2. 下一个最有可能的攻击是使用调试器跳过此验证。那里有很多反调试文章。我找到的最完整的标题是“An Anti-Reverse Engineering Guide”。

  3. 应考虑的另一种攻击是修改您的可执行文件。签署你的可执行文件并验证它的签名,就像你对许可证一样,以防止代码被直接编辑。

  4. 您的执行计数器存储将是一个明显的目标,请确保将其存储在多个位置,如果其中任何一个被篡改,您可以采取适当的措施。

最后,所有这些都不足以阻止一个坚定的人成功地击败您的许可策略。现在接受这一点,根据您的普通用户的计算机能力水平以及收入损失与实施成本的关系,只实施您认为需要的量。换句话说,假设您实现了一些非常愚蠢和基本的东西,并期望 20% 的用户能够理解它。根据您的客户,您认为在您的 20% 的用户中,只有不到四分之一的用户实际上会绕过您的 DRM,而不是为许可证付费。因此,您预计将损失 5% 的可能收入,假设您每年赚 100 万,这意味着您损失了 5 万美元的收入。现在问问你自己,如果我花了 X 美元的时间让别人更难绕过它,它在什么时候会变成负回报?当然,在预计损失 50k 的情况下,您不会想花一年的时间在 DRM 上工作。

老实说,我认为大多数采用 DRM 的应用程序都可以用更少的工作量来完成。如果您的应用程序定价正确,人们会为此付费。对于那些将绕过您的 DRM 的人,他们可能无论如何都不会购买您的应用程序,因此您并没有真正失去任何东西。如果我在你的位置上,我会留出固定的时间来解决这个问题,(一周?)并且只做你在这个时间限制内可以做的事情。

【讨论】:

  • 解释得非常好。非常感谢您,您的回答可能会对我有很大帮助。如果我找到解决方案,我可能会发布它让别人破解它。
猜你喜欢
  • 2016-09-07
  • 2012-09-22
  • 1970-01-01
  • 2020-03-23
  • 2011-11-30
  • 1970-01-01
  • 2017-11-07
  • 1970-01-01
  • 2022-11-10
相关资源
最近更新 更多