Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Основным механизмом защиты .NET-приложений является шифрование тел защищаемых функций и их динамическое расшифрование во время работы приложения. При совместном использовании символьного обфускатора и шифратора строковых констант на электронном ключе защита становится беспрецедентно стойкой.

Однако в ряде случаев за это приходится платить снижением скорости работы:

  • Если функция зашифрована, то при ее вызове на расшифрование тратится определенное время,
  • Даже если функция уже расшифрована, она, тем не менее, вызывается с использованием защитных механизмов, что может вносить задержку в ее выполнении на доли секунды.

В среднестатистическом случае увеличение времени запуска приложения и понижение производительности его работы на несколько процентов не вызывает особых проблем. Однако если функция в процессе работы приложения вызывается сотни и тысячи раз, то накладные расходы по работе защитных механизмов именно этой функции могут серьезно снижать производительность приложения. В таком случае, необходима технология выбора функций для защиты. Именно для этого существует .NET-профайлер.

* * *
Рассмотрим процесс защиты тестового

...

  • Галочками отмечаются методы, подлежащие защите (или исключению из нее)
  • Для упрощения стоит отключить отображение т. н. accessor-методов, которые редко защищаются
  • В любой момент можно сохранить результат работы и выйти из приложения
  • При необходимости можно редактировать ранее созданный файл включений/ исключений

Получившийся конфигурационный файл автоматически передается мастеру лицензирования и используется для защиты.
Файлы включений и исключений применяются независимо друг от друга. При этом, если метод указан в обоих файлах, то исключение имеет приоритет.

...

По нажатию на кнопку Готово происходит анализ всех выбранных сборок приложения и вывод основного окна профайлера:

Image Removed

...

По завершении процесса в главном окне профайлера выводится подробная информация о приложении:

 

Image Removed

 

Условные обозначения

Пояснение

 

Оранжевый цвет шрифта

Функция ни разу не вызывалась профайлером

 

Зеленый цвет с галочкой

Функция вызывалась и выбрана для защиты

 

Зеленый цвет без галочки

Функция вызывалась, но не выбрана для защиты

 

 

...

После профилирования приложения можно:

  • Изменить критерии автоматического выбора функций для защиты
  • Вручную изменить параметры защиты каждой функции по отдельности

Для тонкой настройки производительности приложения можно использовать оба метода, но надо учитывать, что каждый раз при автоматическом выборе все пользовательские функции сбрасываются.

...

При нажатии на кнопку Процент защищаемых функций появляется следующее диалоговое окно:
Image Removed
Здесь необходимы небольшие пояснения.
В процессе работы защищенного приложения вызов функции может быть первый или обычный.
При первом вызове функции происходит обращение к электронному ключу и расшифрование тела функции, для его последующего исполнения средой .NET. При обычном вызове уже расшифрованной функции обращения к ключу не происходит, но есть небольшой расход времени на работу защитных механизмов.
В связи с этим, существуют две типичные проблемы с производительностью защищенного приложения:

  • Обычный вызов происходит слишком часть (десятки тысяч раз в секунду)
  • Последовательно происходит много первых запусков функции, что особеннохарактерно при старте приложения

Именно эти критерии и регулируются при автоматическом выборе функций для защиты (см. скриншот выше).
Накладные расходы на вызов функции фиксированы и посчитаны с точностью до микросекунд, поэтому рекомендованные профайлером значения отлично подходят для большинства ситуаций.

...

Здесь все довольно просто. Если работа какой то конкретной функции вызывает проблемы после применения автозащиты, ее легко найти и снять отметку:
Image Removed
Например, на скриншоте выше показаны результаты поиска по слову rotate. Если после автозащиты с параметрами по умолчанию было замечено, что в Paint.NET функция Повернуть изображение на 90 градусов стала работать гораздо медленнее, то легко найти ее и снять отметку Защищать.