# Symbol Renaming

### :fast\_forward:Performance: None          :closed\_lock\_with\_key:Potency: High            :brain:Resilience: High

## Understanding the protection

Symbol renaming is a critical obfuscation technique, the names of classes, methods,  properties, fields, method parameters, and locals are replaced with randomly generated names.&#x20;

#### Before Obfuscation:

```csharp
public static void MyMethod(string parameter)
```

#### After Obfuscation:

```csharp
public static void _[[](___])(_(string __)())_)
```

## Tuning the protection for best performance

There are three different modes for this protection, all of them serve the same purpose, erasing the original names of your application, however, depending on the aim that you want to achieve with the obfuscation, you should opt which one suits you better.

### Minify

When choosing this option, the names of your application are removed to ensure that your application size is the smallest possible, when erasing the data is not possible, the obfuscator will use single characters as names for the member being renamed.

#### Before:

```csharp
public static void MyMethod(string parameter)
```

#### After:

```csharp
public static void (string )
```

### Encrypted

When choosing this option, the names of your application are encrypted with a private key of your preference, this makes it possible for you to decode stacktraces provided by customers and easily debug your application after obfuscation.

#### Before:

```csharp
public static void MyMethod(string parameter)
```

#### After:

```csharp
public static void MTc4OTI0NTYxNw==(string MTc4OTI0NTYxNw==)
```

{% hint style="danger" %}
You should always safeguard the key used for obfuscation, **exposing it to the public could compromise the encrypted names**. :exclamation:&#x20;
{% endhint %}

### Default

When choosing this option, the names of your application become incredibly difficult to read both to humans and machines, leading to the crash of reverse engineering applications in some scenarios.

#### Before:

```csharp
public static void MyMethod(string parameter)
```

#### After:

```csharp
public static void _[[](___])(_(string __)())_)
```

{% hint style="warning" %}
**This mode delivers the most confusing obfuscation output to human attackers**, however, the names given by this method tend to be bigger than the original name, therefore the size of your application can become significantly bigger after using this method.
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.cyphor.net/.net-code-obfuscation/code-obfuscation/symbol-renaming.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
