# Глава 17

## Крэкми CrueHead’а

Хорошо, прежде всего мы решим крэкми MEXCRK1.ZIP [\[ссылка\]](https://github.com/yutewiyof/intro-cracking-with-ollydbg/blob/master/.gitbook/assets/files/16/mexcrk1.7z). Он очень лёгкий. Откроем его в OllyDbg и окажемся в точке входа.

![](/files/PILsmPyXO1wmlzSZ29kB)

Смотрим строки, которые используются программой. Нажимаем правую кнопку мыши.

![](/files/DtZo3wGbedLN9wPABeFH)

Видим среди строк следующие:

![](/files/iNRTmhQUmERaNVU29Mcr)

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

![](/files/OclBRDm54rWStshqIOa4)

Видим, что здесь есть call, после которого управление передаётся на код либо с "WRONG CODE DUDE", либо c "THANKS YOU MADE IT".

Устанавливаем BPX на CALL в 42d534 и нажимаем RUN.

![](/files/qxIrMAEMmg0blZEVUtEC)

Введём неправильный серийный номер в поле, которое называется "Enter Serial #".

![](/files/gnSwSIWEr9UxDoTooDnN)

В моём случае печатаем Narvajita.

![](/files/wG2nbP04fY0Bbcg0NDxM)

Если войдём в режиме трассировки в CALL, то увидим, что сравнивается введённый серийник "Narvajita" со строкой "Benadryl".

![](/files/SWaHZeQygucDhH6RdGZU)

![](/files/DgP5HhkeyMDPdoMcyxeK)

Ок, теперь мы оказываемся рядом со сравнением, так что правильным серийным номером является слово "Benadryl". Сделаем RUN по-новой, убрав предварительно все BPX.

![](/files/oPG0im2xHxCclTPWLRNb)

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

## Игра Canasta v5.0

Ок, теперь разберём последний случай подобного типа, а со следующей главы начнём новую тему. Это небольшая программка, являющееся игрой под названием canasta 5.0 [\[ссылка\]](https://github.com/yutewiyof/intro-cracking-with-ollydbg/blob/master/.gitbook/assets/files/17/cansetup.7z).

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

Установим программу и зайдём в About.

![](/files/COwtdsFs5L5RI3ejnF0J)

Она стоит, друзья, 20 долларов, вернее 19.95.

![](/files/LonruwleA4QrMhtVBrWw)

Видим кнопку "ENTER LICENSE".

![](/files/SYgZOHp7NTnVCcbhhKpn)

Здесь говорится, что кнопка OK станет доступна, когда будет введена правильная комбинация.

Запустим программу в OllyDbg.

![](/files/YFT5VdQZvCzsGj6pR59U)

Мы оказываемся в точке входа.

![](/files/CakLgh4WRCDQ3t2oNtpG)

Уфф, список используемых API-функций велик, также как и список строк.

![](/files/qm6TKUqJl8T0OyE3P9T3)

Среди этих строк нет никаких, которые подходили бы нам по смыслу, хех.

![](/files/gVSE3Rfdjk4kVEjNYBot)

Запускаем программу в OllyDbg и оказываемся в окне регистрации. Попробуем применить какой-нибудь из методов взлома данного типа защит.

![](/files/PVPwwt9McD4AcgGpDrsh)

Вводим имя, предполагая, что оно может быть любым, поскольку узнать мы это можем только потом, затем вводим какой-нибудь редкий License Key, состоящий из 6 символов, например, WMYXSZ.

![](/files/J82GBZWYlh7Jg9UzvnMU)

Теперь нажимаем M.

![](/files/LPROeuWmM7iGdcfwchuY)

Поищем, нет ли в памяти строки "WM", соответствующей двум уже введённым буквам.

![](/files/qqfuTgftJqbMtt4dJRrg)

Нажимаем клавишу M, чтобы перейти в VIEW-MEMORY, и начать поиск вышеуказанной строки.

![](/files/sHcFiFYE6AB6hskoBT3r)

В данном случае отмечаем опцию CASE SENSITIVE, чтобы не выдавались аналоги WM в других регистрах.

![](/files/QoM6pD8Le6NyEjfpgK0z)

После двух или трёх раз, когда встретятся слова, начинающиеся с WM, и которые можно пропустить, нажав CTRL+L, и после того, как пройдём одну секцию и будем искать ниже в окне M, нам встретится WM, не входящая в состав других слов, и ещё ниже находится текст, говорящий о том, что на кнопку OK можно будет нажать после введения правильного серийного номера.

Поищем это место через DUMP.

![](/files/PiOBaTmtIj9RI7ViGFbZ)

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

![](/files/BeGqK6KR3wvjflYt2BsK)

Чтобы быть уверенными, что это именно та область, где сохраняется серийный номер, введём следующую букву в поле серийного номера.

![](/files/ZwcyuYxFUXm3xEQx770q)

![](/files/4xBvBbevKFMStYfABNfa)

После этого смотрим в DUMP, символ был добавлен, а значит это и есть область, где сохраняется серийный номер, поэтому ставим сюда BREAKPOINT MEMORY ON ACCESS, охватывающий 6 цифр (так как мы знаем, что их будет ровно шесть).

![](/files/OkxTcRFakYiipvNzqfPs)

Теперь делаем RUN.

![](/files/JlshewKf2wd08Zzcy5e2)

Появляется окно, в котором вводим следующий символ – "X".

![](/files/Jspbh35ahI5j6ttO6VNZ)

Останавливаемся на том месте, где происходит сохранение.

![](/files/FFTIjiKjScUmx4pBbur8)

Здесь по нажатию на F8 происходит копирование ESI в EDI.

![](/files/MYY2X4WOsZ4EnGveeVJy)

![](/files/xyuxDBTSQPp6obtQL4WF)

Здесь происходит копирование четырёх байтов, введённых нами ранее.

![](/files/0Mbh4V5ieUPDwtWITlN8)

По нажатию на F8 они копируются в 12E79C.

![](/files/P9iqwEwmDN8MC7E0fCoA)

Так как мы уже используем BREAKPOINT MEMORY ON ACCESS, то можем установить HARDWARE BPX ON ACCESS.

![](/files/iXKVq9fdUhZMbOotL79S)

![](/files/y1doEQiWxwyBk03zr01w)

Если оттрассируем немного, увидим моё имя также перемещается в стек.

![](/files/f1NIs0s4rKgcCTgkk7q0)

![](/files/RTwhZMnWW5bIfUknZYob)

Точно перед именем находится 0E, которое является его длиной, и она сравнивается с нулём.

![](/files/anPIOprRwaPHvM0g9KD8)

Так как не равно нулю, выполнение программы продолжается.

![](/files/2xDjxHAtmWX9vwNKPMB8)

Затем происходит сравнение имени с теми, кто находится в чёрном списке, то есть оно не должно быть TNO, afdad и т.п.

Снова делаем RUN.

![](/files/2qlNLVIoCBNSJatjcl9g)

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

![](/files/voKmp5JExa6DfZ4el1uK)

И можем посмотреть, действительно ли это правильный серийный номер. Убираем все точки останова.

![](/files/IdMSGfg9UCDRZiqyiNmu)

После его введения становится доступной кнопка "OK", после её нажатия мы регистрируемся, хе-хе. Другим способом, на объяснении которого я не буду задерживаться, но который не слишком сложен, является использование WM\_KEYUP каждый раз, когда нажимаем клавишу, чтобы останавливать OllyDbg и отслеживать, что происходит с введенным нами символом, но это довольно скучно, и способ, который мы применили, гораздо более простой.

Ок, давайте отдохнём немного. В следующей части мы изучим немного теории и рассмотрим несколько примеров по новой теме.

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://backoftut.gitbook.io/intro-cracking-with-ollydbg/ch-17.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
