Мы неоднократно публиковали развернутые статьи по дизассемблированию приложений и не собираемся останавливаться на достигнутом. Однако многие программы используют различные механизмы антиотладки, из‑за которых подступиться к ним становится непросто. Сегодня мы поговорим о том, как вскрыть популярную у разработчиков защиту Enigma версии 5 и выше, использующую продвинутые инструменты противодействия анализу и взлому.
Бытует распространенное мнение, что к категории крутых, хороших годных защит относятся VMProtect и Themida. В них, мол, и криптование, и виртуальные машины, и антиотладка. Все остальное — так, для лохов и младших школьников. Например, для какой‑нибудь «Энигмы» в сети можно найти кучу туториалов и видосов с инструкциями по взлому, воспользовавшись которыми, любой нуб может почувствовать себя кулхакером.
Отчасти утверждение справедливо: туторов, включая видео, в интернете действительно полно, а при желании можно найти и однокликовые тулзы для взлома приложений. Некоторые из них даже работают. С небольшой оговоркой — это касается старых версий защиты, которая была, мягко говоря, не очень. В последних версиях Enigma создатели постарались как можно сильнее осложнить жизнь хакерам.
Большинство решений они позаимствовали у «взрослых» защит (ниже читатель сможет в этом убедиться). Однако, как известно, в этом мире нет ничего нового, и использование известных решений не делает взлом защиты более простым и приятным. Скорее наоборот. Давай убедимся в этом, хорошенько пощупав Enigma собственными руками.
Ради эксперимента скачаем какую‑нибудь программу (для простоты — дотнетовскую) и натравим на нее, например, Exeinfo. Предположим, анализатор опознал упаковщик как Enigma Protector x64 [v.5.0 — 7.0]. Вот и отлично, мысленно выдыхаем мы: не VMProtect и не Themida, а по Enigma точно что‑то можно найти на YouTube. Лезем в гугл — и правда, видосов полно, однако максимальная ломаемая версия — 4, а по x64 нет вообще ничего.
Ну что ж, думаем мы, не боги горшки обжигают: не могли же они придумать что‑то принципиально новое? Попробуем действовать по образу и подобию, авось получится. И вот тут нас поджидает неприятный сюрприз.
Практически все «кулхакерские» мануалы начинаются с одной и той же неизменной фразы: «загрузите программу в отладчик» или «создайте дамп приложения». Именно на этом шаге исследователя подстерегает первый коварный облом. В любимый всеми x64dbg программа не грузится вообще, дамперы запущенную софтину тоже не желают дампить, а если это и удается, то на выходе получается совершенно неработоспособный (и уж и близко не дотнетовский) кусок памяти. Даже в работающем приложении .NET не распознается от слова «совсем», dnSpy ее родной не признает и аттачить не хочет. Приаттачить программу удается разве что в x64dbg, но при малейшей попытке сдвинуться с точки останова процесс мгновенно закрывается. В общем, налицо все признаки взрослой защиты — шифрование кода, защита от дампа и отладчика.
Придется браться за дело основательно. Для начала установим плагины ScyllaHide и Scylla, чтобы хоть как‑то заработала отладка. Благодаря первой тулзе программа наконец‑то позволяет загрузить себя в отладчик. Однако радость оказывается преждевременной: после прерывания в процессе никакие настройки ScyllaHide не позволяют нам продвинуться дальше, программа захлопывается с завидным упорством. Scylla придет на помощь чуть позже, пока же попробуем извлечь всю выгоду из маленькой победы, которую мы только что одержали.
Итак, программа загружена в отладчик и пошагово трассируется. Потихоньку двигаемся, минуя несколько саморасшифровывающихся участков кода, и обнаруживаем, что они — всего лишь обвязка для огромной упакованной и зашифрованной секции, стартовая точка которой выглядит так:
push rcx push rdx push r8 push r9 mov r8,000B5ED8E call .00007FF7`BA4D9610 mov r8,0 mov rdx,1 mov rcx,[rsp][000000018] call .00007FF7`BA4E49A0 mov r8,0 mov rdx,1 mov rcx,[rsp][000000018] call .00007FF7`BA13E400 pop r9 pop r8 pop rdx pop rcx call .00007FF7`BA12A210
Вот тут нам и пригодится ранее установленная Scylla — эту секцию можно сдампить в EXE-файл. Толку, правда, от этого мало: модуль неработоспособный. Вдобавок это явно не наш искомый защищенный модуль, дотнетом там по‑прежнему не пахнет, однако пахнет — сюрприз! — Delphi. Оказывается, Enigma написана на дельфи! Но это вовсе не упрощает нам жизнь.
Углубляясь пошагово в последний call
, мы довольно быстро вязнем в мешанине безумного кода. Похоже, мы не сильно продвинулись в нашем исследовании: замучаешься пошагово перемещаться до ближайшего осмысленного места, а безболезненно прерваться в процессе выполнения кода антиотладчик по‑прежнему не дает.
Попробуем зайти с другой стороны. Внимательно посмотрев на сдампленный модуль, мы обнаруживаем, что он не такой уж и бесполезный. У него, внезапно, есть экспортируемые символы:
0 .00007FF7`BABBD06E EP_RegHardwareID 1 .00007FF7`BABBD073 EP_RegHardwareIDA 2 .00007FF7`BABBD078 EP_RegHardwareIDW 3 .00007FF7`BABBD07D EP_RegCheckKey 4 .00007FF7`BABBD082 EP_RegCheckKeyA 5 .00007FF7`BABBD087 EP_RegCheckKeyW 6 .00007FF7`BABBD08C EP_RegSaveKey 7 .00007FF7`BABBD091 EP_RegSaveKeyA 8 .00007FF7`BABBD096 EP_RegSaveKeyW 9 .00007FF7`BABBD09B EP_RegLoadKey 10 .00007FF7`BABBD0A0 EP_RegLoadKeyA 11 .00007FF7`BABBD0A5 EP_RegLoadKeyW 12 .00007FF7`BABBD0AA EP_RegLoadAndCheckKey 13 .00007FF7`BABBD0AF EP_RegCheckAndSaveKey 14 .00007FF7`BABBD0B4 EP_RegCheckAndSaveKeyA 15 .00007FF7`BABBD0B9 EP_RegCheckAndSaveKeyW 16 .00007FF7`BABBD0BE EP_RegDeleteKey ...
Как нетрудно догадаться, EP
— это Enigma Protection, а точки входа указывают на какие‑то очень полезные ништяки, содержащиеся внутри.
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
1 год7690 р. |
1 месяц720 р. |
Я уже участник «Xakep.ru»
Читайте также
Последние новости