Obfuscation allows you to protect your code from reverse engineering by earning your code so confusing it cannot be easily decompiled into human readable code. A well-written .NET obfuscator tool does this for you automatically by altering assemblies after compilation. Altering the code in this way that the code will still run and implement in precisely the exact same way but any effort to decompile the assemblies will only create meaningless code which will confuse human interpreters.
Standard .NET obfuscators only rename all of the identifiers within the code to randomly generated names all class and method names will be renamed to meaningless words. They may use hashing techniques or arithmetically cancel the personalities to unreadable or unprintable characters. These techniques make the code difficult to comprehend and navigate but with time and a little more effort than non-obfuscated assemblies they are sometimes reverse-engineered.
Advanced .NET obfuscators provide even more security. They use advanced methods to not just rename the symbol identifiers but alter the inherent MSIL code inside the assemblies which makes the code almost impossible to decompile by c++ code obfuscator recompilation program. By having one centralized error routine tackling all issues, statistics were created to demonstrate the error count for each project and for each project group.
While it will always be possible to manually analyse the MSIL code and reverse-engineer a meeting, if the code is too tricky to decompile by means of automatic recompilation software, it is safe to say it will be practically impossible for a human to decompile and reverse engineer the assemblies and most certainly not worth the effort it might take to achieve that.
Standard obfuscation could be further improved by overload induction. Overload induction takes symbol renaming a step further by reusing symbol names where possible. If two functions or methods have various parameters they can be renamed using the same identifier name even if both approaches may have completely different performance in c++ code obfuscator. This adds additional confusion since the vast majority of functions and methods inside the assemblies end up with the exact same symbol names.
A side effect of this symbol renaming utilized by .NET obfuscators is that any stack traces generated in error messages are no longer in human readable format. NET obfuscators provide the ability to parse these obfuscated stack traces and return a human readable version. Generally this functionality is only available to the person and company that obfuscated the code in the initial Place and is controlled by password encoded symbol names or emblem name lookup files.