"C# kann man einfach dekompilieren und den Quellcode offenlegen"
Stimmt. Verwendet man jedoch einen Obfuscator, schaut die Sache anders aus. Mit
Glück lässt sich der Code nach dem Dekompilieren direkt wieder kompilieren, aber die Logik nachzuverfolgen ist eher nicht drin. (Stell' dir vor, alle Variablen-, Klassen- und Methodennamen bestehen nur aus 2 zufälligen Buchstaben...) Natürlich: Bei einem trivialen Stück Code (Hallo Welt) kann auch der Obfuscator nicht viel machen.
Dass man den Code dekompilieren kann, ist viel weniger schlimm, als sich die meisten eingestehen wollen. Bei 99%, allen Codes, in normalen Anwendungen handelt es sich um 08/15 Code, der keinen interessiert. Die Leute, die Obfuscator benutzen, nehmen sich selbst oft viel zu wichtig.