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

Posted

技术标签:

【中文标题】限制 C# 和 Windows 中评估软件的启动或运行时间【英文标题】:Limiting Starts or Run Time for Evaluation Software in C# and Windows 【发布时间】:2011-04-17 22:52:46 【问题描述】:

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

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

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

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

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

谢谢,安迪

【问题讨论】:

【参考方案1】:

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

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

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

也就是说,我认为您应该制作某种保护系统,但要选择快速、易于实施且最不显眼的系统。

【讨论】:

【参考方案2】:

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

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

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

您可以做的事情如下:

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

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

【讨论】:

【参考方案3】:

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

其他一些技巧:

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

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

【讨论】:

【参考方案4】:

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

【讨论】:

以上是关于限制 C# 和 Windows 中评估软件的启动或运行时间的主要内容,如果未能解决你的问题,请参考以下文章

c# 限制同时启动多个实例程序运行

用VB6.0或VB.NET或C#做一个客户端,用来“限制用户只能在办公室访问Web系统”

C#开发Windows服务

是否可以限制用户在 C# 中拍摄屏幕快照

windows进程启动设置时区限制

这个例子展示了如何用C#编程实现启动停止和重启Windows服务。