Для нативных программ
Виртуализация кода
Метод обфускации, при котором исходный машинный код программы транслируется в инструкции уникальной виртуальной машины, сгенерированной в процессе защиты программы. Инструкции интерпретируются непосредственно в момент выполнения программы.
Особенность технологии.
При защите одной и той же программы каждый раз генерируются новые инструкции с разной логикой набора команд, которые могут быть выполнены только на той виртуальной машине, для которой были сгенерированы.
Виртуализация кода обеспечивает:
- отсутствие постоянных сигнатур в программном коде;
- противодействие попыткам внедрения;
- контроль целостности.
и т. д.
Конверт
Упаковка и шифрование секций защищаемого файла.
В процессе запуска защищенной программы специальный загрузчик производит распаковку и расшифрование файла перед тем, как управление будет передано оригинальной точке входа.
Программа зашифровывается по симметричному криптоалгоритму, ключ которого хранится во внешнем компоненте защиты (аппаратном или программном ключе).
Мутация кода
Метод обфускации, при котором исходный граф потока управления дополняется лишними инструкциями, ветвлениями, циклами и даже дополнительной логикой. В результате такого смешения становится сложно определить, чем является анализируемый участок кода – оригинальной программой или "пустышкой".
Обфускация
Изменение кода программы, в результате которого он принимает трудный, практически не поддающийся анализу вид, при этом сама программа сохраняет свою функциональность в полном объёме.
Профилирование
Статический и динамический анализ программы, в результате которого определяется оптимальный перечень защищаемых функций.
Для .NET программ
Автоматическая защита .NET предназначена для защиты .NET-сборок на платформах x86/x64/Any CPU. Режимы шифрования строк, обфускация графа потока управления, защита кода реализуются с использованием алгоритмов шифрования, которые вызываются из электронного ключа.
Различные модели электронных ключей Guardant помогут как реализовать режимы лицензирования по количеству запущенных копий в сети, так и ограничить время работы либо приложения в целом, либо его отдельных сборок. С помощью технологии псевдокода сам Native-контейнер и методы доступа к нему надежно защищены от статического и динамического анализа. Он реализует интерфейс для дешифрования данных c помощью электронного ключа Guardant, осуществляет проверку целостности, дешифрование и загрузки VM.
Для автоматической защиты .NET-приложений используется подход, основанный на двухуровневой защите, где каждый уровень выполняет свои задачи в общем процессе:
- символьная обфускация защищаемого MSIL-кода. Используется для затруднения анализа исходного кода программы. Но обфускация не в состоянии полностью защитить код от изучения: код можно декомпилировать, а затем изучить, хотя и с большим трудом.
- перенос части MSIL-кода исполняемых файлов и динамических библиотек в защищенное хранилище. Для более качественной защиты .NET используются методы отложенной компиляции MSIL-инструкций посредством технологии Reflection.Emit, которая позволяет осуществлять компиляцию MSIL-кода в процессе выполнения. Это дает полное сокрытие исходного текста, даже во время выполнения
Такая концепция позволяет существенно повысить уровень защищенности приложения в целом, так как распространенный инструментарий обратного анализа приложений .NET (ildasm, reflector.net и т. п.) становится бессильным.
Это обусловлено тем, что большая часть кода приложения будет храниться в защищенном Native-контейнере, который в свою очередь защищен псевдокодом и использует функционал электронного ключа.
Когда происходит вызов защищенного кода, который зашифрован на аппаратном алгоритме, то сначала происходит обращение непосредственно к самому ключу, и только после этого начинается выполнение кода.
Символьная обфускация
Наиболее простой способ запутать злоумышленника, анализирующего код. Производит переименование имен типов, событий, свойств, методов, в результате чего код становится трудночитаемым.
Допускается использоваться непечатный набор символов, что сильно усложняет проведение статистического анализа кода.
Символьная обфускация необратима.
Типы и методы, доступ к которым происходит с использованием Reflection API, нельзя обфусцировать.
Результат работы символьный обфускации MSIL кода:
Шифрование строк
В процессе обфускации все текстовые строки оригинального кода зашифровываются с использованием электронного ключа и помещаются в защищенный native–контейнер.
Метод применяется для сокрытия важной информации, которая может заинтересовать злоумышленника или облегчит поиск нужного ему фрагмента кода.
Используя Reflection API для вызова функций, данный метод позволяет зашифровать имена методов и типов.
Результат работы шифрования строк:
Обфускация потока выполнения
Обфускация потока выполнения предоставляет возможность разбить код методов на несколько блоков, добавить фальшивые и скрыть от анализа последовательность их исполнения. Последовательность исполнения блоков в этом случае будет зашифрована с использованием электронного ключа Guardant.
При этом в реальных функциях количество блоков легко превышает 10, делая невозможным статический анализ кода.
Результат работы режима обфускации графа потока управления:
Значительно повышает эффективность обфускации, за счет того, что в коде программы практически не остается оригинальных лексических элементов и понять назначение функций по их названию становится невозможно.
Обфускация внешних интерфейсов применяется при условии, что в группу обфусцируемых файлов включаются все сборки, входящие в программу, и ни одна из этих сборок не используется извне.
Как правило, этот тип обфускации используется для большинства exe-сборок, т. к. они редко содержат экспортируемые элементы или рефлексируются другими сборками.
Однако для dll-сборок использование обфускации внешних интерфейсов возможно лишь при условии замкнутости программы.
Обфускация внешних интерфейсов используется только совместно с символьной обфускацией.



