繁体   English   中英

在客户端加密文件

[英]Encrypt file on client side

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

我正在考虑创建一个.lic或.txt或其他任何要加密的文件,并用新的.lic或.txt等进行更新时,它将更改客户端可以使用该软件的次数。 。

事实是,我认为该方法不是非常可靠,因为即使加密了,客户端也可能能够破解并理解该文件。

有人可以帮我解决这个问题吗?

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

首先,我必须同意简单地说,这将是不安全的评论。 即使它们是正确的,对于开发人员来说也很容易解决,但仍然有防止/阻止其他99%人口的有效需求。 这就是DRM面临的同样的战斗,总是有1%的人愿意花时间来解读您正在做的事情并解决它。 但是,让我们继续前进,如何实现这一目标...

步骤1-您需要一个“计数器”来知道您的应用程序已运行了多少次。 不幸的是,这只会使用户感到困惑,因为您的应用程序必须能够读取该值。 通常,通过在注册表和文件系统中的多个位置隐藏值来实现这种混淆。 有时,您会发现此信息是使用主机上可用的信息,BIOS,CPU类型,HDD ID等“加密的”(实际上是被加密算法模糊处理的)。

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

第2步 -完成此计数器的工作后,您需要向用户提供“许可证”。 这实际上是最简单的部分, PKI加密可以很好地为您提供帮助。 您想要的是仅由您控制的私钥,而客户端软件的公钥则在某处进行了硬编码。 然后,您可以使用私钥对客户端的许可证文件进行“ 数字签名 ”。 当您的客户端加载许可证文件时,它将验证签名以确保此许可证文件已由相关的私钥签名,从理论上讲,由于只有您可以访问此密钥,因此意味着您已授权此许可证。

步骤3-现在,您需要提供一种方法来验证此计数器未超过许可的使用次数。 这应该很简单。

问题与解决方案

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

  2. 下一个最可能的攻击是使用调试器跳过此验证。 那里有很多反调试文章。 我找到的最完整的标题为“ 反逆向工程指南 ”。

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

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

最后 ,所有这些都不足以阻止坚定的个人成功击败您的许可策略。 立即接受,并根据普通用户的计算机能力水平以及收入损失与实施成本之间的关系,仅执行您认为需要的程度。 换句话说,您实施了一些非常愚蠢且基本的操作,并期望20%的用户可以解决。 根据您的客户,您认为在20%的用户中,不到四分之一的用户实际上会绕过您的DRM,而不是支付许可证费用。 因此,您希望损失5%的可能收入,例如您每年赚100万,这意味着您损失了5万美元的收入。 现在问问自己,我是否花了X美元的时间使某人难以规避,这在什么时候变成负收益? 当然,在预期损失5万的情况下,您不想花一年的时间进行DRM工作。

坦白地说,我认为大多数采用DRM的应用程序都可以减少很多工作。 如果您的应用程序定价合理,那么人们会为此付费。 对于那些会规避您的DRM的人们来说,他们可能还是不会购买您的应用程序,因此您并没有真正失去任何东西。 如果我在您的位置,我会在此问题上留出固定的时间(一周?),然后在该期限内尽您所能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM