Защита приложений - Обфускация графа потока управления

Обфускация графа потока управления

 

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

  • Обфускация условных переходов
    Данный метод заключается во внедрении в тело алгоритма различных ложных условий и рассеивании проверок существующих условий, циклов и безусловных переходов по телу функции. Подобные манипуляции разрушают стандартные схемы построения циклов и условий, используемые компиляторами высокоуровневых языков (C#, VB, ..), что не позволяет в дальнейшем преобразовать код программы в язык высокого уровня. В тоже время, даже анализ IL-кода, с учетом перемешивания и наличия ложных ветвей представляет собой довольно сложную задачу
  • Обфускация вызовов
    Данный метод заключается в размежевании кода вызова функции и кода помещения параметров этой функции в стек, что также препятствует восстановлению программы в виде алгоритма на языке высокого уровня.
  • Перемешивание случайным образом линейных участков кода

 

Настройка параметров обфускации графа потока управления

 

Внешний вид вкладки Граф потока управления (с пометками)

 

Опции:

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


Пример обфускации граф потока управления (просмотр осуществляется с использованием утилиты .Net Reflector):

 


 

 

 
15.11.2008
 
 
 
 
10.12  .NET Reactor
15.11  n
15.11  C# ClickOnce
 
01.08  Task Context
01.08  XLSX в Mono