Простая антиотладка и взлом через Windows-сообщения. Крэкинг ч.18

Обсудить статью на форуме


Массу свежих 2020 года крэкерских инструментов, видеоуроков и статей вы сможете найти на видеокурсе от нашего сайта. Подробнее здесь.


Приложение к статье

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

Но эту тему мы начнём в 19-ой главе, так как среди тех, кто изучает этот курс, нашлись люди, написавшие мне на почту и попросившие разобрать пример крэкми без кнопок как в прошлой части, и рассмотреть применение другой техники, использующей WM_KEYUP.

Хорошо, используем для этого крэкми, предоставленный мне Stzwei’ем (спасибо ему), который называется _4stz.exe. Его мы и рассмотрим в данном туториале.

Откроем крэкми в OllyDbg.

Взлом программ отладчиком OllyDbg

Находимся на точке входа. Посмотрим, какие здесь есть незапакованные строки.

Взлом программ отладчиком OllyDbg

Отображается список строк, используемых программой.

Взлом программ отладчиком OllyDbg

Здесь нет ничего интересного, посмотрим API-функции.

Взлом программ отладчиком OllyDbg

Взлом программ отладчиком OllyDbg

Уфф, так много.. Ок, запустим программу и окажемся в окошке, где вводится серийный номер.

Взлом программ отладчиком OllyDbg

Видим, что кнопки регистрации нет. Введём полное имя.

Взлом программ отладчиком OllyDbg

И установим BPX CONDITIONAL LOG на TranslateMessage – сначала обычный BPX.

Взлом программ отладчиком OllyDbg

А когда вернёмся в крэкми, отредактируем установленный BP.

Взлом программ отладчиком OllyDbg

Если кто-то не помнит значение WM-сообщения, которое собираемся использовать, то нужно перейти в окно W, которое показывает, какие окна используются программой.

Взлом программ отладчиком OllyDbg

И отображается список окон, осталось только узнать числовое значение, поэтому кликаем правой кнопкой мыши.

Взлом программ отладчиком OllyDbg

И мы попадаем в окно точек останова на сообщения с раскрываемым меню с WM-значениями.

Взлом программ отладчиком OllyDbg

Поищем в списке WM_KEYUP.

Взлом программ отладчиком OllyDbg

Видим, что это 101, поэтому уберём всё, что мы делали только для того, чтобы узнать это значение, и вернёмся к BREAKPOINT CONDITIONAL LOG в TranslateMessage.

Взлом программ отладчиком OllyDbg

И устанавливаем здесь MSG==1 (обратите внимание на двойной знак равенства), также, если бы не нашли значение, могли бы написать MSG==WM_KEYUP и это бы сработало, но мне больше нравятся числовые значения. Здесь каждый волен поступать так, как ему это нравится.

Хорошо, точка останова трансформировалась в условную (розовый цвет).

Взлом программ отладчиком OllyDbg

Делаем RUN и вводим первый символ неправильного серийного номера.

Взлом программ отладчиком OllyDbg

И тут срабатывает условная точка останова.

Взлом программ отладчиком OllyDbg

Смотрим параметры API-функции, по адресу 12ff78 находится структура, в которой сохранены значения нажатой клавиши, в данном случае это 39, что соответствует цифре 9.

Смотрим через DUMP указанную область памяти – нажимаем правую кнопку мыши на указанном адресе и выбираем FOLLOW IN DUMP.

Взлом программ отладчиком OllyDbg

Взлом программ отладчиком OllyDbg

Видим, что мы удалось узнать, куда помещается байт. Проблема в том, что это программа на Delphi (что мы рассмотрим в другой раз), и если мы установим на него BPM ON ACCESS, программа будет ходить сто раз туда-сюда, прежде чем дойдёт до сравнения, поэтому метод, который мы рассматривали в прошлый раз, работает здесь гораздо лучше, так что его мы и используем. В любом случае, вы уже знаете, как остановить программу по нажатию клавиши и как установить местонахождение байта. Разумеется, в крэкми, не написанном на Delphi, гораздо проще использовать BPM ON ACCESS.

И запускаем.

Взлом программ отладчиком OllyDbg

Вводим 9898, идём в окно M и ищем по всей памяти.

Взлом программ отладчиком OllyDbg

Нажимаем правую кнопку мыши и выбираем SEARCH.

Взлом программ отладчиком OllyDbg

Взлом программ отладчиком OllyDbg

И ищем строку 9898.

Взлом программ отладчиком OllyDbg

Первое вхождение обнаруживается в стеке. Нажимаем CTRL+L несколько раз, чтобы увидеть, сколько раз оно в нём встречается.

Как только нам внизу отобразится жёлтым цветом слово ITEM NOT FOUND, выходим и возвращаемся в окно M.

Взлом программ отладчиком OllyDbg

Оказываемся там, откуда искали, так что идём дальше вниз с помощью CTRL + L.

Взлом программ отладчиком OllyDbg

Первый раз в этой секции, нажимаем CTRL + L, чтобы посмотреть, найдётся ли здесь что-либо.

Нет, ничего, нет, если посмотрим область, находится вхождение чего-то подозрительного.

Взлом программ отладчиком OllyDbg

Видим возможный серийный номер 418507, установим на это место BMP on ACCESS, чтобы посмотреть, не с ним ли происходит сравнение.

Взлом программ отладчиком OllyDbg

Делаем RUN.

Взлом программ отладчиком OllyDbg

Останавливаемся здесь и видим, что копируется моё имя.

Взлом программ отладчиком OllyDbg

Видим, что каждый раз, когда печатаем, по новой копируется мой неправильный серийный номер, и с каждым следующим символом по новой копируется правильный серийный номер. Как только введём 6 символов, то установим на них BPM (помните, в предполагаемом серийном номере как раз 6 символов? – прим. пер.).

Взлом программ отладчиком OllyDbg

Останавливаемся прямо на сравнении.

Взлом программ отладчиком OllyDbg

Тут видим, что ESI и EDI указывают на неправильный и правильный серийные номера.

Взлом программ отладчиком OllyDbg

Они сравниваются по четыре байта за оборот цикла. Проверим, является ли найденный серийник действительно верным.

Взлом программ отладчиком OllyDbg

(Сообщение гласит: «Поздравляю, победитель!» - прим. пер.)

Видим, что не смотря на то, что это сложный крэкми, можно поймать точный момент, когда происходит сравнение, для чего нужно отслеживать местоположение неправильного серийного номера и ставить на него BPM.

Есть и другая возможность. Видим, что в памяти появляются 4 байта неправильного серийного номера.

Взлом программ отладчиком OllyDbg

Он же, но уже из 5-ти первых байтов, чуть ниже.

Взлом программ отладчиком OllyDbg

Соответственно, можем установить BPM ON WRITE на область, находящуюся ниже, где будет записан следующий символ.

Взлом программ отладчиком OllyDbg

Отметим место, куда будет помещён следующий символ, а затем делаем RUN.

Взлом программ отладчиком OllyDbg

Здесь записываю наиболее возможный серийный номер.

Взлом программ отладчиком OllyDbg

Делаем RUN.

Взлом программ отладчиком OllyDbg

И далее программа останавливается на том месте, где копируется неправильный серийный номер, и прежде, чем это произойдёт, можем установить на него BPM ON ACCESS, а затем выполнить RUN и снова остановиться точно на сравнении.

Взлом программ отладчиком OllyDbg

Хорошо, думаю, что это был сложный случай, какой бы способ вы не избрали, так как место, в котором сохранялся серийник, постоянно менялось.

Ладно, оставляю домашнее упражнение – крэкми CrueHead’а 2, а со следующей главы мы переходим к новой теме.

  [C] Рикардо Нарваха, пер. Aquila

Обсуждение статьи: Простая антиотладка и взлом через Windows-сообщения. Крэкинг ч.18 >>>


При перепечатке ссылка на https://exelab.ru обязательна.



Видеокурс ВЗЛОМ