...
Лексическая обфускация не применяется к следующим артефактам (т.е., они не переименовываются):1. типы
- Типы (классы):
1.1.
...
- Системный тип "<Module>",
1.2.
...
- Типы с атрибутом System.Runtime.CompilerServices.CompilerGeneratedAttribute,
1.3.
...
- Типы с флагом IsSerializable,
1.4.
...
- Типы, реализующие (наследующие лично или через базовые типы) интерфейс System.Xml.Serialization.IXmlSerializable;
...
- Поля:
2.1.
...
- Поля с флагом RTSpecialName,
2.2.
...
- Поля с атрибутом System.Runtime.CompilerServices.CompilerGeneratedAttribute,
2.3.
...
- Поля с флагом IsSerializable;
...
- Методы:
3.1.
...
- Констукторы,
3.2.
...
- Виртуальные методы,
3.3.
...
- Методы, обращающиеся к нативному коду с помощью идиомы P/Invoke,
3.4.
...
- Методы с атрибутом System.Runtime.CompilerServices.CompilerGeneratedAttribute,
3.5.
...
- Обобщенные (шаблонные) методы;
// ### деструкторы - есть такое?!
...
- Свойства (поля с геттерами и сеттерами):
4.1.
...
- Свойства с атрибутом System.Runtime.CompilerServices.CompilerGeneratedAttribute,
4.2.
...
- Свойства типа, унаследованного от системного типа System.Configuration.ApplicationSettingsBase (для WinForms).
Утилита CodeProtect.exe
Ограничения на защиту функций:
1. Метод не имеет тела (в принципе, можно не указывать - и так очевидно)
2. Метод принадлежит структуре (а не обычному классу)
3. Метод - конструктор
4. Метод - шаблонный (использует дженерики)
5. Метод помечен кастомными атрибутами
6. Тело метода содержит инструкцию calli (см. https://docs.microsoft.com/ru-ru/dotnet/api/system.reflection.emit.opcodes.calli) (редкий случай, но возможный)
7. Метод - деструктор или вызывается (прямо или косвенно) из деструктора
8. Метод имеет обработчик исключения вида Fault или Filter; в C# встречается только Filter (использует нотацию с применением when) (см. https://csharp.today/c-6-features-exception-filters/)