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

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

AnGel

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

AnGel

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


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

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

Для практики у нас есть четыре экземпляра, двое из которых приходятся на эту главу и два посложнее на 14-ую.

Первый из этих крэкми называется “LECCION 13 HARDCODED 1”, и он – самый простой. Откроем его в OllyDbg.

369826af3287d69d071ab7aee0b4c5f0.png

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

Чтобы найти строки, используемые программой, кликнем на правой кнопке мыши и выберем SEARCH FOR – ALL REFERENCED TEXT STRINGS.

38c4d3ffdd69d2f037c09f711bdcfa3c.png

Результаты будут следующие:

32183d6fd53d7fc149f104eaaa749257.png

Здесь мы видим слово «FIACA», которое может быть ключом, и если мы не хотим работать, то можем просто перебирать встречающиеся в этом списке строки, чтобы найти верный, но этот метод не рекомендуется по следующим причинам:

  1. В данном случае строк всего две, но есть программы, в которых тысячи строк и пробовать их одна за одной просто безумие, и хотя в данном случае мы сразу видим возможный правильный серийный номер, если у нас их будет тысяча, то это будет маловерятно.
  2. Есть программы, у которых в этом списке есть строки, не являющиеся серийным номером, но выглядящие специально на него похожими и являющееся ловушками для крэкеров, поэтому гораздо лучше убедиться и проверить, что серийный номер действительно является верным.
Сначала посмотрим, какие API-функции используются, с помощью клика правой кнопкой мыши и выбора SEARCH FOR- NAME (LABEL) IN CURRENT MODULE.

01b38b951864db12f392437bd36c72df.png

Выводятся API-функции, используемые программой, и видим, что среди них есть нам известные.

8262bdd166ed2b27b06b23f5880d5a1e.png

Видим, что используется GetDllItemTextA для получения серийного номера, введённого пользователем, и MessageBoxA для вывода сообщений, является ли серийным номер верным или нет. Установим точку останова на каждую из этих API-функций.

a588e1fb49e45f92b92deba3bdebd655.png

Кликаем на обоих правой кнопкой мыши - TOGGLE BREAKPOINT ON IMPORT или то же самое с помощью commandbar’а.

6452ea8fbbc0a8c8790d6f76173a15d0.png

1e787bb5950f301466aba80773fb91da.png

Хорошо, нажимаем F9, чтобы запустить крэкми.

c0bdcd7698fab7ef57237d5b050e7d90.png

Появляется окошко для ввода серийного номера, давайте введём что-нибудь, например «narvajita», хе-хе (фамилия автора «Narvaja» – прим.пер.).

950710b48186b9960c6bf3c8d8e23fbd.png

Нажимаем на «Verificar» (проверить) и видим, что сработал BPX:

52096302b9a056a70da18362f51d5ed4.png

Если посмотрим стек, то увидим, что остановка произошла на GetDlgItemTextA, получающая введённый пользователем серийный номер, а в параметрах функции находится адрес буфера, куда он сохраняется, в данном случае – 403010.

e17e882e69c8b5953f099e14dcab73bf.png

Посмотрим, что находится по этому адресу через DUMP. Правая кнопка мыши – FOLLOW IN DUMP.

4cfc62e59694bde6ff1c287fa48b46d6.png

Видим буфер, но в нём ничего нет, так как API-функция ещё не выполнялась.

e9021106ac014e8c612f185cba8bf13f.png

Выберем EXECUTE TILL RETURN, чтобы она выполнилась до инструкции RET.

7e24b6c11fa57257aceff6b2f0778e85.png

Стоим на RET’е.

724e59037b22f9bee4c0e6a25e9564a3.png

А в буфере – то, что мы ввели.

fa7563cec0a3a41bb2d8d6e6ad45d42d.png

С этим понятно.

Если нажмём F7 и вернёмся в программу.

bef0200e3d00e49c4b6dd601f6626930.png

Увидим, что начинается сравнение и условный переход, который переходит либо на MessageBoxA, показывающий надпись “Mal Muy MAL” («плохо, очень плохо» - прим. пер.), либо на MessageBoxA, показывающий надпись “Muy BIEN” («очень хорошо» - прим.пер.) соответственно. Очевидно, что если мы исправим этот переход на JMP 401087, то будет всегда выполняться переход на вывод сообщения “MUY BIEN”, но в данном случае я хочу найти серийный номер, поэтому будем смотреть, что сравнивается.

В 401066 в EBX перемещается содержимое памяти по адресу 403010, которое является DWORD’ом. Посмотрим, что находится по адресу 403010 через DUMP.

5a356f85e297b330c988b8f3876a62b0.png

Отметим нужную строку, через правую кнопку мыши выберем FOLLOW IN DUMP-MEMORY ADDRESS и увидим, что там находится.

996c4d36b7c8c031e8b985a13140aa54.png

В пояснении видим, что там находится 7672616E, являющееся перевёрнутыми 4-мя байтами содержимого 403010, и это первые 4 байта неправильного серийного номера, который мы ввели. Они-то и были перемещены в EBX.

85ad6ed9e5369f0cef98bdbdf4de4937.png

Нажимаем F7 и переходим к следующей строке.

155d6550646cae88dd472b314bc24501.png

Здесь видим, что EBX, содержащий первые 4 байта неправильного серийного номера, сравнивается с содержимым ячейк памяти по адресу 403008. Посмотрим через DUMP, что там находится, так же как мы делали это в прошлый раз.

23fdd30426a71d02068b160c8181fad8.png

Видим, что там находятся первые четыре байта слова “FIACA”, которые и сравниваются с первыми четыремя байтами введённого серийного номера, из чего мы можем заключить, что если бы они были одинаковы, то активировался бы флаг Z, так как между ними не было было разницы, выполнился бы переход JE и вывелось бы сообщение “MUY BIEN”, но так как они не одинаковы, то нас ждёт суровое наказание, хе-хе.

8490375cbe2fafb03583f079c48e5f75.png

Раз они не одинаков, то перехода не происходит и выполнение идёт к окошку “MAL MUY MAL”. Нажимаем F9.

c51c78f58686897daf1a8351c0c9b67e.png

Мы стоим на другом вызове MessageBoxA.

6f408fa5ce71fadcee51b1fe5ba1d45b.png

И уже в параметрах функции видим, что она нам покажет.

Продолжаем выполнение программы.

1f5ae196da61355ea54f8314e1d95581.png

Как видим, было показано окошко с сообщением, что мы ошиблись, жмём на “OK” и вводим правильный код “FIACA”.

dc51a5386fa4affe55e6087e07be067e.png

Нажимаем на “Verificar” и повторяем процесс, пока не доходим до сравнения.

a3639c6c82f6b7323fe97af85971d157.png

Как и в прошлый раз, содержимое EBX сравненивается с содержимым 403008.

b47ad2456e1f80cd177f617e0e7a2873.png

В пояснении видим, что они оба одинаковы, поэтому в результате их вычитания друг от друга получится ноль и активируется флаг Z. Выполним сравнение с помощью F7.

ce2f0ad1acd70e1de9aaa2a1c09eebc4.png

Видим, что всё так и есть, поэтому выполнится JE.

e59db1e289370ddc7e55125b609110da.png

Видим, что переход произойдёт на MessageBoxA c MUY BIEN. Посмотрим с помощью F9.

4299734118213c5ebb116fecf51cb358.png

Здесь видим стек API-функции, которая отобразит нам правильное окошко.

47e8b656650eb9f0f9fbc2c2656c0140.png

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

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

Abramos el LECCION 13 HARDCODED 2 en el OLLYDBG

Открываем «LECCION 13 HARDCODED 2» в OllyDbg.

51978f824c93fc504a1a51860ca96b1c.png

Как видим, всё очень похоже, но в используемых строках нет правильного кода.

437116a4bd0552d829f6af52811d19ff.png

daf43078ebdfbd53f5e3dfa65e194aff.png

Нет ни “FIACA”, ни чего-либо другого похожего, хехе.

Да и верный код вовсе не “FIACA”, хехе.

Раз уже знаем, что здесь примерно происходит, идём сразу к сравнению.

d91c987df231643eeb5a14d2e735d007.png

Устанавливаем на 401064 BPX и делаем RUN.

e037bb79f832a2df87252a7acd06bba8.png

ea56a26857484971f886ece7905f66dc.png

Введём неправильный серийный номер (в данном случае LUCKY).

69ca4eba5503c41ff6e5276b087ab465.png

Нажимаем на “Verificar”.

a4309607755d76883b594f9208ccb8a1.png

И при срабатывании BPX видим, что в EBX помещается содержимое памяти по адресу 40300C. Смотрим через DUMP.

8788a13bf849a7765a4b31f6ed38cf72.png

Попсле выполнения этой строки в EBX перемещаются 4 байта, которые меняют порядок при перемещении в регистр.

60159a903b0e6fe331fab4d893315776.png

Нажимаем на F7 и оказываемся на EBX. MOV EBX, DWORD PTR DS: [40300C] перемещает только четыре байта.

f647374ec1ce522e46f9cd51c9baa534.png

В этом примере, который почти ничем не отличается, в EDX помещается содержимое 40204B, смотрим, что там.

a6958b49f52ce9fe4042a0fc84a28d62.png

Там находятся четыре байта, соответствующие строке 9898 и являющиеся правильным серийным номер. Они сравниваются с четырьмя байтами введённого нами серийного номера, и если они одинаковы, то совершается переход в область MUY BIEN, но в данном случае этого не происходит, поэтому нам нужно вернуться и ввести 9898.

ce5a5346605e5cc74d1774533bd80a3c.png

Нажимаем “Verificar”.

d31e6f2c19de7b0915e2f369c1216e24.png

При сравнении EBX с EDX оба равны 38393839, что соответствует строке 9898, поэтому совершается переход на вывод окна MUY BIEN.

4402d5de45337c30b55cd813661b6a65.png

d6fba5bb081aa0b5d4f634009cd4a486.png

Видим, что в этом крэкми мой друг сделал заголовок окна “BRAVO”, ха-ха! Но главное, что мы выяснили правильный серийный номер – 9898.

Далее мы увеличим сложность – у нас осталось два более трудных жёстко заданных серийных номера, на которых мы рассмотрим техники, применямые в более запутаннх случаях.

Если вы думаете, что я один буду работать, а вы нет, то вот вам третий крэкми (mielecrackme1.zip).

В качестве подсказки скажу, что API-функция lstrcmpA, встречающаяся в этом крэкми, используется напрямую для сравнивания строк. Когда встретите её, посмотрите на параметры в стеке.

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

О нас

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

    Dark-Time 2015 - 2022

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

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

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