Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Сегодня мы продолжим разговор о популярных защитах программ и о способах их обхода. На очереди Obsidium, который считается одним из самых серьезных инструментов наряду с VMProtect и Themida. Среди заявленных функций — полный джентльменский набор: виртуализация, антиотладка, обнаружение VM, защита памяти, проверка целостности, защита импорта, свой API для интеграции в пользовательскую программу и прочие вкусности, осложняющие жизнь простому хакеру.
warning
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
На примере программы, использующей одну из последних версий Obsidium, попробуем разобрать слабые и сильные места этой защиты. В статье, посвященной другому популярному протектору — Enigmа, я рассказывал о популярном у разработчиков способе защиты приложения: пользователю предоставляется ознакомительный период работы с программой — можно использовать ее определенное время или выполнить определенное количество запусков. Есть такая возможность и у Obsidium. Скачав с официального сайта демоверсию защиты (последняя актуальная версия — 1.7.3.3), запускаем ее.
Интерфейс Obsidium
Для начала, как нам советуют, создадим новый проект и в его настройках укажем защиту приложения в виде триального периода. Для этого жмем в левой вертикальной панели графическую кнопку с шестеренками Settings и открываем вторую справа вкладку Time trial.
Настраиваем триальный период для программы
Как видишь, здесь присутствует такой же джентльменский набор функций, как и в Enigma:
Немного неочевидным кажется предназначение четырех полей ввода в левой нижней части окна под общим заголовком User-defined trial counters. На самом деле, как я уже говорил, для тех привередливых пользователей, которым мало стандартной защиты по времени или количеству запусков, Obsidium предлагает набор своих функций для интеграции в программу. В качестве одного из вариантов разработчик может устанавливать собственные триальные счетчики, контролируемые прямо из кода во время выполнения программы. Это четыре целочисленные 16-битные переменные, сохраняемые в системе до следующего запуска программы, значения которых можно читать функцией int obsGetTrialCounter(DWORD dwCtrIdx)
и декрементировать функцией bool obsDecTrialCounter(DWORD dwCtrIdx, short wValue)
. Эту функцию можно использовать, например, если мы хотим, чтобы программа после десяти сохранений блокировала функцию Save и продолжала дальше работать как ни в чем не бывало, без дальнейшей возможности сохранить файл на диск. Этот инструментарий предоставляет пользователям более гибкие возможности управления триалом.
Защита установлена!
После установки нужных параметров защиты жмем вторую снизу кнопку в левой панели с надписью PROTECT, затем во вкладке Executables выбираем файл защищаемой программы и, наконец, нажимаем кнопку Protect All. Теперь наше приложение под защитой демоверсии Obsidium, о чем нам будет напоминать раздражающее окошко при каждом ее запуске.
Потренировавшись на кошках, перейдем к взлому приложения. Итак, у нас имеется триальная версия программы, которую DIE идентифицирует следующим образом:
Obsidium v1.5.4.x - [ v1.6.x.x - 1.x.x ] - Obsidium Software - www.obsidium.de *ACM , Overlay : FE4711... Nothing detected
С первого взгляда очевидно, что загружать такое в дизассемблер совершенно бесполезно: код сильно сжат или зашифрован (на самом деле и то и другое). Секции пустые, из импорта имеются в наличии всего четыре функции. Попробуем сразу загрузить ее в отладчик.
Источник: xakep.ru