Blog. Just Blog

Исследование защиты программы Feed The Snake

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Темная сторона Силы | Автор: ManHunter
Скриншот программы 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" на экране главного меню игры. Ну раз такая строка присутствует на экране, значит она должна присутствовать где-то в файле. Поищем ее.

Нехорошая строка найдена
Нехорошая строка найдена

Строка в файле найдена. Теперь надо посмотреть в дизассемблере на условия ее появления. По перекрестным ссылкам найден вот такой код:
  1. .text:004070D3                 mov     eax, ds:lpString
  2. .text:004070D8                 mov     ebx, lstrlenA
  3. .text:004070DE                 push    eax             ; lpString
  4. .text:004070DF                 call    ebx ; lstrlenA
  5. .text:004070E1                 test    eax, eax
  6. .text:004070E3                 jnz     short loc_40710D
  7. .text:004070E5                 mov     edi, offset aRegisteredToUn
  8. ; "Registered to: Unregistered"
  9. .text:004070EA                 or      ecx, 0FFFFFFFFh
  10. .text:004070ED                 repne scasb
  11. .text:004070EF                 not     ecx
  12. .text:004070F1                 sub     edi, ecx
  13. .text:004070F3                 lea     edx, [ebp+Dest]
  14. .text:004070F9                 mov     eax, ecx
  15. .text:004070FB                 mov     esi, edi
  16. .text:004070FD                 mov     edi, edx
  17. .text:004070FF                 shr     ecx, 2
  18. .text:00407102                 rep movsd
  19. .text:00407104                 mov     ecx, eax
  20. .text:00407106                 and     ecx, 3
  21. .text:00407109                 rep movsb
  22. .text:0040710B                 jmp     short loc_407128
  23. .text:0040710D ; ------------------------------------------------
  24. .text:0040710D loc_40710D:
  25. .text:0040710D                 mov     ecx, ds:lpString
  26. .text:00407113                 lea     edx, [ebp+Dest]
  27. .text:00407119                 push    ecx
  28. .text:0040711A                 push    offset aRegisteredToS
  29. ; "Registered to: %s"
  30. .text:0040711F                 push    edx             ; Dest
  31. .text:00407120                 call    _sprintf
Что он делает? По адресу 004070D3 берется строка в формате ASCIIZ по указателю ds:lpString, затем проверяется ее длина. Если она не равна нулю, то значит какое-то регистрационное имя есть и игрушка зарегистрирована. Посмотрим на указатель:
  1. seg002:004215E4 ; LPCSTR lpString
  2. seg002:004215E4 lpString        dd 0
По адресу 4215E4 находится двойное слово, указывающее на строку регистрационного имени. После распаковки оно равно нулю. Попробуем перенаправить указатель на какую-нибудь ненулевую строку в файле. Пусть это будет строка сообщения о незарегистрированной игре :) Да, учитывайте особенности адресации, когда младшие байты адреса идут в начале DWORD'а.

Заменяем адрес строки регистрационного имени
Заменяем адрес строки регистрационного имени

А саму строку перебьем на наше имя. Не забывайте, что строка должна заканчиваться нулевым символом, то есть строка должна быть в формате ASCIIZ.

Вписываем регистрационное имя
Вписываем регистрационное имя

Сохраняем изменения запускам игру. Начальное окно сказочным образом преобразилось. Нет никаких предложений отвалить бабло за регистрацию, нет никаких кнопок для ввода регистрационного ключа. Попробуем теперь запустить саму игру.

Окно запуска игры без регистрации
Окно запуска игры без регистрации

И снова чудо! Пункт в главном меню "Register" превратился в ссылку на домашнюю страничку, в левом нижнем углу мы видим надпись о регистрации на наше имя, и все ограничения при выборе игры также исчезли. То есть игра теперь полностью зарегистрирована.

Игра успешно "зарегистрирована"
Игра успешно "зарегистрирована"

Теперь можно без всяких ограничений кормить змейку до отвала. Кстати, таким же способом отучаются от жадности и другие игры от компании RealApex. Их можно узнать по строке "Games, by RealApex" в описании на сайте. Другие игры принадлежат другим дистрибьюторам, и защита у них может отличаться от описанной в статье. В любом случае, хороших вам выходных и приятного времяпровождения за откармливанием змейки.

Поделиться ссылкой ВКонтакте
Просмотров: 4731 | Комментариев: 9

Внимание! Статья опубликована больше года назад, информация могла устареть!

Комментарии

Отзывы посетителей сайта о статье
Жека (21.07.2014 в 12:46):
Спасибо за статью! Сразу возникает вопрос, а как быть, если строка "Unregistered" зашита в ресурс игры, скорее всего это какая ни-будь картинка. Попалась мне одна интересная игруля, с не менее интересной защитой. Помимо навешенной Армадилы с наномитами, ещё и с такой хренью.
Если интересно вот ссылка: "http://www.space-ewe.com/bud_redhead.html"
Сам я эту задачку пока так и не решил.
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):
Приветствую.
Спасибо, интересно.

Как/ чем, Вы определяете, наличие и какая именно защита,
на исполняемом файле ?

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.08 сек. / MySQL: 2 (0.0045 сек.) / Память: 4.5 Mb
Наверх