# Глава 17

## Крэкми CrueHead’а

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

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvaARM-r1SKj3Aar%2F1.png?generation=1566513546436621\&alt=media)

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

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvaM9GWMOvAeBmHo%2F2.png?generation=1566513546636282\&alt=media)

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

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvaYbaUr0sLlIX0e%2F3.png?generation=1566513546035918\&alt=media)

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

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvamSf9C8vbpANqN%2F4.png?generation=1566513546574025\&alt=media)

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

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

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvayddoxgcdZkM7B%2F5.png?generation=1566513546857217\&alt=media)

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

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvbCxbnAO52vXVUs%2F6.png?generation=1566513546574706\&alt=media)

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

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvbLMNoqeaQYld4_%2F7.png?generation=1566513546798840\&alt=media)

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

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvbUbOpIro8Y8_xt%2F8.png?generation=1566513546371060\&alt=media)

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvbbx891ryWFkUT6%2F9.png?generation=1566513546736607\&alt=media)

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

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvbngi3DrZD1Qo7R%2F10.png?generation=1566513546469958\&alt=media)

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

## Игра Canasta v5.0

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

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

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

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvbx1yY0eNHFJ3MV%2F11.png?generation=1566513546758856\&alt=media)

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

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvc6KYnQIVY5D6Gj%2F12.png?generation=1566513546433180\&alt=media)

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

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvcGcu6c7Kn_eKB7%2F13.png?generation=1566513546463876\&alt=media)

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

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

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvcQUupuXuf--xL8%2F14.png?generation=1566513546659041\&alt=media)

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

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvcXQYg_YuuhqCrv%2F15.png?generation=1566513546591676\&alt=media)

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

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvce8QG1LAmgwk29%2F16.png?generation=1566513546747720\&alt=media)

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

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvcmoDwBPfSwce6e%2F17.png?generation=1566513547019168\&alt=media)

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

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvcu9LZ4Itk7LZHV%2F18.png?generation=1566513548030355\&alt=media)

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

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvd2xRr50JQ8bWCp%2F19.png?generation=1566513546686645\&alt=media)

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

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvd95Xok9fR77aAp%2F20.png?generation=1566513546640482\&alt=media)

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

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvdHJEc4-u0rTcSr%2F21.png?generation=1566513547022209\&alt=media)

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

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvdPhc_R0vHU-4Xs%2F22.png?generation=1566513554019861\&alt=media)

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

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvdXGF2p9IzZdF7h%2F23.png?generation=1566513547366292\&alt=media)

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

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

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvdeLGoZEn0lG86e%2F24.png?generation=1566513547494057\&alt=media)

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

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvdmBUfwVWZQDyCd%2F25.png?generation=1566513553471533\&alt=media)

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

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvdufyt30Qi4U-gf%2F26.png?generation=1566513546991483\&alt=media)

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTve1lVwWOm9tGnNz%2F27.png?generation=1566513546628675\&alt=media)

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

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTveANGVZkCnBqvBT%2F28.png?generation=1566513546661103\&alt=media)

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

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTveI-vMOiqxGN6tc%2F29.png?generation=1566513546455624\&alt=media)

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

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvePDAH7C2svZ0Bx%2F30.png?generation=1566513546483147\&alt=media)

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

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTveYVsAQ5acj4UmP%2F31.png?generation=1566513552181935\&alt=media)

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

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTveeY6sYjWMrjHe1%2F32.png?generation=1566513546841846\&alt=media)

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvemz9AUoMe9DJF7%2F33.png?generation=1566513547598664\&alt=media)

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

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTveuceXvq8J3U__H%2F34.png?generation=1566513548476084\&alt=media)

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

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvf0k9QvVWxto3D3%2F35.png?generation=1566513558695373\&alt=media)

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

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvf8bTnkb5-dUi1J%2F36.png?generation=1566513546759299\&alt=media)

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvfGh5hMhHCsEDpn%2F37.png?generation=1566513546726492\&alt=media)

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

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvfQbxP71X7aeLZq%2F38.png?generation=1566513546664547\&alt=media)

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvfYcGYOsvLQ4XBO%2F39.png?generation=1566513546580025\&alt=media)

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

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvffWc3xa5kCUW5k%2F40.png?generation=1566513546731658\&alt=media)

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

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvfmxK6bVzw6AcVt%2F41.png?generation=1566513546540480\&alt=media)

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

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

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvft0Ms0RELgo1Va%2F42.png?generation=1566513546872597\&alt=media)

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

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvg0uwl6eyXsYC5-%2F43.png?generation=1566513546496891\&alt=media)

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

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvg7ouoKdTSUXJhm%2F44.png?generation=1566513546987439\&alt=media)

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

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

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