Blog. Just Blog

Исследование защиты игры Halloween Night

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Темная сторона Силы | Автор: ManHunter
Исследование защиты игры Halloween Night
Исследование защиты игры Halloween Night

Halloween Night - еще одна игра, выпущенная компанией EleFun Games. Классическая игра "три в ряд", довольно простая и однообразная, но зато выполнена в мрачной стилистике с трехмерными тыквами и другими атрибутами праздника. Как понимаете, игра старая, ее не найти в официальных магазинах. К счастью, интернет все помнит, а я расскажу, как можно сделать ее бесплатной.

Забираем дистрибутив с файлообменника, устанавливаем и смотрим. Кроме инсталлятора есть исполняемый файл Halloween Night.exe и файлы с данными, больше ничего нет. Дизассемблер пока не трогаем.

Триальное окно
Триальное окно

Запускаем исполняемый файл, тут сразу видно, что используется враппер. То есть компания-продавец берет игры у разработчиков, затем заворачивает оригинальные файлы в специальные загрузчики, которые в свою очередь обеспечивают лицензирование. Это обычная практика, так что вы можете встретить одни и те же игры с разными названиями, логотипами и заставками. Защиты тоже могут быть разными, но какими бы ни были навороты, обязательно в конечном варианте должен получиться чистый файл, который и будет самой игрой.

Свойства файла
Свойства файла

Пока есть триальное время, запускаем игру. Переключаемся из игры, но ничего не закрываем, в том числе и загрузчик. Затем берем любую программу для работы с процессами, да можно обычным воспользоваться штатным Диспетчером задач. Мы видим, что есть враппер с процессом Halloween Night.exe, а рядом появляется файл game.exe с такой же иконкой, как основная игра. Переходим в папку C:\Users\{USER_NAME}\AppData\Roaming\EleFun Games\Halloween Night и смотрим, где лежит этот файл. Копируем файл куда-нибудь в сухое прохладное место. Выходим из игры, затем из враппера. Посмотрите, после игры файл game.exe автоматически удаляется, так что не зря надо было сохранять копию. Теперь переносим файл game.exe рядом с враппером, удаляем файл Halloween Night.exe и меняем имя game.exe на Halloween Night.exe. Вот и все, защита пала, у нас есть чистый файл с игрой, никаких ограничений по времени нет.

А как быть, если триальное время уже вышло и игра не дает создать файл game.exe? Или, например, если вам захотелось самостоятельно разобрать враппер. Тоже не проблема. Мне, например, привычнее использовать для этого HiEW, а вам может быть удобнее другой HEX-редактор.

Сохраняем данные
Сохраняем данные

Чтобы искать исполняемый файл, надо взять его сигнатуру, то есть строку "MZ". В файле может быть несколько таких строк, но его легко определить по следующей строке, например, "This program cannot be run in DOS mode". Вырезаем из файла Halloween Night.exe содержимое найденного файла game.exe от момента "MZ" и до конца файла. Сохраняем данные, проверяем. Если все сделано правильно, то игра запускается. Размер может быть больше, чем при создании враппера, ну и ладно, главное, что все работает.

Адрес данных
Адрес данных

Но если делать уж вообще красиво, то давайте разберем содержимое враппера. Мы нашли содержимое game.exe, но враппер должен определять его наличие каким-то более правильным способом. Например, если мы определили данные по адресу 00070EEC, то это значение где-то должно сохраняться. Давайте поищем это значение. Не забывайте, что это DWORD, а байты сохраняются в обратном порядке.

Определяем адрес
Определяем адрес

Отлично, недалеко от конца враппера находятся 4 байта с сохраненным адресом содержимого game.exe.

Количество данных
Количество данных

А рядом еще один DWORD со значением 00199000. Если подставить это значение в калькулятор, то получим десятичное значение 1675264, что соответствует оригинальному размеру файла game.exe. Обрезаем лишние данные и получаем идеальный красивый файл, при этом враппер можно вообще не запускать и получить чистый файл в полной статике. Цель достигнута.

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

Комментарии

Отзывы посетителей сайта о статье
rev_discussion (20.08.2026 в 13:52):
Если разбирать впаппер, то самое интересное в int __thiscall sub_407960(HANDLE *this, int a2)

Там собирается время, проверяется тот самый час:

if ( GetForegroundWindow() == (HWND)dword_450614 )
        v2[62] = (char *)v2[62] + GetTickCount() - (_DWORD)v2[60];
      v2[60] = (HANDLE)GetTickCount();
      if ( (unsigned int)v2[62] + (unsigned int)v2[61] >= 3600000 )
      {
        sub_407BC0();
        CWnd::ShowWindow(this: (CWnd *)v2, a2: 5);

....... }
Гость (20.08.2026 в 07:39):
Hiew напишет про наличие оверлея, если есть ненужные данные в конце.

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

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

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