Исследование защиты игры Challenger Tetris
Скриншот игры Challenger Tetris
Вы считаете, что хорошо играете в Тетрис? Что ж, игра Challenger Tetris от Terminal Studio готова вас в этом переубедить. Здесь на каждом уровне даются задания, например, очистить сколько-то одинарных и сколько-то двойных линий, продержаться некоторое время при сумасшедшей скорости падения фигурок, зачистить мусорные блоки и тому подобное. И нужно успеть завершить задание за определенное время. Отличная графика, качественное звуковое сопровождение, приятный геймплей - все это портят несколько моментов, например, необходимость покупки игры для снятия лимита по запускам.
На шароварности косяки не заканчиваются. С офсайта скачать игру не получится, ссылки ведут на 404-ю страницу. На серверах софтохранилищ можно найти несколько разновидностей версии 1.0, тогда как на сайте заявлена последняя версия 1.1. Так что будем работать с тем, что есть. Дистрибутив можно скачать, например, отсюда. Устанавливаем, смотрим. Игру можно запускать как напрямую через файл ChallengerTetris.exe, так и с помощью вспомогательного RUNNER.EXE. В первом случае игра просто запустится, во втором варианте можно настроить графику и другие параметры игры, а также произвести регистрацию.
Сообщение незарегистрированной игры
Начнем с главного исполняемого файла. Он ничем не накрыт, отправляем его в дизассемблер. Основным признаком отсутствия регистрации будет строка "UNREGISTERED", которая болтается в окне настроек и на игровом поле. Поиском по этой строке выходим на следующий код:
Code (Assembler) : Убрать нумерацию
- CODE:004621C9 cmp ds:byte_474B20, 0
- CODE:004621D0 jz short loc_4621DC
- CODE:004621D2 mov eax, 3
- CODE:004621D7 call sub_45BD1C
- CODE:004621DC loc_4621DC:
- ; Проверить состояние регистрации
- CODE:004621DC cmp ds:byte_47B780, 0
- ; Если байт больше нуля, то строку "Unregistered" не выводить
- CODE:004621E3 jnz short loc_462221
- CODE:004621E5 fld tbyte_4635F4
- CODE:004621EB fsubr dword ptr [esi]
- CODE:004621ED add esp, 0FFFFFFFCh
- CODE:004621F0 fstp [esp+0A4h+var_A4]
- CODE:004621F3 wait
- CODE:004621F4 fld tbyte_463600
- CODE:004621FA fadd dword ptr [edi]
- CODE:004621FC add esp, 0FFFFFFFCh
- CODE:004621FF fstp [esp+0A8h+var_A8]
- CODE:00462202 wait
- CODE:00462203 push 40800000h ; float
- CODE:00462208 push 0BFC00000h ; int
- ; Вывести строку "Unregistered"
- CODE:0046220D mov ecx, 0FFh
- CODE:00462212 mov edx, offset aUnregistered
- ; "Unregistered"
- CODE:00462217 mov eax, 3
- CODE:0046221C call sub_46C3BC
- CODE:00462221 loc_462221:
- CODE:00462221 fld ds:flt_47B974
- CODE:00462227 fcomp flt_463624
- CODE:0046222D fnstsw ax
- CODE:0046222F sahf
Перекрестные ссылки на байт регистрации
Таких мест всего два, за установку того или иного значения отвечает пара команд SETZ, во всех остальных случаях выполняются или проверки, или какие-то операции с установленным ранее значением этого флага. Смотрим листинг дизассемблера в месте нахождения команд инициализации флага:
Code (Assembler) : Убрать нумерацию
- CODE:00466988 lea eax, [ebp+var_4]
- CODE:0046698B push eax
- CODE:0046698C mov ecx, offset aReggame ; "RegGame"
- CODE:00466991 mov edx, offset aSoftwareChalle
- ; "Software\\Challenger Tetris\\"
- CODE:00466996 mov eax, 80000001h
- CODE:0046699B call sub_466898
- CODE:004669A0 mov eax, [ebp+var_4]
- CODE:004669A3 push eax
- CODE:004669A4 mov eax, offset a54039 ; "54039"
- CODE:004669A9 call sub_408774
- CODE:004669AE lea edx, [ebp+var_8]
- CODE:004669B1 call sub_408710
- CODE:004669B6 mov edx, [ebp+var_8]
- CODE:004669B9 pop eax
- CODE:004669BA call sub_403E60
- ; Установить значение флага
- CODE:004669BF setz ds:byte_47B780
- ; Проверка пройдена?
- CODE:004669C6 cmp ds:byte_47B780, 0
- CODE:004669CD jz loc_466AA3
- CODE:004669D3 lea eax, [ebp+var_C]
- CODE:004669D6 push eax
- CODE:004669D7 mov ecx, offset aCode ; "Code"
- CODE:004669DC mov edx, offset aSoftwareChalle
- ; "Software\\Challenger Tetris\\"
- CODE:004669E1 mov eax, 80000001h
- CODE:004669E6 call sub_466898
- CODE:004669EB mov edx, [ebp+var_C]
- CODE:004669EE mov eax, offset dword_47B784
- CODE:004669F3 call sub_403B24
- CODE:004669F8 mov eax, ds:dword_47B784
- CODE:004669FD call sub_403D50
- CODE:00466A02 cmp eax, 10h
- ; Установить значение флага
- CODE:00466A05 setz ds:byte_47B780
- ; Проверка пройдена?
- CODE:00466A0C cmp ds:byte_47B780, 0
- CODE:00466A13 jz loc_466AAD
- CODE:00466A19 lea eax, [ebp+var_10]
- CODE:00466A1C push eax
- CODE:00466A1D mov ecx, offset aName ; "Name"
- CODE:00466A22 mov edx, offset aSoftwareChalle
- ; "Software\\Challenger Tetris\\"
- CODE:00466A27 mov eax, 80000001h
- CODE:00466A2C call sub_466898
- CODE:00466A31 mov edx, [ebp+var_10]
- CODE:00466A34 mov eax, offset dword_47B788
- CODE:00466A39 call sub_403B24
Все настройки игры хранятся в папке с программой в файле CONFIG.INI, стартер больше не нужен, поэтому пропатченную игру можно хранить на флешке и брать с собой в дорогу. Запускать, соответственно, только через основной исполняемый файл.
Просмотров: 888 | Комментариев: 11
Метки: исследование защиты, игры
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Илья
(08.05.2023 в 00:01):
И ещё один недостаток: в момент смены музыки, когда по идее должен был бы выскочить наг-скрин, игра зависает (ставится типа на паузу), и отвисает при нажатии на любую стрелочку.
Илья
(07.05.2023 в 23:42):
У меня в игре, когда убираются сразу 4 линии кубиков игра зависает на слове "экселент". Нажатие на любую клавишу приводит к проигрыванию "грейд", "фантастик", но игра не отвисает.
user
(22.04.2023 в 01:07):
У этой фирмочки есть ещё неплохая игрулька Линии (5 в ряд),
там защита немного другая, но тоже довольно гуманная.
Вообще, у них в разных играх разные же и заморочки, не по шаблону.
там защита немного другая, но тоже довольно гуманная.
Вообще, у них в разных играх разные же и заморочки, не по шаблону.
user
(21.04.2023 в 03:12):
Для игры, которая по ссылке -
Файл REG.CRK:
;--------------------------->8
ChallengerTetris 1.0
Unlimited Trial
RUNNER.EXE
.0046414E: 92 82 ;0006354E:
Set Registered
ChallengerTetris.exe
.0046D463: 0F C6 ;0006C863:
.0046D464: 94 05 ;0006C864:
.0046D465: 05 A0 ;0006C865:
.0046D466: A0 C3 ;0006C866:
.0046D467: C3 47 ;0006C867:
.0046D468: 47 00 ;0006C868:
.0046D469: 00 01 ;0006C869:
ChallengerTetris.exe
.0046D4A9: 0F C6 ;0006C8A9:
.0046D4AA: 94 05 ;0006C8AA:
.0046D4AB: 05 A0 ;0006C8AB:
.0046D4AC: A0 C3 ;0006C8AC:
.0046D4AD: C3 47 ;0006C8AD:
.0046D4AE: 47 00 ;0006C8AE:
.0046D4AF: 00 01 ;0006C8AF:
;---------------------------->8
Файл REG.CRK:
;--------------------------->8
ChallengerTetris 1.0
Unlimited Trial
RUNNER.EXE
.0046414E: 92 82 ;0006354E:
Set Registered
ChallengerTetris.exe
.0046D463: 0F C6 ;0006C863:
.0046D464: 94 05 ;0006C864:
.0046D465: 05 A0 ;0006C865:
.0046D466: A0 C3 ;0006C866:
.0046D467: C3 47 ;0006C867:
.0046D468: 47 00 ;0006C868:
.0046D469: 00 01 ;0006C869:
ChallengerTetris.exe
.0046D4A9: 0F C6 ;0006C8A9:
.0046D4AA: 94 05 ;0006C8AA:
.0046D4AB: 05 A0 ;0006C8AB:
.0046D4AC: A0 C3 ;0006C8AC:
.0046D4AD: C3 47 ;0006C8AD:
.0046D4AE: 47 00 ;0006C8AE:
.0046D4AF: 00 01 ;0006C8AF:
;---------------------------->8
Илья
(18.04.2023 в 13:14):
Так и есть, я уже сам заметил.
ManHunter
(18.04.2023 в 13:04):
О, да. Теперь зарегай игру этим серийником и попробуй пройти пару-тройку уровней, будешь сильно удивлен.
Есть такая штука, как комментарии к статьям, там иногда тоже встречается много интересного.
Есть такая штука, как комментарии к статьям, там иногда тоже встречается много интересного.
Илья
(18.04.2023 в 13:00):
Спасибо за статью.
Благодаря вчерашнему вашему ответу про дебаггер OllyDbg, а также этой статье, я исследовал эту программу, а именно RUNNER.EXE
Ключ должен быть 16 символов и от имени не зависит
Сумма ASCII кодов символов (в 16-ричной системе) должна быть равна 545 (в 16-ричной системе), например "TTTTTTTTTTTTTTTY" или любая их перестановка
Кейген написать не сложно.
Чтобы удалить регистрацию, надо удалить папку программы в реестре по адресу:
Компьютер\HKEY_CURRENT_USER\Software\Challenger Tetris
Благодаря вчерашнему вашему ответу про дебаггер OllyDbg, а также этой статье, я исследовал эту программу, а именно RUNNER.EXE
Ключ должен быть 16 символов и от имени не зависит
Сумма ASCII кодов символов (в 16-ричной системе) должна быть равна 545 (в 16-ричной системе), например "TTTTTTTTTTTTTTTY" или любая их перестановка
Кейген написать не сложно.
Чтобы удалить регистрацию, надо удалить папку программы в реестре по адресу:
Компьютер\HKEY_CURRENT_USER\Software\Challenger Tetris
zor
(08.03.2023 в 12:06):
Поделитесь, пожалуйста, hex-патчем (в виде текста) на эту игру.
ManHunter
(06.03.2023 в 23:00):
voffka, это только в регистраторе. В самой игре еще до жопы проверок, причем на разных уровнях.
voffka
(06.03.2023 в 22:57):
Для любителей ключей:
Имя не учавствует
Длина 16 символов
Сумма символов должна быть 0х545
Брутите )))
Имя не учавствует
Длина 16 символов
Сумма символов должна быть 0х545
Брутите )))
Добавить комментарий
Заполните форму для добавления комментария
Мой способ взлома:
RUNNER.EXE
004641C7 - заNOPить
ChallengerTetris.exe
Поменять переходы, помеченные "*", для _ckeck_trial_off_474F14:
* 0045D938 - вызов наг-окна при выходе из игры
* 0045DCE3 - механизм запрета пунктов "PANIC" и "BRICKLAYER" в меню "NEW GAME"
* 0045EC86 - вызов слова "UNREGISTERED" в главном меню
* 0045F79A - вызов слова "UNREGISTERED" в меню "OPTIONS"
* 0045FC2D - вызов надписи "AVAILABLE IN THE REGISTERED VERSION ONLY!" в меню "NEW GAME" в пунктах "PANIC" и "BRICKLAYER"
* 0045FCD5 - вызов слова "UNREGISTERED" в меню "NEW GAME"
* 004605BC - вызов слова "UNREGISTERED" в меню "HIGH SCORES"
* 00460BCB - вызов слова "UNREGISTERED" в меню "GAME INFO"
Поменять переходы, помеченные "*", для _CHECK_TRIAL_byte_47C3A0:
004635C1 - неизвестно, разницы не заметил (вызовы рандомов)
0046369D - неизвестно, разницы не заметил (вызовы рандомов)
00464942 - неизвестно, разницы не заметил (однотипные обходы)
0046496B - неизвестно, разницы не заметил (однотипные обходы)
* 00468C87 - вызов слова "UNREGISTERED" в самой игре в верхней части, откуда летят новые фигуры
0046D471 - запрос "Code" из реестра
0046D4B7 - запрос "Name" из реестра, если заменить этот и предыдущий переход,
то появляется баг - нет окна паузы "ABORT THIS GAME (Y/N)",
механизм проверки на фейковую регистрацию внутри игры с последующим выбросом из неё
0046DCDB - не понятно, вызов _str___2 символа '.' (точка)
0046FF4B - неизвестно (вызовы рандомов)
00470FAC - не понятно, вызов _str___3 символа '.' (точка)
Опционально - в реестре
Компьютер\HKEY_CURRENT_USER\Software\Challenger Tetris
поставить своё имя в параметр "Name"
Пока багов, проявлений триальности не наблюдаю.