чит коды zuma deluxe
Zuma Deluxe
Данные по игре | ||||||||||||||||||||
| ||||||||||||||||||||
Коды |
Замедлить движение мяча: Если вы застреваете на более высоком уровне, скажем 12-7, и затем только идете несколько строк ниже туда, где это говорит lvl127 и изменение его урегулирование скорости к 0.2 и сохранить. Заметка: не путайте lvl11 линию выше с level11 линией на той же самой странице. Zuma Deluxe → ФайлыZuma Deluxe — увлекательная логическая головоломка с элементами «три в ряд» и видом сверху. Вас ожидает простой и интересный геймплей. Подробнее Таблица для Cheat Engine [1.1.0.0] Zuma DeluxeПроцесс запуска: 2 не понравилось 1 понравилось Если вы хотите облегчить прохождение Zuma Deluxe (Zuma), то можете воспользоваться нашим файловым архивом. Здесь собраны только проверенные и работоспособные файлы для игр, которые можно скачать бесплатно. При скачивании файлов нужно обратить внимание на версию игры, для которой он предназначен. Трейнеры для игр, например, не всегда совместимы со всеми версиями игры, так как разработчики, выпуская обновления, могут менять архитектуру игры и принципы работы тех или иных ее механик. Обычно версия, с которой совместим файл, указывается прямо в его названии. LiveInternetLiveInternet—Поиск по дневнику—Подписка по e-mail—СтатистикаZUMA DELUXE: я раскрыл секреты «жабы»!Второй день меня прет от этих маленьких открытий. Речь об игре ZUMA DELUXE или «жабе», весьма популярной по всей Вологде до сих пор, несмотря на почтенный возраст игры. Если не ошибаюсь, первая версия ее появилась году этак в 1999. Мои маленькие хитрости позволяют сделать следующее (кто хоть раз играл в жабу, меня поймет): — замедлить движение шариков Применив все мои открытия, я вчера за полчаса прошел всю жабу, набрав 4,5 миллиона очков, 45 жизней, а последний, самый сложный этап 13-1 прошел за 9 секунд! Я уже не помню, откуда принес «жабу» в нашу редакцию. Случилось это около года назад, и уже через месяц увлечение бешеной лягухой разрослось среди коллег до угрожающих масштабов, так что даже стали поговаривать о диверсии с моей стороны с целью остановить рабочий процесс. Играли и по сей день играют все: от секретаря до редактора. В папке Zuma Deluxe содержится папка levels, в которой в свою очередь лежит заветный файл levels.xml. Открываем его блокнотом и начинаем хулиганить… Все основные параметры этапов игры прописаны примерно в середине документа в строках, начинающихся с ЧИСЛО ШАРОВ ПРИ СТАРТЕ Чем дальше по игре, тем на большую длину выскакивает цепь шаров при самом старте. За число шариков при старте отвечает параметр start=. Самое прикольное – выставить его равным 5 и гасить врага на подходе! Впрочем, вариаций множество. Самая удобная – параметр равный 10. Этап в «жабе» считается пройденным, если набрано необходимое количество очков. Это количество регулируется параметром score=. Если выставить его равным 30, то с первой же разбитой тройки шаров этап будет пройден. От этапа к этапу это число возрастает, и здесь тоже можно поглумиться, исправляя параметр в нужную нам сторону. В конце этапа время прохождения срав6нивается с эталонным. Так вот, параметр partime= регулирует это самое эталонное время. Измерения в секундах. Т.е. 180 – это 3 минуты. Поставив значение равное 360 вы увидите, что расчетное время прохождения даже этапа 1-1 станет – 6 минут! В зависимости от того, насколько шустро вы пройдете этап, при таком раскладе бонус от 24 000 до 25 000. Впрочем, 25 000 не получить – видимо, это предел бонуса, но кто знает – может найдется добрый человек и покажет, где его изменять в сторону увеличения? Самое маньячество прилепить ко всем этапам, т.е. ко всем строкам после lvl.. следующую инфу: Успехов всем, кто тоже прется по «жабе». Мы победим! Inka chaka ssuka! Обратная разработка коммерческой программы: кейген для Zuma DeluxeВступлениеЗдравствуйте, Хабралюди. Часть 1: коварный FlashВ общем, запускаем игру, играем дольше положенного (или сразу же лезем в ветку реестра HKLM/Software/PopCap/Zuma и выставляем нули в ключах TimesExecuted и TimesPlayed) — и вуаля: Отлично, выбираем «Buy Now», закрываем вылезшее окошко браузера с предложением купить игру за жалкие 16.99 евро, и жмём «Enter the Registration Key Manually». Так-с, поле ввода. Уже от чего-то можно плясать. Пробуем ввести какую-нибудь абракадабру, ожидаемо получаем «Please enter a valid key», и идём разбираться, что к чему. Первое, что настораживает при вдумчивом осмотре — наличие в папке, прямо рядом с бинарём игры, двух файлов, намекающих на использование в программе технологии Flash: собственно, Flash.ocx и drm.swf… Видимо, с закрытием браузера можно было повременить. Ладно, открываем этот самый drm.swf — и что же мы видим: Ищем по «RegFailed» и выходим на вот этот блок кода: Вот оно. Правильный ключ имеет в длину 23 символа (больше просто не позволяет ввести само текстовое поле) и заставляет validate_regkey() возвращать True. На то, что в этом же блоке кода происходит инициализация таких «страшных» значений как gRegFailedMessage, можно не обращать внимания, т.к. здесь, вне зависимости от них, из флэш-объекта посредством fscommand() происходит передача данных в родительский процесс. Что ж, центральная проверка — однозначный шедевр. Надо, наверное, запостить это на govnokod.ru, ну да ладно, мы сюда не позубоскалить собрались. Главное, что эта функция дала нам структуру лицензионного ключа: #####-#####-#####-##### Опять забегая вперёд, скажу что набор верных символов внутри самой программы будет несколько сокращён. Но пока что нам без разницы. Запускаем OllyDBG и загружаем в него нашу подопытную. Запускаем на выполнение (F9) и дожидаемся момента прорисовки главного окна. Ставим на неё точку останова по чтению (выделение → Shift+F3). Далее, в окне проверки, идём по ссылке внизу «Already purchased this game?» → «Enter the Registration Key Manually», и вводим в поле для ключа любую алфавитно-цифровую белиберду, разделённую дефисами на 4 блока по 5 символов. Жмём «Register». Часть 2: we need to go deeperВот мы и попали, наконец, внутрь алгоритма проверки. Идём в список контрольных точек на память и удаляем 0x4417D0 (Alt+Y → Del), выполняемся (Ctrl+F9) до конца функции, т.к. там ничего интересного для нас нет, только цикл сравнения, далее возвращаемся в вызывавшую функцию (F8), и видим там проверку возвращённого результата. Опять пропускаем всё до конца функции и возвращаемся в вызывавшую: Ага! А вот теперь мы в сердце анализатора лицензионного ключа. Чтобы не забыть это место, поставим (F2) контрольную точку на 0x04066CA и осмотримся вокруг. Чуть ниже (0x406757 и 0x4067A8) видны вызовы функций с очень интересными строковыми параметрами «RegSucceeded» и «RegFailed». А повыше (0x406748) находится ветвление, которое передаёт управление в нужную функцию. Это ветвление завязано на сравнение (0x40672D) регистров AL и BL. Похоже, что функция 0x404260, вызываемая ещё двумя командами ранее — это как раз то, что мы искали, т.е. Самая Важная Функция Проверки. Сначала, проверим свою догадку: изменим сравнение так, чтобы оно оказывалось верным при некорректных исходных данных. Наведём выделение на 0x406748 и нажмём пробел. Откроется окно «Assemble». Заменим переход по равенству, JE, на переход по неравенству — JNE. Запустим на выполнение (F9)… Ура, первый бастион взят! Сейчас наша задача — понять, как себя ведут внутри этой функции регистры AL и BL, и где именно расположен кусок кода, ответственный за их равенство либо неравенство. Как видите, содержимое регистра AL на протяжении практически всего «хвоста» хранится в BL, и только перед самым выходом копируется обратно, с дальнейшим восстановлением исходного значения EBX из стэка. У этой функции всего два возможных выходных значения — 0 и 1. Первое генерируется, когда строка байт, указатель на структуру с которой передан как параметр функции, не совпадает со строкой, чей указатель лежит по адресу [ECX + 8]. Второе же (то самое, которое нам нужно) — при обратной ситуации, т.е. когда строки идентичны. Часть 3: MD5, RSA и все-все-всеВернёмся в родительскую функцию и взглянем, откуда берутся значения из [ECX + 8] и [ARG.1 + 8]. Теперь перезапустим программу и остановимся на входе в нашу главную функцию проверки (0x404260). Поставим туда контрольную точку и начнём трассировать функцию построчно (F8), следя за состоянием двух наших аппаратных точек останова. Трассировка показывает, что до строки 0x404546 оба значения остаются неизменными. А вот дальше уже любопытнее. Функция, непосредственно вызываемая из 0x404546, является «трамплином» для запуска функции 0x41E320, так что в ней нет ничего интересного. Ставим точку останова на 0x41E320 и жмём F9. До заветного момента, когда можно сказать, что реверс произведён, осталась одна функция, 0x41E100 (вызов из 0x40458C). Ну тут уж я не буду вас мучать прочтением и расшифровкой ассемблерных листингов, поскольку один хороший товарищ, к тому моменту как я только начал её разбирать, подкинул мне очень вовремя утёкший в Сеть кусок исходника PopCap`овского фреймворка, содержащий в себе пусть не реализацию указанной функции, но хотя бы её название. В общем, барабанная дробь… та функция, на которую мы сейчас собираемся пойти в лобовую атаку, называется aSignature.ModPow(e, n). Также, рекомендую обратить внимание на сами e и n: или, в ассемблерном представлении, Как можно догадаться из названия, ModPow() означает возведение в степень по модулю. окончательно проясняет ситуацию: алгоритм, с которым мы имеем дело — это RSA. Часть 4: генератор ключейВ общем, исходя из вышесказанного, код, генерирующий эту пакость, я решил в кейген не копипастить, а банально красть уже готовую строку из памяти игры посредством ReadProcessMemory(). В качестве небольшого хулиганства, также я добавил возможность записывать в строку имени что-то своё (с помощью WriteProcessMemory(), как несложно догадаться). Но, к сожалению, работает (т.е. сохраняет валидность регистрации) такой трюк только на WINE, но не на «реальной» Windows. В остальном — прошу любить и жаловать: Zuma keygen, proof-of-concept. Кейген проверялся не только на той версии Zuma, про которую идёт речь в статье, но также ещё и на других, более ранних или поздних (я не разбирался). Несмотря на то, что адреса с именем пользователя разнились, сам лицензионный ключ подходил к ним всем, что свидетельствует о неизменности алгоритма аж с 2003 года. Послесловие и использованные ссылкиP.S. Если кто-то может посоветовать более надёжный файлообменник, с которого файлы не удаляются через 30 дней простоя — буду крайне признателен. P.P.S. Каково же было моё удивление, когда уже после взлома я обнаружил, что Zuma.exe из обсуждаемого пакета — это просто обёртка, архив, который по лицензионному ключу разархивирует в свою же папку реальный бинарь с Zuma, названный popcapgame1.exe… [UPDATE:] перенёс картинки на Habrastorage.
|