in reply to system signature?
What you want to do cannot be done in a failsafe way. As long as your user has control over the environment your program runs under, the program cannot reliably check that it is just being installed into a specific environment and only once. As a simple proof to that statement, consider virtual machines (such as VMWare or QEMU, a user can simulate an identical environment as often as he wants using such virtualisers.
Keeping that in mind, if I were to attempt such a thing I'd have the installer gather some system information that's hard to duplicate (e.g. on Linux output of lspci -vv, ethernet card MAC addresses, output of "hdparm -i " for main harddrive). Have the installer "call home" to a server you control, with a unique registration number that's embedded in the installer and disable that registration number on the server afterwards (so installation can only happen once). Hash the system information together with the registration number and store the hash. Then have the program modify its executable so that it will only run if it can recompute the stored hash at startup. This will break if the user ever changes any hardware, and can be circumvented using a virtual machine as described above, but it may be a reasonable approach for a demo/test of the app.
|
|---|