There are many protection methods for .net executables. Most of them obfuscate the names of the functions and the variables and scramble the flow of the commands. Some other harder methods encrypt and compress parts of the code or/and use virtualization. Even if there are many free software / scripts to help you out, most protected files have to been unpacked manually. This is what we do when other methods fail.