No puedes proteger el software
Si escribes un programa, e implementas algún mecanismo de protección, siempre es posible alterar el programa para que se salte tu mecanismo de protección.
Aunque tu programa esté compilado en código de máquina, e incluso ofuscado (si usas una máquina virtual), con el tiempo y los recursos adecuados siempre es posible romper cualquier mecanismo de protección (un crack).