# # Obfuscation

In addition to source protection, .NET Reactor provides thorough class and member obfuscation complemented by different exclusion schemes, use of non-printable characters in obfuscated names, and even incremental obfuscation, which always generates the same obfuscation strings for type and member names.

Obfuscation mangles type and member names. The obfuscation process converts a program into an equivalent one that is much more difficult to reverse engineer. The advantage of this method is that it runs on standard hardware and without any changes to virtual machines or available interpreters.

.NET Reactor fully supports declarative obfuscation. Declarative obfuscation allows you to directly define which types and members should be excluded from obfuscation. This can be done by using the custom attribute System.Reflection.ObfuscationAttribute in your source code. .NET Reactor automatically detects the attribute and excludes the corresponding types and members from obfuscation.

The Obfuscation node:

- Create Mapping File - Enable Create Mapping File to create a file which cross-references unobfuscated names with obfuscated ones, which is used by the Stack Trace Deobfuscator.
- Enabled - Set to True to obfuscate all nonpublic class and member names.
- Exclusions - Select the kind of types you want to prevent from obfuscation.
- Incremental Obfuscation - If you want IntelliLock always to generate the same obfuscation strings for your type and member names, you need to enable this option.
- Obfuscate Public Types - Enable it to obfuscate all types and member names.
- Obfuscate Serializable Types - Disable this option to prevent serializable types from obfuscation.
- Use Unprintable Characters - Unprintable characters use unprintable strings to obfuscate type and member names but cannot be used if your assembly must run as safe code.

Example (decompiled with ILSpy):

Obfuscated Assembly