Гайд О методах защиты

  • Автор темы Автор темы n0entry
  • Дата начала Дата начала
Пользователь
Пользователь
Статус
Онлайн
Регистрация
12 Дек 2022
Сообщения
129
Реакции
31
Проблема защиты ПО остаётся одной из важнейших. С точки зрения реверс-инжиниринга и защиты, условно можно выделить три направления: защита приложения, защита кода и защита алгоритма. В статье мы разберём каждый из этих аспектов подробно
Защита приложения (Packing, Obfuscation Shells)

Защита на уровне приложения (также известная как "пакеры", "обфускаторы", "оболочки") — это способ защитить авторские права, ресурсы и ключевую логику. Термин "оболочка" (shell) здесь не случайный — как у яйца есть скорлупа, так и у программы может быть "оболочка", которая защищает содержимое
Исторически защита программ существовала ещё в эпоху DOS — тогда начали появляться первые техники анти-дизассемблинга. Позже "пакеры" эволюционировали в более продвинутые решения, среди которых можно выделить следующие типы:

Компрессирующие пакеры
(упаковка кода)
Шифрующие пакеры (шифрование с runtime-дешифрацией)
Экстрагирующие пакеры (разделение логики на runtime-загрузку)
Защитные/обфусцирующие пакеры
Виртуализирующие пакеры (VMProtect, Themida, другие.......)


Одной из главных целей является скрытие настоящей точки входа (OEP, Original Entry Point) — иногда подменяют её фейковой. Чтобы выполнить "анпак", реверсеру нужно найти настоящий OEP и восстановить исполняемый код
Процесс анпака схож с криптографическим процессом расшифровки — это обратная операция к упаковке. Обычно он включает три этапа:
  1. Отслеживание runtime-логики пакера
  2. Сбор распакованных данных
  3. Воспроизведение или симуляция логики "распаковщика"
Виртуализированные пакеры (VM) работают иначе — здесь необходимо найти интерпретатор и понять, как байткод сопоставляется с исходными инструкциями
Анпак может выполняться различными способами: через дампинг памяти, перехват API (Hooking), либо инъекцией. Метод зависит от типа пакера и уровня защиты

Защита кода (Code Obfuscation)

Если защита приложения — это замок на двери, то защита кода — это запирание каждой комнаты в доме. Из-за мелкозернистой структуры кода, методов защиты здесь больше
Цель обфускации — замедлить реверсера, усложнить анализ и отладку. Однако, это не "пуля в лоб" — обфускация не даёт 100% защиты, но она усложняет задачу. НО, она может влиять на производительность, поэтому всегда требуется баланс

Основные виды защиты:

Статическая обфускация

Статический анализ
— это анализ бинаря без выполнения. Он позволяет построить карту программы (CFG, AST и т.д.). Чтобы усложнить такую аналитику, применяют:

Лейаут-обфускация: удаление/искажение метаинформации (комментарии, имена, отладочные символы)
Обфускация данных: маскирование строк, чисел, логических выражений
Контрольная обфускация: изменение control flow — например, с помощью непрозрачных предикатов, junk-кода, flattening'а
Превентивная обфускация: вставка анти-анализных конструкций — проверка на отладчики, "цветочные инструкции", ложные ветви и ловушки

Обфускация данных:

Строки
— шифруются/кодируются, чтобы скрыть семантически важные элементы: имена классов, ошибок, функций
Числа — преобразуются через формулы, побитовые операции, смену систем счисления
Булевы выражения — обфусцируются через арифметику или костыльные логические конструкции

Динамическая обфускация

В отличие от статической, динамическая защита работает в рантайме. Это позволяет противостоять динамическому анализу и инструментам отладки

Основные техники:

SMC (Self-Modifying Code)
— самопереписывающийся код, который меняет себя в памяти, ломая дизассемблеры
VM (виртуальные машины) — исполняемый код транслируется в байткод, интерпретируемый на лету

SMC активно использует особенности архитектуры фон-Неймана, где код и данные — в одном адресном пространстве. Это позволяет внедрять инструкции прямо в кодовую секцию, которые модифицируют другие инструкции — это сильно усложняет дизассемблирование и отладку

Полиморфизм и метаморфизм

Полиморфная защита — динамическое изменение кода при каждом запуске или сборке. Даже если функционал идентичен, бинарь будет отличаться
Метаморфизм идёт ещё дальше — изменяется не только обёртка, но и тело алгоритма. Это не просто перестановка инструкций, а глубокая трансформация логики исполнения (иногда даже с заменой структур данных и паттернов)

Защита алгоритмов

Шифрование и кодирование — частая практика, но использование стандартных алгоритмов вроде Base64, MD5, AES делает бинарь уязвимым, потому что их легко распознать по сигнатурам

Методы защиты:

Алгоритмический моддинг (алгоритм-модификация)
— кастомизация криптоалгоритма, изменение операций, таблиц, констант и логики
White-Box криптография — объединение алгоритма и ключа в единую таблицу, которая заменяет традиционную криптографию
Шифрование/ дешифрование происходит без раскрытия ключа в явном виде
TEE (Trusted Execution Environment) — защищённое исполняемое окружение на уровне железа, где происходит выполнение критически важных
операций (например, Android Keystore, Intel SGX)


Если защита не развивается, то со временем она теряет смысл — любая статичная защита будет сломана. Только за счёт комбинации методов и постоянной эволюции можно достигать приемлемой устойчивости к реверсу
 
Это перевод ? Или нейронка ? В любом случае непонятен контингент кому эту статью пишешь, даже мне как человеку +- шарющему тяжело читать такой набор информации а новички скипнут почти сразу. Надо реверс и техники защиты более на практике рассматривать примерами там и тд имхо
 
Хороший материал, который заинтересует как новичков, так и более осведомленных читателей. Для большей наглядности и лучшего усвоения информации было бы полезно дополнить теорию практическими примерами: например, давать определение термина и сразу иллюстрировать его применение или принцип действия.
 
1746726738839.png
 
Назад
Сверху Снизу