Symbol Renaming

Assemblies compiled by the .NET framework contain rich metadata exposing information about types, methods, field, properties and managed resources in the compiled assembly. Using a .NET disassembler it's possible to retrieve the original source code from compiled assemblies. This poses a security threat since intellectual property of a company embedded into software code can be easily exposed.
The goal of symbol renaming is to prevent unauthorized users from reading your source code and reverse-engineer your assemblies. Symbol renaming makes code harder to understand, by changing the names of types, methods and fields so that they lose their semantic meaning.
Applying symbol renaming hides the code intent but code remains usable for the just-in-time compiler to execute intended operations.

code before and after symbol renaming

Using Symbol Renaming

Agile.net renaming tab

To enable symbol renaming:

  • Select the Renaming tab.
  • Check the assemblies you would like to rename.
  • Select the Renaming scheme.

Renaming schemes

Printable Chars Renames classes and methods using ASCII characters. Error reports received from customers can be translated back to their original form using the decode stack trace form.
Unprintable Chars Renames classes and methods using Unicode unprintable characters. Note that since it's not possible to display unprintable characters error reports received from customers containing stack trace information can't be decoded back to their original form.

Reusing Name Mapping

In case you're deploying a patch release consisting of only a subset of the assemblies comprising the entire software you should consider using an obfuscation map created for a previous release. Agile.net will use the obfuscation map to rename classes and methods using the same names used for a previous run. To instruct Agile.net to do so simply browse to the location of the obfuscation map and select it.

Cross Assembly Obfuscation

By default Agile.net doesn't obfuscate public members of selected assemblies, otherwise assemblies couldn't be referenced by other assemblies that are not included in the renaming process. If you don't expect your software to be used as a library referenced by external components you should consider using cross assembly obfuscation. To enable cross assembly obfuscation check the checkbox named 'I want to hide public members of my code using cross assembly obfuscation'.

When using cross assembly obfuscation you must ensure that all assemblies comprising the software are added to the project, even if you decide not to protect them.

Obfuscation Exclusions

Symbol renaming can sometime introduce unexpected errors, mostly due to usage of reflection API in your code or by libraries referenced by your software. Agile.net applies smart obfuscation rules to automatically detect such classes and methods and excludes them from the renaming process. For those cases where Agile.net couldn't identify a dependency that may lead to an error you can specify your own exclusions. To specify additional exclusions click the hyperlink named 'I want to specifically exclude members from the obfuscation'.