在C#和Windows中限制评估软件的启动或运行时间

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

据我可以看到,registry可以很容易地编辑,有程序报告任何types的文件访问,虚拟机可以用来改变系统时间回到安装应用程序时,等等。对于每个想法,我可以想到有(通常)微不足道的工作。

我想避免需要互联网连接。 也就是说,我不希望软件要求每次使用哈希等来启动权限。

我看到有这种function的第三方许可证系统。 如果实施这些方法总是蹩脚的,那么他们怎么做,所以这不是跛脚?

注意:我不想“破解”第三方系统。 我已经有自己的许可证制度,我想改进。 通用的,似是而非的想法就是我所需要的。

谢谢安迪

这不是你的问题的答案,只是想一想。 不管你的保护系统有多复杂,都会很容易被破解。 即使在线检查,如果有人想要它真的很糟糕,它可以,并将被破解。

也就是说,那些想要破解你的程序的人不是你的客户,他们从来不是,他们永远也不会。 如果你的保护系统是不可破解的(而且没有不可破解的保护系统),那么这些人就不会使用你的程序,并会发现一些他们可以破解的东西。

另一方面,作为你的客户的人不会试图破解它,并会购买原件。 问问自己 – 你是否真的想浪费你的时间,精力和金钱给那些不是你的客户的人,而且可能会让系统对于一个真实的人来说太慢了?

也就是说,我相信你应该制定某种保护制度,但是要用那种既快又容易实施,干扰最小的方法。

构建一个相对安全但简单的软件许可系统并不容易。 不言而喻,只要给予足够的资源和时间,任何系统(除了在安全服务器上托管代码之外)都可以被破坏。 你所能做的最好的就是做出必要的努力,这样做比平均收益更大。

如果您对保护您自己的软件资产非常认真,那么您应该考虑使用经过商业验证的许可技术,而不是自行开发。 这就是说,让我们看看你如何考虑以你描述的方式来保护你。

首先,您应该认识到,在虚拟机时代,您创建的任何文件或注册表项都可以轻松回滚。 如果没有在线组件进行验证过程,则无法防止此情况发生。

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

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

现在你有办法检查这些值是否一致,并限制某人篡改它们的能力。 你也应该将这些值予以抑制,以便它们不能被轻易的重播。

使用注册表,但加密到期日期的条目。 这不是万无一失的,但它会保持75%的休闲骗子。

其他一些技巧:

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

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

我注意到一些程序的安装人员正在为程序的其余部分独立下载客户端的趋势。 你可以使用元编程来发送可执行文件检查某些模糊的可执行文件(插入不明确的东西在这里)吗?