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开发者_JAVA技巧 ?
Also is it possible to limit number of computers on which it can be installed?
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.
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.
精彩评论