Введение в крэкинг с нуля, используя OllyDbg - Глава 18

  • На форуме работает ручное одобрение пользователей. Это значит, что, если Ваша причина регистрации не соответствует тематике форума, а также Вы используете временную почту, Ваша учётная запись будет отклонена без возможности повторной регистрации. В дальнейшем - пожизненная блокировка обоих аккаунтов за создание мультиаккаунта.
  • Мы обновили Tor зеркало до v3!
    Для входа используйте следующий url: darkv3nw2...bzad.onion/
  • Мы вновь вернули telegram чат форуму, вступайте, общайтесь, задавайте любые вопросы как администрации, так и пользователям!
    Ссылка: https://t.me/chat_dark_time

AnGel

Администратор
Команда форума

AnGel

Администратор
Команда форума
27 Авг 2015
3,413
2,025
Пожалуйста, Вход или Регистрация для просмотра содержимого URL-адресов!


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

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

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

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

2d1d6f033c233175c9e7975f0b582737.png

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

f296b5cdffb98b765fe64dcc9f4dbc36.png

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

86456f42ba2f715c8356dab324a14db2.png

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

55bdba6b53f534c1068737db9318deb2.png

4463982594d90fa4ab5676f5f89ceb45.png

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

aa074cf2881e4be54b493b63af72bdb6.png

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

6851f04659277e784aca565bfbbddeeb.png

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

a2c08971120b52d2202e047f1da8a1ec.png

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

c2daa98911c27ddd489752b40c5f8193.png

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

f2b425547c395204424becc075c0b22d.png

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

5aee298b6153bb8db9670fe13f159141.png

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

407c0d68520bdcd091820317d5ca8347.png

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

e0e0949e4ad4039cde14446d9c817e1b.png

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

bc178588c3837f0bb2aa76207c25c7e2.png

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

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

664df4b32f35fe5b4d02f4414920cf2d.png

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

d954e09576863618b63617cdf8a9e84e.png

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

a8d02e5329dc0578ff737aa321f89916.png

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

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

b6a10a6e59451825ce671c862f787a86.png

468a14bad2d118b91c78d6825d5ac6bb.png

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

И запускаем.

83034ad3b430084a7cde065c8e686ad8.png

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

6a6f2b9d196122cad2704b71dc3a93f2.png

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

7f4d1e4369e9a9146c353cf72aa5beff.png

9a4a12f272344cfe5fcf097e509f8d3f.png

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

79981942a705e897eb605f09900f1427.png

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

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

f4e3a33d53b5b5aa57253e23676b535e.png

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

cf15f06b63d61028d127deac1316723a.png

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

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

13a8e27e96db5b27cc1c6416dab078c2.png

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

60e915c6c0466890be1cced86f73da8b.png

Делаем RUN.

7bb61862f0deeb4f951e8101d6f3803a.png

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

d284f7f619cec3f90044b5af4bbefb6e.png

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

d71661258e885fa7c5bed7cc522a54f1.png

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

a1cceeaa8bb2141a14b9b45472e840ba.png

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

2c7615f49a9804d4fa9efa101c8efe15.png

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

f6cab65a278997484e24c7c4331795e7.png

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

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

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

ce40b17edf2428431f1df4319f21d1cb.png

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

7342f17fcfe25583d0e3c0364d792bf2.png

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

a37a4336ce06e226caf38b67f32b405f.png

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

13c61b2f183d66d07f5ff12c87d51c02.png

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

a748200ddf29da0f3618279140d81709.png

Делаем RUN.

b00f7a0c269c03a575a5031a4e8ae4ac.png

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

b9115358a2b20fb41123d3405d13ef87.png

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

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

О нас

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

    Dark-Time 2015 - 2024

    При поддержке: XenForo.Info

Быстрая навигация

Меню пользователя