Поиск серийного номера для взлома крэкми. Крэкинг ч.13

Обсудить статью на форуме


Свежая 2020 года подборка видеоуроков, инструментов крэкера, книг и статей - здесь.


Файлы к статье

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

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

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

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

Взлом программ отладчиком OllyDbg

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

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

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

Здесь мы видим слово «FIACA», которое может быть ключом, и если мы не хотим работать, то можем просто перебирать встречающиеся в этом списке строки, чтобы найти верный, но этот метод не рекомендуется по следующим причинам:
  1. В данном случае строк всего две, но есть программы, в которых тысячи строк и пробовать их одна за одной просто безумие, и хотя в данном случае мы сразу видим возможный правильный серийный номер, если у нас их будет тысяча, то это будет маловерятно.
  2. Есть программы, у которых в этом списке есть строки, не являющиеся серийным номером, но выглядящие специально на него похожими и являющееся ловушками для крэкеров, поэтому гораздо лучше убедиться и проверить, что серийный номер действительно является верным.


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

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

Стоим на RET’е.

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

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

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

Взлом программ отладчиком OllyDbg

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

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

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

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

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

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

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

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

Abramos el LECCION 13 HARDCODED 2 en el OLLYDBG

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

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

Взлом программ отладчиком OllyDbg

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

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

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

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

Взлом программ отладчиком OllyDbg

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

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

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

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

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

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

Обсуждение статьи: Поиск серийного номера для взлома крэкми. Крэкинг ч.13 >>>


При перепечатке ссылка на https://exelab.ru обязательна.



Видеокурс ВЗЛОМ