Well, the way that Stardock did it was this:

You must have a serial code to play the game. All serial codes are server-side activated, and so given via email/game box. Thus you cannot forge a serial code, because they are also tied to the email address of the account they are given to. So you can install, but until the game is activated with a serial code you cannot play.

So you can recheck serials with each update and authenticate what computers are using what serial through a simple callback with the hardware address. If too many computers use the same serial in a short time... you have your pirates.


For a demo my suggestion would be to simply hardcode it as limited. Such as the define sections. So that {$IFNDEF DEMO} would restrict any special content from even being in the demo application, so that it couldn't be unlocked even if it did get hacked. Then it just isn't worth the effort.