Продукт "Unity 3D Obfuscator" предназначен для обеспечения защиты Unity 3D приложений от декомпиляции (декомпиляция - просмотра кода на языке высокого уровня). Осуществляет обфускацию .NET сборок, входящих в проект.

 

Обфускация (от лат. obfuscare, «затенять, затемнять») — запутывание кода программы, то есть приведение исходного текста или исполняемого кода к виду, сохраняющему функциональность программы, но затрудняющему анализ, понимание алгоритмов работы и модификацию при декомпиляции. «Запутывание» кода может осуществляться на уровне алгоритма, на уровне исходного текста, ассемблерного текста.


Цели обфускации

  • Защита программ от декомпиляции и незаконного использования, нарушения авторских прав программистов.
  • Оптимизация программы с целью уменьшения размера работающего кода и (если используется некомпилируемый язык) ускорения работы.

Функциональные возможности продукта:

  • Символьная обфускация:
  • Удаление событий и свойств:
    • Метод заключается в удалении метаданных свойств и событий из сборки, в результате чего становится невозможным восстановление или использование данных свойств из языков высокоуровневых языков (C#, Boo, ...)
  • Переименование параметров метода:
    • Преобразование имен методов, переменных и т.д. в набор неотображаемых символов
      Суть метода в замене имен на нечитаемые символы, например символы японского языка. Хотя .Net и работает с кодировкой UTF8, не все декомпиляторы адекватно обрабатывают ее символы. Некоторые заменяют имена с такими символами на более понятные, некоторые проставляют вместо непонятных символов их код, некоторые просто отказываются работать с данными символами.
  • Обфускация графа потока исполнения:
    • Обфускация условных переходов
      Метод заключается во внедрении в тело алгоритма различных ложных условий и рассеивании проверок существующих условий, циклов и безусловных переходов по телу функции. Подобные манипуляции разрушают стандартные схемы построения циклов и условий, используемые компиляторами высокоуровневых языков (C#, VB, ..), что не позволяет в дальнейшем преобразовать код программы в язык высокого уровня. В тоже время, даже анализ IL-кода, с учетом перемешивания и наличия ложных ветвей представляет собой довольно сложную задачу.
  • Защита от декомпиляторов:
    Защита от декомпиляторов существенно ограничивает возможности восстановления исходного кода приложения на язык ассемблера или языки высокого уровня (C#, VB и т.д.). Для обеспечения защиты от восстановления исходного кода используются следующие методы:
    • Внедрение в защищаемое приложение дополнительных методов, обладающих корректной семантикой для языка ассемблера, но не корректной для компиляторов языков высокого уровня, и, соответственно, вызывающие ошибки при восстановлении кода на эти языки.
    • Внедрение в защищаемое приложение дополнительных методов, обладающих не корректной семантикой даже для языка ассемблера, и, соответственно, вызывающие ошибки при восстановлении кода на язык ассемблера.
    • Внедрение в методы сборки недостижимых в процессе исполнения вызовов функций с некорректным кодом, формирующих скрытые ошибки, проявляющиеся при попытке скомпилировать дизассемблированный код.
    • Бинарная обработка сборки для защиты от декомпиляции.
    • Внедрение в методы сборки, кода с некорректной для компиляторов языков высокого уровня семантикой (при включенном режиме обфускации "Граф потока управления").
    • Преобразование кода методов сборки, в код с некорректной семантикой для языков высокого уровня (при включенном режиме обфускации "Граф потока управления").
  • Strong name:
    • Поддержка подписи сборок с использованием ключей .SNK или .PFX
  • Поддержка .NET Framework:
    • .NET Mono;
    • .NET Framework v 1.1;
    • .NET Framework v 2.0;
    • .NET Framework v 3.0;
    • .NET Framework v 3.5;


Внешний вид

 

Описание интерфейса:

  • Создать проект защиты - Открывает окно мастера создания проекта обфускации на основе скомпилированных данных в режиме Windows Standalone;
  • Распаковать проект в дирепкторию - Распаковыает данные из скомпилированного проекта .unity3d в укзанную директорию. Данный пункт действителен для проектов .unity3d (Web Player, Web Player Streamed);
  • Беспланый режим - Актуален только для незарегистрированной версии. Деактивирует функционал, относящийся к платной версии, что исключает возможность случайного использования функций, влекущих установку ограничения времени функционирования программы (один день)
  • Переименование имен объектов - Включает опцию переименования имен классов, функций, полей, свойств и событий (для не public объектов);
  • Не переименовывать классы - Отключает переименование классов;
  • Не переименовывать функции - Отключает переименование имен функций;
  • Удаление имформации о свойствах и событиях - Включает опцию удаления метаданных свойств и событий.
  • Запутать граф управления - Обеспечивает невозможность востановления исходного кода на языке высокого уровня
  • Переименовать параметры метода
  • Защита от декомпиляторов - Защитить проект от декомпиляции в коррекный код, как на языке высокого уровня, так и на языке ассемблера
  • Посмотреть обновление
  •  Открыть проект обфускации либо проект .unity3d (Web Player)
  •  Раскрыть список последних проектов
  •  Страница запроса и установки лицензии
  •  Запускает процесс обфускации


Исключение при переименования - из исходного кода

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

Задавать исключения можно непосредственно в исходном коде (C#, VB и т.д.).
Для этих целей предназначен атрибут System.Reflection.Obfuscation

[System.Reflection.Obfuscation( Exclude = true [, ApplyToMembers = true|false [, Feature = "Public"]])]

Например:

//
// Исключить из переименования класс 'Class1' со всем вложением
//
[System.Reflection.Obfuscation(Exclude = true,
 ApplyToMembers = true)]
public class Class1
{
    public void Function1() { }
    protected void Function2() { }
    internal void Function3() { }
}



// // Исключить из переименования класс 'Class1' со всеми дочерними // Public элементами // [System.Reflection.Obfuscation(Exclude = true, ApplyToMembers = true, Feature = "Public")] public class Class1 { public void Function1() { } protected void Function2() { } internal void Function3() { } }

// // Исключить из переименования только метод 'Function2' // public class Class1 { public void Function1() { } [System.Reflection.Obfuscation(Exclude = true)] protected void Function2() { } internal void Function3() { } }

// // Исключить из переименования только класс 'Class1' и метод 'Function2' // [System.Reflection.Obfuscation(Exclude = true)] public class Class1 { public void Function1() { } [System.Reflection.Obfuscation(Exclude = true)] protected void Function2() { } internal void Function3() { } }

Страница запроса лицензии


Мастер создания проекта обфускации


Результат процесса обфускации




Контакты

Tech-Next.

E-mail:

Форум: www.unity3d.ru