Se isso existisse com essa facilidade, não andavam as grandes software houses a investir em proteções, às vezes a correr o risco de perder clientela (estou-me a lembrar da proteção do RA3, que segundo consta, só deixa instalar um x de vezes)
A maneira mais fácil, para um software distribuído em escala anã, é do tipo D-GRA (não procures porque não existe, eu é que gostava de me referir assim ao método, na altura (já lá vão uns 3 anos ou mais))
Ou seja:
Deploy - Gather, Receive & Authenticate
Eu já fiz algo parecido, há muito tempo atrás, que até funcionava porreirinho.
Eis o que acontecia:
-Distribuis a aplicação trancada ou com funcionalidades reduzidas
-O utilizador carrega lá algures, tipo Autenticar ou assim e a aplicação distribuí uns files ou umas chaves de registo ou saca umas informações do hardware, wtv e gera um file
-O utilizador manda-te esse file com as informações dos sitios onde distribuiu as cenas na máquina alvo, as chaves de registo, a info de hardware, a encriptação que usaste, etcetc
-Descodificas esse file com software que tenhas só para ti (que terás de escrever, claro) e geras um file a servir de uma espécie de chave que leva toda a "contra-informação" daquela maquina em específico
-Envias o file ao utilizador, ele usa-o para desbloquear a aplicação
Se ele tentar copiar o executável e/ou a chave, a "contra-informação" já não vai bater certo com a informação plantada da primeira vez e não corre. Desta forma só mesmo na máquina de onde o file foi gerado é que consegue correr a aplicação.
É uma forma bem "sapateira'o'ditadora" de poderes ter a certeza de que só os utilizadores a quem enviaste a "contra-informação" têm acesso ao programa.
Convém que o processo não seja automático, senão voltávamos ao mesmo... e é por isso que é impraticável para as grandes aplicações... por isso e por outras grandes coisas que não interessam agora.
Desculpa lá a extensão, espero que te tenha dado uma ideia para o que queres fazer.