If the product is a program that executes 100% of its functionality on your computer, it is impossible to make it pirate-proof. Even if all the functionality is client-side and the server is used only for authentication, it can be pirated.
The only way to make a program pirate-proof is if it runs on the server with a thin client.
That being said, some products execute on the client. Therefore if they want to prevent piracy, the only thing they can do is security through obscurity. That is, make it as complex as possible so the pirates take as much time as possible to reverse-engineer it.
Simplicity is easy to pirate though.
If the product is a program that executes 100% of its functionality on your computer, it is impossible to make it pirate-proof. Even if all the functionality is client-side and the server is used only for authentication, it can be pirated.
The only way to make a program pirate-proof is if it runs on the server with a thin client.
That being said, some products execute on the client. Therefore if they want to prevent piracy, the only thing they can do is security through obscurity. That is, make it as complex as possible so the pirates take as much time as possible to reverse-engineer it.