Исследование защиты игры Tetris XP
Скриншот игры Tetris XP
Tetris XP - очень приятный вариант тетриса, хоть и старенький, но прекрасно работающий на современных системах. Есть несколько вариантов игры - для спокойного времяпрепровождения и режим со всякими усложнениями типа внезапно возникающих корявых мега-фигур. За давностью лет офсайт игры прекратил существование, приобрести лицензию негде. А поиграть очень хочется.
Распаковываем исполняемый файл
Забираем с файлообменника дистрибутив, устанавливаем, смотрим. Главный исполняемый файл защищен навесным протектором ASProtect какой-то древней версии. С ней легко справляется даже статический распаковщик CASPR. На всякий случай убедимся, что распакованный файл запускается, после чего отправляем его на разбор в дизассемблер.
Триальная версия программы
Для ознакомления с игрой дается всего 50 запусков, после чего триал заканчивается и кнопка запуска становится неактивной.
Триальный период закончился
С этим понятно. У нас есть строки "Unregistered version", есть строка счетчика "NN executions left for evaluation", для начала этого достаточно. Поиском по листингу дизассемблера выходим на следующий код:
Code (Assembler) : Убрать нумерацию
- seg000:004191D2 push 0FAh ; nSize
- seg000:004191D7 push offset byte_47E810 ; lpReturnedString
- seg000:004191DC push offset aHttpWww_alawar
- ; "http://www.alawar.com/games/tetris4000"
- seg000:004191E1 push offset aHomepageUrl
- ; "Homepage URL"
- seg000:004191E6 push offset aRegistrationIn
- ; "Registration info"
- seg000:004191EB call esi ; GetPrivateProfileStringA
- seg000:004191ED push 1 ; nCmdShow
- seg000:004191EF push edi ; hWnd
- seg000:004191F0 call ds:ShowWindow
- ; Проверить флаг регистрации
- seg000:004191F6 mov al, ds:byte_4494F0
- ; Если AL=0, то программа зарегистрирована
- seg000:004191FB test al, al
- seg000:004191FD jz loc_41938F ; default
- seg000:00419203 mov ebx, ds:GetDlgItem
- seg000:00419209 push 3EBh ; nIDDlgItem
- seg000:0041920E push edi ; hDlg
- seg000:0041920F call ebx ; GetDlgItem
- seg000:00419211 push 3ECh ; nIDDlgItem
- seg000:00419216 mov esi, eax
- seg000:00419218 push edi ; hDlg
- seg000:00419219 mov [esp+69Ch+var_684], esi
- seg000:0041921D call ebx ; GetDlgItem
- seg000:0041921F mov edx, ds:lpString
- seg000:00419225 mov ebx, ds:lstrlenA
- seg000:0041922B push edx ; lpString
- seg000:0041922C mov [esp+698h+hWnd], eax
- seg000:00419230 call ebx ; lstrlenA
- seg000:00419232 test eax, eax
- seg000:00419234 jg short loc_419264
- seg000:00419236 mov eax, ds:wParam
- seg000:0041923B push eax
- seg000:0041923C lea ecx, [esp+698h+var_550]
- seg000:00419243 push offset aDExecutionsLef
- ; "%d executions left for evaluation"
- seg000:00419248 push ecx
- seg000:00419249 call sub_43088D
- seg000:0041924E mov eax, [esp+6A0h+hWnd]
- seg000:00419252 add esp, 0Ch
- seg000:00419255 lea edx, [esp+694h+var_550]
Флаг в сегменте данных
Мы видим, что этот байт сразу же инициализирован значением 1, то есть программа не зарегистрирована, а по перекрестным ссылкам выясняем, что значение флага нигде не меняется, только считывается его значение. Если посмотреть две оставшиеся перекрестные ссылки, то в коде по одной из них также выводится или не выводится строка "Unregistered...", это уже про основное окно игры.
Code (Assembler) : Убрать нумерацию
- seg000:0041850A jg short loc_418554
- ; Проверить флаг регистрации
- seg000:0041850C mov al, ds:byte_4494F0
- ; Если AL=0, то программа зарегистрирована
- seg000:00418511 test al, al
- seg000:00418513 jz short loc_418554
- seg000:00418515 fild ds:dword_449B2C
- seg000:0041851B push 1 ; char
- seg000:0041851D push 0 ; color
- seg000:0041851F push 0FFFFFFh ; int
- seg000:00418524 fmul ds:flt_43B01C
- seg000:0041852A push offset h ; int
- seg000:0041852F push offset aUnregistered__
- ; "Unregistered..."
- seg000:00418534 call sub_430818
- seg000:00418539 fild ds:dword_449B28
- seg000:0041853F push eax ; y
- seg000:00418540 fmul ds:flt_43B008
- seg000:00418546 call sub_430818
Игра успешно "зарегистрирована"
При запуске в стартовом окне красуется надпись "Full version", все ограничения по запускам пропали, цель достигнута. Теперь можно играть сколько угодно.
Просмотров: 439 | Комментариев: 0
Метки: исследование защиты, игры
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Комментариeв нет
Добавить комментарий
Заполните форму для добавления комментария