Исследование защиты программы Feed The Snake
Скриншот программы Feed The Snake
Давно не исследовал никаких игрушек, видимо пришло время. Как раз выходные, можно немного расслабиться и поиграть в классическую "Змейку", или, по версии разработчика, "Feed The Snake". Принцип игры простой. При помощи стрелочек на клавиатуре нужно задавать направление движения змейке на игровом поле, подбирая съедобные ягоды и фрукты, а также всякие призовые карточки. В этом варианте игры добавлены еще и несъедобные элементы: острый перец, мухоморы и кактусы. По мере насыщения змейка вырастает в длину. Ограничений по времени игры вроде бы нет, но часть игровых опций становятся доступными только после регистрации. Сейчас мы будем это исправлять.
Скачиваем дистрибутив, устанавливаем. При запуске игры появляется окно, похожее на wrapper от других дистрибьюторов, но это не так. Process Explorer подтверждает, что никаких дочерних процессов при запуске игры не создается, значит это окно встроено в саму игру.
Окно запуска игры
Главный исполняемый файл накрыт какой-то древней версией ASProtect, поэтому современные скрипты и распаковщики с ним не справляются. Зато справляется не менее древняя версия распаковщика Stripper 2.07. Из-за особенностей работы протектора и распаковщика, нормально распаковать файл удается только под Windows XP или на виртуальной машине с Windows XP (я пользуюсь чистой системой под VMWare Workstation). Под Windows 7, и даже в режиме Windows XP Mode, может ничего не получиться.
Распаковываем исполняемый файл
Файл распакован, теперь надо найти проявления триальности. Самый очевидный из них - это строка "Registered to: Unregistered" на экране главного меню игры. Ну раз такая строка присутствует на экране, значит она должна присутствовать где-то в файле. Поищем ее.
Нехорошая строка найдена
Строка в файле найдена. Теперь надо посмотреть в дизассемблере на условия ее появления. По перекрестным ссылкам найден вот такой код:
Code (Assembler) : Убрать нумерацию
- .text:004070D3 mov eax, ds:lpString
- .text:004070D8 mov ebx, lstrlenA
- .text:004070DE push eax ; lpString
- .text:004070DF call ebx ; lstrlenA
- .text:004070E1 test eax, eax
- .text:004070E3 jnz short loc_40710D
- .text:004070E5 mov edi, offset aRegisteredToUn
- ; "Registered to: Unregistered"
- .text:004070EA or ecx, 0FFFFFFFFh
- .text:004070ED repne scasb
- .text:004070EF not ecx
- .text:004070F1 sub edi, ecx
- .text:004070F3 lea edx, [ebp+Dest]
- .text:004070F9 mov eax, ecx
- .text:004070FB mov esi, edi
- .text:004070FD mov edi, edx
- .text:004070FF shr ecx, 2
- .text:00407102 rep movsd
- .text:00407104 mov ecx, eax
- .text:00407106 and ecx, 3
- .text:00407109 rep movsb
- .text:0040710B jmp short loc_407128
- .text:0040710D ; ------------------------------------------------
- .text:0040710D loc_40710D:
- .text:0040710D mov ecx, ds:lpString
- .text:00407113 lea edx, [ebp+Dest]
- .text:00407119 push ecx
- .text:0040711A push offset aRegisteredToS
- ; "Registered to: %s"
- .text:0040711F push edx ; Dest
- .text:00407120 call _sprintf
Code (Assembler) : Убрать нумерацию
- seg002:004215E4 ; LPCSTR lpString
- seg002:004215E4 lpString dd 0
Заменяем адрес строки регистрационного имени
А саму строку перебьем на наше имя. Не забывайте, что строка должна заканчиваться нулевым символом, то есть строка должна быть в формате ASCIIZ.
Вписываем регистрационное имя
Сохраняем изменения запускам игру. Начальное окно сказочным образом преобразилось. Нет никаких предложений отвалить бабло за регистрацию, нет никаких кнопок для ввода регистрационного ключа. Попробуем теперь запустить саму игру.
Окно запуска игры без регистрации
И снова чудо! Пункт в главном меню "Register" превратился в ссылку на домашнюю страничку, в левом нижнем углу мы видим надпись о регистрации на наше имя, и все ограничения при выборе игры также исчезли. То есть игра теперь полностью зарегистрирована.
Игра успешно "зарегистрирована"
Теперь можно без всяких ограничений кормить змейку до отвала. Кстати, таким же способом отучаются от жадности и другие игры от компании RealApex. Их можно узнать по строке "Games, by RealApex" в описании на сайте. Другие игры принадлежат другим дистрибьюторам, и защита у них может отличаться от описанной в статье. В любом случае, хороших вам выходных и приятного времяпровождения за откармливанием змейки.
Просмотров: 4731 | Комментариев: 9
Метки: исследование защиты, игры
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
ManHunter
(20.08.2012 в 09:08):
Действительно, о нем я и не подумал :) Спасибо!
Jupiter
(20.08.2012 в 02:57):
Распаковать данную версию аспра можно и в статике при помощи старой тулзы CASPR версии 1.110
ManHunter
(15.08.2012 в 13:50):
В статье все предельно ясно написано как исправлять строку. Про ASCIIZ и гугл нужно повторить еще раз?
Vitalik
(15.08.2012 в 13:47):
Не я имел ввиду что после Вашего зарегистрированного имени нет "nregistered" как на скрине №5 .
ManHunter
(15.08.2012 в 13:42):
"ASCIIZ" в гугл и читать до наступления просветления.
Vitalik
(15.08.2012 в 13:41):
А почему не тянется ManHunter /PCL "nregistered" ?
ManHunter
(13.08.2012 в 13:19):
PEiD и глазами. Это приходит с опытом.
Musika
(13.08.2012 в 13:19):
Приветствую.
Спасибо, интересно.
Как/ чем, Вы определяете, наличие и какая именно защита,
на исполняемом файле ?
Спасибо, интересно.
Как/ чем, Вы определяете, наличие и какая именно защита,
на исполняемом файле ?
Добавить комментарий
Заполните форму для добавления комментария
Если интересно вот ссылка: "http://www.space-ewe.com/bud_redhead.html"
Сам я эту задачку пока так и не решил.