8

有没有什么好的方法来限制应用程序可以启动的次数或限制它在 Windows 7 和使用 C# 下可以使用的时间?

据我所见,注册表可以轻松编辑,有程序可以报告任何类型的文件访问,虚拟机可以用于将系统时间更改回应用程序安装时,等等。对于我能想到的每一个想法有一个(通常)微不足道的工作。

我想避免需要互联网连接。即我不希望软件每次使用哈希等都请求启动权限。

我看到具有这种功能的第三方许可系统。如果实施这些方法总是蹩脚的,他们如何做到不跛脚?

注意:我不想“破解”第三方系统。我已经有了自己想要改进的许可证系统。通用的、合理的想法是我所寻找的。

谢谢,安迪

4

4 回答 4

7

这不是您问题的答案,只是需要考虑的问题。无论您的保护系统多么复杂,它都将很容易被破解。即使使用在线检查,如果有人想要它真的很糟糕,它也可以并且将会被破解。

也就是说,想要破解你的程序的人不是你的客户,他们从来不是,也永远不会是。如果你让你的保护系统无法破解(并且没有牢不可破的保护系统),那些人就不会使用你的程序,而是会找到其他可以破解的程序。

另一方面,作为您的客户的人不会试图破解它,而是会购买原版。问问你自己——你真的想为不是你客户的人浪费你的时间、精力和金钱,并可能为真正的客户减慢系统速度吗?

也就是说,我认为您应该制作某种保护系统,但要使用快速、易于实施且不那么突兀的系统。

于 2010-09-27T19:57:48.323 回答
1

构建一个相对安全但简单的软件许可系统绝非易事。不用说,只要有足够的资源和时间,任何系统(除了将代码托管在安全服务器上)都可能被破坏。你能做的最好的事情就是付出比平均收益更大的努力。

如果您认真对待保护自己的软件资产,则应该考虑使用经过商业验证的许可技术,而不是自己动手。也就是说,让我们看看您如何考虑以您描述的方式进行保护。

首先,您应该意识到,在虚拟机时代,您创建的任何文件或注册表项都可以轻松回滚。如果没有验证过程的在线组件,您将无法阻止这种情况。

你可以做的是这样的事情:

  • 存储系统使用天数的加密值 - 一个永远不会倒退的值。
  • 存储一个加密的计数器,每次使用系统时将其递减到零。
  • 存储上次启动软件的日期/时间的加密值。
  • 存储其他三个值的加密哈希。

现在您可以检查这些值是否一致并限制某人篡改它们的能力。您还应该对这些值进行 SALT 处理,以免它们被轻易重放。

于 2010-09-27T19:43:28.397 回答
0

使用注册表,但使用到期日期加密条目。它不是万无一失的,但它会保留 75% 的休闲作弊者。

其他一些技巧:

  1. 也存储使用的天数(可能在另一个 reg 键或完全不同的地方),所以如果他们回滚时钟,用完的天数保持不变。
  2. 在您的加密中使用某种形式的盐,因此具有相同 exp 日期的两个程序将具有不同的值。
  3. 远离真正讨厌的东西,比如写入 HD 的引导扇区(看着你的Adob​​e),你会失去更多的用户,而不是你从 DRM 中获得的。

任何安全系统的关键是你不能信任他们控制的任何东西。任何没有互联网检查的系统都无法阻止它们重新加载虚拟机。

于 2010-09-27T19:39:28.860 回答
0

我注意到一些程序的安装程序的趋势是为程序的其余部分独立下载客户端。您能否使用元编程来发送可执行文件来检查一些晦涩的东西(在此处插入晦涩的东西)?

于 2010-09-27T19:47:11.260 回答