Versions Compared

Key

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

Одной из наиболее перспективных технологий автоматической защиты исполняемых Native-файлов является обработка инструкций, извлеченных из тела приложения (RIP CODE). При помощи мини-виртуальной машины некоторые наборы инструкций в защищаемом приложении преобразуются определенным образом. Это позволяет защитить функции приложения от изучения и анализа, а также значительно затрудняет создание автоматических инструментов снятия автозащиты.

Однако при использовании RIP CODE следует учитывать, что работа защищенного приложения может замедляться, вследствие того, что инструкции виртуализируются. Чтобы подобрать оптимальные функции для защиты применяется технология профилирования. С помощью специальных инструментов приложение анализируется (как статически, при помощи дизассемблера, так и динамически, в процессе исполнения), после чего создается конфигурационный файл PRC (*.prc), содержащий информацию о функциях, подлежащих защите. Рассмотрим процесс защиты и профилирования тестового приложения, созданного в Visual Studio 2010 по шаблону MFC Application.

...

Image Removed

ВАЖНО!
При повторной компиляции приложения, и, соответственно, перегенерации MAP-файла, существующий файл описания защиты кода становится недействительным, и необходимо повторное проведение статического анализа и повторный выбор функций!
Если же процесс статического анализа проводится впервые (или защищаемый файл изменился), то необходимо выбрать пункт Запустить процесс статического анализа, предварительно убедившись, что в одной папке с защищаемым файлом находится соответствующий ему MAP-файл:

Image Removed

Image Removed

Когда профилирование запускается из среды мастера лицензирования, то изменение параметров в данном диалоговом окне будет недоступно. В случае, если мастер лицензирования не используется, то здесь необходимо указать непосредственно профилируемое приложение.
Аналогично, если профайлер запускается из мастера, то имя файла описания изменить нельзя – оно жестко привязано к проекту лицензии. В случае использования профайлера отдельно, здесь указывается имя выходного файла с настройками для опции RIP CODE.

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

Image Removed

...

Image Removed

Image Removed

...

Image Removed

Image Removed

...

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

Пояснение

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

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

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

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

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

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

...

Новым шагом в развитии перспективной технологии виртуализации защищаемых участков кода стал выпуск утилиты Guardant Armor. Для защиты приложения при помощи данной утилиты необходимо создать конфигурационный файл PRC.

Рассмотрим процесс защиты и профилирования тестового приложения, созданного в Visual Studio 2010 по шаблону MFC Application.

Children Display
alltrue

Главное окно профайлера предназначено для выбора функций, базовые блоки в которых будут защищаться при помощи RIP CODE:
Image Removed
Любая функция после статического анализа находится в одном из трех состояний:

Image Removed

ни одного базового блока подходящего для защиты не найдено

Image Removed

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

Image Removed

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

...

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

...

  • Смена шрифтов интерфейса занимает более 10 секунд, хотя до защиты она выполнялась за 1 - 2 секунды
  • При создании новой папки в некоторых случаях приложение зависает или аварийно завершается
  • В приложении окно состоит из нескольких панелей, и при изменении их размера оно надолго подвисает

Данные проблемы можно решить следующими методами:
Anchor_Toc277872888_Toc2778728881. Не защищать функции
Отключить RIP CODE, т.е. в главном окне мастера лицензирования выбрать пункт Не защищать функции. Данный метод наиболее радикален, он помогает преодолеть большинство проблем с производительностью, но снижает защищенность приложения.
Рекомендуется использовать, если в приложение встроена защита на Guardant API, или когда любые попытки использования RIP CODE вызывают проблемы.
Anchor_Toc277872889_Toc2778728892. Выбрать функции для защиты вручную
С помощью окна поиска найти функции смены шрифтов интерфейса..:
Image Removed
..и создания новой папки:
Image Removed
Снять с них отметки, т.е. не защищать эти функции. Проблемы с производительностью и зависаниями должны исчезнуть.
Anchor_Toc277872890_Toc2778728903. Перепрофилировать приложение
Наиболее простой для разработчика вариант решения проблем с низкой производительностью, это повторное профилирование приложений.
Необходимо при профилировании приложения сделать упор на использование именно тех функций, с которыми наблюдается проблема.
Например, при перепрофилировании тестового приложения несколько раз перемещали его панели в главном окне. По результатам профайлер обнаружил медлительность данной функции и более не предлагает ее защищать:
Image Removed