Obfuscation is one way, but it can't protect from breaking the piracy protection security of the application. How to make sure that the application is not tampered with, and how to make sure that the registration mechanism can't be reverse engineered. Also it is possible to make to convert C# app in native code, Xenocode is too costly.
C# provides lot of features, and is the ideal language for my code, so writing in C++ again the whole codebase is out of question.
Secure certificates can be easily removed from the signed assemblies in .NET