.net 分发任何软件的评估版本的最佳方法?

.net 分发任何软件的评估版本的最佳方法?,.net,piracy,.net,Piracy,我想分发我的软件(.net windows应用程序),评估版本为30天,与系统时间无关 我不想使用互联网获取时间,因为软件将在没有互联网的机器上运行 有人能建议我如何在不使用系统时间和互联网的情况下分发我的软件吗 还有可能限制可以安装它的计算机的数量吗?这不是软件许可的经典限制吗?我不知道你如何限制评估,而不考虑系统时间,除非你忽略了应用程序中与日期相关的方面 就限制计算机数量而言: 我不知道微软是否会让你这样做,但你可以创建一个系统,让客户输入他们的微软激活密钥,然后你返回某种特定于应用程序的

我想分发我的软件(.net windows应用程序),评估版本为30天,与系统时间无关

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

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


还有可能限制可以安装它的计算机的数量吗?

这不是软件许可的经典限制吗?我不知道你如何限制评估,而不考虑系统时间,除非你忽略了应用程序中与日期相关的方面

就限制计算机数量而言:


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

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

规避风险的用户只需将您的软件安装在虚拟机中,该虚拟机以写时拷贝模式配置(因此,虚拟机中的所有更改都将转到单独的磁盘映像),并且在每次启动虚拟机时,虚拟机系统时钟都将设置为特定日期。这个虚拟机映像可以传输到任意多台计算机,并且虚拟机系统时钟总是从同一日期开始。此外,操作系统上的任何运行时效果,如您要安装的运行时计数器,都会随着VM的每次重新启动而重置

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


但是,您不能仅使用软件来完成此操作。

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

您完全可以使用外部许可系统来完成此操作(免责声明:我为此类系统的制造商工作)。它可以是不可破解的,但它不是免费的


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

你是在寻找一个现有的软件还是重新发明一个轮子?这不会有帮助,因为使用虚拟机很容易绕过任何本地化的许可计划。如果软件要绑定到Windows的某些安装,而不是激活密钥本身,则可以将其用作salt散列函数的一个(多个)源。然后,您可以使用此散列对代码进行加密,并在运行时使用原位计算的散列按需解密。请注意,机器绑定始终是可破解的,并且在用户更改机器参数时可能会产生问题。因此,使用Windows版本、MAC地址、CPU序列号等创建散列非常有用,直到用户得到一个假阴性,然后他们不满意为止。