分发任何软件评估版的最佳方式?
我想分发我的软件(.net windows 应用程序),其评估版本为 30 天,无论系统时间如何。
我不想使用互联网来获取时间,因为软件要在没有互联网的机器上运行。
有人可以建议我如何在不使用系统时间和互联网的情况下分发我的软件吗?
是否可以限制可以安装它的计算机数量?
I would like to distribute my software (.net windows application) with evaluation version of 30 days irrespective of system time.
I do not want to use internet for fetching time as software is to be run on machine without internet.
Can anybody suggest me how can I distribute my software without using system time and internet ?
Also is it possible to limit number of computers on which it can be installed?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
如果没有外部支持,这是不可能的。
规避用户只需将您的软件安装在虚拟机中,该虚拟机配置为写时复制模式(因此虚拟机中的所有更改都会转到单独的磁盘映像),并且每次启动虚拟机时,虚拟机系统时钟都会设置为特定日期。该虚拟机映像可以传输到任意数量的计算机,并且虚拟机系统时钟将始终从同一日期开始。此外,对操作系统的任何运行时影响(例如您安装的运行时计数器)都会在虚拟机每次重新启动时重置。
有效限制软件使用的唯一方法是将其与某些外部数据源绑定。通过互联网,或者通过具有自己的时钟的硬件加密狗来运输;该加密狗也可以是一些小型网络设备,用于分发许可证,因此单个加密狗可以授权多台计算机。
然而,仅靠软件是无法做到这一点的。
Without external support this is impossible.
A circumventing user would just install your software in a virtual machine, that's configured in copy-on-write mode (so all changes in the VM go to a separate disk image), and upon every start of the VM the VMs system clock would be set to a specific date. This VM image could be transferred to as many computers as one desires, and the VMs system clock would always start of the same date. Also any runtime effects on the OS, like a runtime counter you'd install would be reset with every fresh start of the VM.
The only way to effectively limit the use of your software is to tie it to some external data source. Either over the internet, or by shipping it with a hardware dongle featuring its own clock; That dongle could be also some small form factor network device, handing out licences, so a single dongle may licence a number of computers.
However you cannot do it with just software.
使用日期来做这件事永远不安全,因为用户可以操纵它。
但另一种方法是限制应用程序可以启动的次数。使用可以存储在文件或注册表中的计数器。该计数器应该被加密。如果计数器值太大、丢失或无效(您可以为此使用校验和),则评估期结束。
Using Date for this is never secure since the user can manipulate that.
But another way is to limit the number of times the application can be started. Use a counter which you can store in a file or the registry. This counter should be encrypted. If the counter value is too large, missing or invalid (you can use a checksum for that), then the evaluation period is over.
这不是软件许可的经典限制吗?我不知道如何限制评估而不考虑系统时间,除非您忽略了应用程序的一些与日期相关的方面。
至于限制计算机数量:
我不知道微软是否会让你这样做,但你可以创建一个系统,客户输入他们的微软激活密钥,然后你返回某种特定于应用程序的应用程序密钥。
Isn't this the classic limitation to software licensing? I don't know how you could limit an evaluation irrespective of system time, unless there is some date-related aspect to the application that you omitted.
As far as limiting the number of computers:
I don't know if Microsoft would let you do this, but you could create a system where the customer enters their Microsoft's activation key, and then you give back some kind of application-specific application key.
您绝对可以使用外部许可系统来做到这一点(免责声明:我为此类系统的制造商工作)。它可能是无法破解的,但它不是免费的。
如果您想推出自己的,您可以存储加密的日期和时间函数(也许在注册表中),然后将该日期与系统日期/时间进行比较。如果系统日期晚于存储日期,则在应用程序启动时向前设置存储日期值。如果系统日期早于存储日期,请考虑锁定应用程序,直到用户联系您解释他们为何设置系统日期。这在很多层面上都不是万无一失的,但它比仅仅查看系统日期要好。另一种方法是对已知的经过认证的时间服务器进行 http 调用,并将系统日期和安装到该服务器的日期进行比较。
You can definitely do this with an external licensing system (disclaimer: I work for the manufacturer of one such system). And it can be uncrackable, but it's not free.
If you want to roll your own, you could store an encrypted date and time function--perhaps in the registry--then compare that date with the sys date/time. Set the stored date value forward on app startup if the sys date is later than the stored date. If the sys date is earlier than the stored date, consider locking the application until the user contacts you to explain why they set their system date back. This is not foolproof on many levels but it's better than just looking at the system date alone. An alternative is to do an http call out to a known certified time server and compare the system date and the date of install to that server.