Рекомендации по защите .NET-приложений
Утилита CodeObfuscator.exe
Лексическая обфускация не применяется к следующим артефактам:
- Типы (классы):
- Системный тип "<Module>"
- Типы с атрибутом System.Runtime.CompilerServices.CompilerGeneratedAttribute
- Типы с флагом IsSerializable
- Типы, реализующие (наследующие лично или через базовые типы) интерфейс System.Xml.Serialization.IXmlSerializable;
- Поля:
- Поля с флагом RTSpecialName
- Поля с атрибутом System.Runtime.CompilerServices.CompilerGeneratedAttribute
- Поля с флагом IsSerializable;
- Методы:
- Конструкторы
- Виртуальные методы
- Методы, обращающиеся к нативному коду с помощью идиомы P/Invoke
- Методы с атрибутом System.Runtime.CompilerServices.CompilerGeneratedAttribute
- Обобщенные (шаблонные) методы;
// ### деструкторы - есть такое?!
- Свойства (поля с геттерами и сеттерами):
- Свойства с атрибутом System.Runtime.CompilerServices.CompilerGeneratedAttribute
- Свойства типа, унаследованного от системного типа System.Configuration.ApplicationSettingsBase (для WinForms).
Утилита CodeProtect.exe
Ограничения на защиту функций:
- Метод не имеет тела (в принципе, можно не указывать - и так очевидно)
- Метод принадлежит структуре (а не обычному классу)
- Метод - конструктор
- Метод - шаблонный (использует дженерики)
- Метод помечен кастомными атрибутами
- Тело метода содержит инструкцию calli (см. ссылку) (редкий случай, но возможный)
- Метод - деструктор или вызывается (прямо или косвенно) из деструктора
- Метод имеет обработчик исключения вида Fault или Filter; в C# встречается только Filter (использует нотацию с применением when) (см. ссылку)