6

我想以 30 天的评估版本分发我的软件(.net windows 应用程序),无论系统时间如何。

我不想使用互联网来获取时间,因为软件将在没有互联网的机器上运行。

谁能建议我如何在不使用系统时间和互联网的情况下分发我的软件?

也可以限制可以安装的计算机数量吗?

4

4 回答 4

3

没有外部支持,这是不可能的。

规避用户只需将您的软件安装在虚拟机中,该虚拟机配置为写时复制模式(因此 VM 中的所有更改都转到单独的磁盘映像),并且在 VM 每次启动时,VM 系统时钟将是设置为特定日期。此 VM 映像可以传输到任意数量的计算机,并且 VM 系统时钟将始终从同一日期开始。此外,对操作系统的任何运行时影响,例如您要安装的运行时计数器,都会在 VM 的每次新启动时重置。

有效限制软件使用的唯一方法是将其绑定到某些外部数据源。要么通过互联网,要么通过带有自己时钟的硬件加密狗一起发货;该加密狗也可以是一些小型网络设备,发放许可证,因此单个加密狗可以许可多台计算机。

但是,您不能仅使用软件来做到这一点。

于 2011-03-20T11:52:50.333 回答
1

使用 Date 永远不会安全,因为用户可以操纵它。但另一种方法是限制应用程序可以启动的次数。使用可以存储在文件或注册表中的计数器。这个计数器应该被加密。如果计数器值太大、丢失或无效(您可以为此使用校验和),则评估期结束。

于 2011-03-20T12:11:05.647 回答
0

这不是对软件许可的经典限制吗?我不知道如何在不考虑系统时间的情况下限制评估,除非您省略了应用程序的某些与日期相关的方面。

至于限制计算机的数量:

我不知道微软是否会让你这样做,但你可以创建一个系统,让客户输入他们的微软激活密钥,然后你返回某种特定于应用程序的应用程序密钥。

于 2011-03-20T11:39:29.187 回答
0

您绝对可以使用外部许可系统来做到这一点(免责声明:我为这样一个系统的制造商工作)。它可能是无法破解的,但它不是免费的。

如果你想自己动手,你可以存储一个加密的日期和时间函数——也许在注册表中——然后将该日期与系统日期/时间进行比较。如果 sys 日期晚于存储日期,则在应用程序启动时将存储日期值向前设置。如果系统日期早于存储日期,请考虑锁定应用程序,直到用户联系您解释他们为什么将系统日期设置回去。这在许多层面上都不是万无一失的,但它比仅查看系统日期要好。另一种方法是对已知的认证时间服务器进行 http 调用,并将系统日期和安装日期与该服务器进行比较。

于 2011-03-25T20:14:55.087 回答