Мануал по кряку игр с нуля
overbafer1
Всех приветствую!
Вводную часть по кряку можно посмотреть здесь (клик).
Сегодня будет подробный гайд по кряку игр с полного нуля.
Вы узнаете, как исследовать файлы, производить ревёрс-инженеринг, обходить защиту и тому подобное.
Основные термины:
Ревёрс-инженеринг - подобно обратной разработке кода. Вы не собираете код, а разбираете его по частям, чтобы понять как работает программа для своих дальнейших действий.
Дебаггер - вид программы, которые предназначены для поиска недочётов в коде, но им часто пользуются не только разработчики, но и крекеры для поиска дыр в коде.
Наша цель:
Нашей целью будет игра, которая закриптована, и чтобы она запустилась - нужно ввести правильный пароль:

Порядок действий:
- Узнать, зашифрована ли программа или нет.
- Узнать, на каком языке она написана.
- Выполнить соответствующие действия на основе первых двух пунктов.
Начнём с первых двух пунктов:
Нам понадобится PEiD:

Расписывать данный шаг я не буду, так как можно обойтись и без него.
А вообще, некоторые разработчики пользуются методом обхода таких программ, так что не следует на них сильно пологаться.
PEiD способен узнать, зашифрована ли программа и на каком языке она написана одновременно.
Отойдём от темы:
Можно сразу перейти к дебаггеру, но я бы хотел рассказать об ещё одном способе обхода защиты программ - через Process Hacker.
Данная программа способна взаимодействовать с запущенными процессами на компьютере.
Например с помощью неё можно обойти родительский контроль. Смотрите об этом здесь (клик).
ВАЖНО!:
Сейчас программа, которая была продемонстрирована в ролике обновилась и данный метод обхода уже не работает! Возможно в нашем телеграмм-канале выйдет пост на тему актуального способа обхода защиты данной программы.
Используем дебаггер:
Чтобы запустить сеанс отладки (то есть выбрать программу, которую вы хотите отладить (проанализировать)), мы будем использовать OllyDBG.
Программу желательно запускать от имени администратора!
File -> Open и выбираем программу:


Нажимаем ПКМ по коду и переходим к поиску:
Search for -> All referenced text strings

И ищем строки с информацией об ошибке при вводе пароля:

Если их удалось найти - значит они не зашифрованы, что очень хорошо, так как это позволит нам с ними работать.
Делаем двойной щелчок ЛКМ по найденной строчке, и программа показывает нам это в коде таким образом:

Тут действуем по ситуации.
Либо мы сразу же можем найти правильный пароль, либо листаем чуть выше и находим код, который срабатывает при вводе правильного пароля и роемся там.
Для обхода Game Protector нам достаточно поставить брекпоинт на найденной строчке в коде с сообщением о неправильно введённом пароле и запустить программу. Далее исследуем выведенную информацию в программе и найдём пароль.
Ставим брекпоинт нажатием ЛКМ по строчке в столбце Dissassembly:

Брекпоинт - преднамеренная остановка работы программы, после чего вызывается отладчик.
Открываем программу (F9 или Debug -> Run):

Вводим рандомный пароль:

Как видим, у нас не появилось в этот раз сообщение о неправильно введённом пароле. Это потому что процесс заморожен.
Смотрим в программе информацию в правом нижнем углу:

О чудо, пароль у нас!
Паролем оказалось слово "overbafer1".
Теперь мы можем вводить его для запуска программы или убрать крипт через Game Protector.
Задача посложнее:
Допустим, у нас есть файл, но разработчик постарался защитить программу от изменения.
Например, как здесь:

Скачать данный файл для теста можно здесь (клик).
Запускаем дизассемблер IDA и выбираем программу:

Дизассемблер - транслятор, преобразующий машинный код, объектный файл или библиотечные модули в текст программы на языке ассемблера.
Пподождем, пока IDA проанализирует наш файл.
После этого выберем File -> Produce file -> Create MAP file.


и сохраним МAР-файл в той же папке, где находится файл CRAKME-2.EXE.
После этого в окне отладчика OllyDbg выберем команду Plugins -> GODUP Plugins -> Map Loader -> Load labels -> Наш МАР-файл:

Функции сразу преобразились:

Смотрим список используемых программой функций:

Теперь нам нужны функции работы со строками. Дело в том, что раз мы вводим пароль в виде строки, то скорее всего и проверять его программа будет с помощью функций для работы со строками. Правда здесь уже понадобятся знания ЯП высокого уровня.
Выбираем экспортируемые программой функции для работы со строками:

Попробуем поставить брекпойнт на MessageBoxA:

Нажимаем в OllyDbg клавишу F9 (или Debug -> Run) и вводим любые символы:

Адрес возврата указывает на 401E1A. Давайте посмотрим, что за код находится по этому адресу. Для этого ПКМ в верхней ячейке стека - Follow in Disassembler:

Над двумя MessageBoxA видим интересную строку:

На первый взгляд, функция сравнивает две строки текста. А зачем программа что-то сравнивает? Она берет введенную нами строку и сравнивает ее с зашифрованной в программе. Если есть совпадение, значит, появится сообщение о том, что пароль верный, а если нет — о том, что неверный. Установим брекпойнт по адресу 00401DC6 и перезапустим программу. Вводим в окне программы символы пароля и попадаем на наш брекпойнт:

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

В ЕAХ - введенные нами символы, а в EDX - символы, с которыми сравниваются наши. Это значит, что символы из регистра EDX и есть правильный пароль.

Вводим пароль и смотрим результат:

Готово!
• Наш мерч: Магазин
• Youtube: overbafer1
• Второй Youtube: IGOR OVER
•🤖 https://overbafer1.ru/ - Эксклюзивный бот для разведки и поиска информации в сети.
• Канал по крипте: CryptOVER