> For the complete documentation index, see [llms.txt](https://backoftut.gitbook.io/intro-cracking-with-ollydbg/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://backoftut.gitbook.io/intro-cracking-with-ollydbg/ch-17.md).

# Глава 17

## Крэкми CrueHead’а

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

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-e1fdda066bcf1293d94daa552487c496c09ca698%2F1.png?alt=media)

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

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-354cbf813d86aa3ef5cf74c40271851403fd164b%2F2.png?alt=media)

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

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-7bcde15cf80fd8ef50c68a4882bc6a3d16ca65c7%2F3.png?alt=media)

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

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-0ac76c491a59f4659576ce45b6cffd0eb5712266%2F4.png?alt=media)

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

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

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-fdc8954b94fdf75b0b935c2c285ccdb7d27ca739%2F5.png?alt=media)

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

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-a066e2dd0b5e68e50024a7fedc008a66c5d1f9cc%2F6.png?alt=media)

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

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-42a8bae8b4360b280126cc4f12dc8c67b572084b%2F7.png?alt=media)

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

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-2409341bdf2b7c2510882319a3a99946abcaf5bf%2F8.png?alt=media)

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-06dd64c9201b44baf2cd93c612aefc91256c1286%2F9.png?alt=media)

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

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-5317f54a848082f64c680e195291613758a94d3f%2F10.png?alt=media)

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

## Игра Canasta v5.0

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

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

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

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-41edb5f14b9e3ddcad7ad517f26ab14bc3218bb3%2F11.png?alt=media)

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

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-39b4ec18748d96dba10b043482d5e73cfb8d9487%2F12.png?alt=media)

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

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-8deb02fca03615d39ce71bb2b4589036291a8553%2F13.png?alt=media)

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

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

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-3b5d22e04e3645e74f368e450629d2f67f1dcdd7%2F14.png?alt=media)

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

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-5e2bb9cf293ee54d513a90ba1dfae8ddc2530f9f%2F15.png?alt=media)

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

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-ef9cb4ba999a3e2ed9b6f040ddb90e0db03662a1%2F16.png?alt=media)

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

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-fc4d4fad8e56786a8417c363d96f74f6c086a926%2F17.png?alt=media)

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

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-a63a58af147c5b339c39068137af71aa9acb1afe%2F18.png?alt=media)

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

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-7782c8182c7db2cdadbca0a6ca22a59f86fa6243%2F19.png?alt=media)

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

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-58c3f101df50752856a6c402d7556ee0775a4da1%2F20.png?alt=media)

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

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-3aad3702702a8d0fc522a1941ce6716cfb46a22c%2F21.png?alt=media)

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

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-c2201ca0c256877d56952cc320c5295535d543e4%2F22.png?alt=media)

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

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-5fab1b658e9d04b1bf951def3d529152830797f4%2F23.png?alt=media)

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

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

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-c0d2761ff2cc27d19a6ad2fd47d0dcb623219e0b%2F24.png?alt=media)

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

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-2bf26260ccbe9644a28afac049c79aa951b5747a%2F25.png?alt=media)

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

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-bb27186432cd334ee4600514c01758dadbe6d0c5%2F26.png?alt=media)

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-52a9e32a138a0a6139a1b5afa5743bd8fefa6613%2F27.png?alt=media)

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

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-acf5ec379481576a498b85da920614fe6deef20f%2F28.png?alt=media)

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

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-ca4ac586a166ee55b448af9f9fe4593bfb245656%2F29.png?alt=media)

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

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-446236e19233d937241fe6a3447224b282ef627a%2F30.png?alt=media)

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

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-136022cb42ce0ffbe18219957c885986ae31c41b%2F31.png?alt=media)

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

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-5148b098be69747c3d066e2c5f941a54aa162ddd%2F32.png?alt=media)

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-ab72db288711f4f47a548deb6f901584bcf53265%2F33.png?alt=media)

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

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-3c9fc0d7ced85e52007ec787d86b2b644b83b4ad%2F34.png?alt=media)

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

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-144f1bb80ec7823653d6d002592987a0be73148f%2F35.png?alt=media)

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

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-e0fafc95ea637656964a2817541a637a93ea35ac%2F36.png?alt=media)

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-ab3ed33ecb95f65186dc95dd9a5ca0ae2b50bae0%2F37.png?alt=media)

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

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-23e6396f7e0611ac18de7c0b00aae7f3e9c6bb24%2F38.png?alt=media)

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-b0813f336bb49e1f85307cec0b7c94fdc6d1743b%2F39.png?alt=media)

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

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-54f3553f8b90348ff7c8e9e85cbbabe05a00cdf1%2F40.png?alt=media)

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

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-9e2486b7af05bc43f4867c9c090031f0334b739c%2F41.png?alt=media)

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

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

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-e6246f1b431e1cb7080f939f962c78cbddf5ace9%2F42.png?alt=media)

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

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-9fa0cf38c12af3743e00ac6521eb7496b787c6a6%2F43.png?alt=media)

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

![](https://2931627293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnwCNY88kcGMCQxNdy6%2Fuploads%2Fgit-blob-4bee3735916e35fdaef95377a9e2008020d2392e%2F44.png?alt=media)

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

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

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