Как взломать java игру

–>Главная | –>Регистрация | –>Вход

–>Приветствую Вас Гость
RSS –>

–> –>Категории раздела –> –>

–> –>Статистика –>

–> –>

–> –>Форма входа –>
–>
–>

–>

–> –> –> –> –>

–> –>Поиск –>

–> –> –> –> –> –>

–> –>Друзья сайта –>
–> –>

  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz –>
  • –>

    Введение

    Популярность мобильных игр стремительно растет. Они прочно оккупировали рынок сотовых телефонов, коммуникаторов, смартфонов, карманных компьютеров и других аналогичных устройств. Большинство игр распространяется на условно-бесплатной основе, то есть требуют деньги, иначе блокируют часть возможностей и/или ограничивают количество запусков. Но даже полностью бесплатные игры не лишены недостатков. Неудобное управление, быстро кончающиеся жизни. Да мало ли существует причин, побуждающих хакера дорабатывать код в соответствии со своими предпочтениями? Этические проблемы взлома нас не волнуют, поэтому мы немедленно переходим к технической части, благо хвост уже зудит, чешется и рвется в бой. О взломе мобильных игр написано много, но все как-то неконкретно и не в тему. Не так-то просто обобщить свой опыт и передать его другим. Но мыщъх все же попробовал.

    Чем мы будет ломать

    Выбор хакерского инструментария – дело сугубо личное, индивидуальное и, можно даже сказать, интимное. Поэтому не следует воспринимать ниже перечисленный список как догму. Это всего лишь один из вариантов. Практически все обозначенные утилиты реализованы в двух-трех вариантах – как консольных, так и графических. Так что, каждый может найти программу под свой вкус. Предлагаемая подборка включает в себя только бесплатные программы, игнорируя их коммерческие аналоги, иначе это не хакерство получается, а сплошной рекурсивный спуск (чтобы сломать мобильную игру, нужно хакнуть программу, которая ее ломает).

    • Прежде всего нам потребуется спецификация на байт-код виртуальной Java-машины, выложенная на официальном сайте корпорации Sun (на английском языке): http://java.sun.com/docs/books/jvms/second_edition/html/VMSpecTOC.doc.html, при этом знать сам язык Java совершенно необязательно, хоть и желательно. Во всяком случае, мыщъх несколько лет успешно хачил Java-приложения непосредственно в JVM, пока, наконец, не купил “Горький вкус Java” Брюса Тейта, разобравшись с основными языковыми концепциями, которые, кстати сказать, ничуть не облегчили ни дизассемблирование байт-кода, ни его анализ;
    • Лучшим дизассемблером Java-программ была и остается легендарная IDA Pro, распространяющаяся на коммерческой основе за нехилые деньги, однако при желании можно обойтись и без нее, воспользовавшись штатным дизассемблером, входящим в бесплатный Java SDK или любой другой утилитой аналогичного назначения, коих в последнее время развелось как грибов (см. JavaBite, описанный ниже);
    • Чтобы не корячиться над анализом байт-кода, имеет смысл прогнать ломаемое приложение через Java-декомпилятор, выдающий вполне читабельные и структурированные листинги. Java-декомпиляторов существует много. Хороших и разных. Мыщъх рекомендует бесплатный avaDec by wl, которым пользуется сам и который можно скачать с http://www.wasm.ru/baixado.php?mode=tool& >
    • Для модификации байт-кода (то бишь “бит-хака”) подойдет любой hex-редактор, например, всем известный hiew, однако лучше использовать специализированные инструменты, лучим из которых является бесплатный JavaBite by BitArts, наглядно отображающий дерево классов, а также включающий в себя дизассемблер и ассемблер байт-кода (http://www.wasm.ru/baixado.php?mode=tool& >
    • Мобильные игры как правило распространяются в виде упакованных jar-файлов, создаваемые одноименной утилитой, входящей в состав Java SDK, однако это не единственно возможный вариант. Архиваторы 7-Zip (бесплатный) и WinAce (условно-бесплатный) справляются со своей задачей ничуть не хуже. Исключение составляют Java-приложения, снабженные цифровыми подписями. Ни 7-Zip, ни WinAce их создавать не умеют, да этого и не требуется. Любой сотовый телефон загрузит jar-архив и без подписи;
    • Иногда рядом с jar-архивом лежит jad-файл, без которого некоторые модели телефонов откажутся загружать java-приложение и тут приходится прибегать к помощи бесплатной утилиты JADgen, генерирующий jad-файлы на основе jar-архивов (http://softsearch.ru/programs/134-892-jadgen-download.shtml);
    • Некоторые хакеры рекомендуют использовать эмулятор сотового телефона для проверки работоспособности взломанных игр. Другие же (к числу которых принадлежит и мыщъх) предпочитают живое “железо”, тем более что закачать приложение на телефон – не проблема. Правда, при этом существует угроза “завесить” аппарат так, что придется вынимать батарею или даже делать полный reset, удерживая определенные клавиши при включении (у каждой модели телефона – разные), описание которых можно найти в сервисной документации. Впрочем, страхи угробить телефон некорректным взломом очень сильно преувеличены. В 90% случаях некорректный хак пресекается жутко матерящимся Java-верификатором. В 9% случаях игра просто зависает, подвешивая за собой весь телефон. И только в 1% происходит разрушение содержимого энергонезависимой памяти и прочий бэд. Так что, неуверенным в себе хакерам все-таки стоит пользоваться эмулятором.
    Читайте также:  Видеорегистратор как камера наблюдения дома

    Что мы будем ломать

    А ломать мы будем милую игрушку Macroman (реинкарнация культовой компьютерной игры выпущенной в 1979 году японской компанией Namco Тору, реализованной практически на всех 8-битных компьютерах типа ZX-Spectrum), демонстрационная версия которой распространяется бесплатно и валяется практически на любом мобильном сайте: http://www.cec.ru/Files/macroman_demo.jar.

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

    Короче, кончай курить, мужики! Курить мы будет потом, а сейчас глотнем пива и возьмемся за дело.

    Как мы будем ломать

    Пускаем мы, значит, Macroman’а и даем ему умереть на зубах зловредных существ (типа приведений), агрессивно бегающих по лабиринту. На экране появляется надпись: “1 Life Left” (осталась одна жизнь). Очевидно, что код, выводящий эту строку, так или иначе связан с кодом, уменьшающим количество жизней при каждом акте поедания колобка. Во всяком случае, во всех императивных языках программирования (к которым принадлежит и Java) ситуация обстоит именно так.

    Вот эту строку мы и будем искать. Прямым текстом. Но сначала распакуем jar-архив, пропустив его через 7-Zip (предварительно изменив расширение с .jar на .zip). И вот что мы получим в результате:

    – META-INF // директория с файлом манифеста в текстовом формате
    – IMAGES // директория с изображениями лабиринта и спрайтов в png
    – MACROMAN // директория с файлом MacromanMidlet.class в байт-коде
    – b.class
    – c.class |
    – d.class |
    – e.class +- файлы классов в байт-коде
    – f.class |
    – g.class /

    Прогнав “e.class” через JDec (или любой другой декомпилятор) мы получаем текстовой файл “e.java” размером порядка 36 Килобайт, который тут же открываем в FAR’е по (Edit), давим (Search) и вновь ищем строку “Life Left”, затаившуюся в окрестностях следующего кода :

    if (ax
    <
    byte4 = 2;
    as1 = new String[2];
    as1[0] = “Game Over”;
    as1[1] = “HiScore: ” + aq.e;
    break;
    >
    if (ax == 1)
    <
    byte4 = 1;
    as1 = new String[byte4];
    as1[0] = ax + ” Life Left”; // искомая строка
    >

    Машинная логика вполне стандартна и особых пояснений не требует. Если переменная “ax” становится меньше нуля – мы получаем “Game Over”, в противном случае на экран выводится количество оставшихся жизней.

    Следовательно, чтобы взломать программу, необходимо найти код, уменьшающий переменную “ax” на единицу при каждом акте смерти. А как мы его найдем? Да все тем же контекстным поиском! Просто ищем “ax” контекстным поиском, анализируя прилегающий к ней код. Довольно быстро мы найдем строку инициализации, устанавливающую начальный счетчик жизней равный двум (на самом деле – трем, с учетом того, что смерть наступает, только если ax
    private byte ax;
    .
    av = 0;
    ax = 2; // инициализация счетчика жизней
    f.a(this, a4);

    Можно, конечно, заменить строку “ax =”” 2″ на “ax =”69″” (например), но это плохой и порочный путь. Во-первых, вечной жизни мы все равно не обретем, а во-вторых, еще не известно, как программа отреагирует на такие издевательства (поскольку количество оставшихся жизней отображается в виде “колобков” внизу экрана, то при слишком большом их числе поведение программы рискует стать непредсказуемым и крышесрывательным).

    Читайте также:  Где находится кадровая развертка в телевизорах

    Ладно, идем дальше и. Видим заветную команду “ax–” в методе “f()”, уменьшающую значение переменной “ax” на единицу.

    public void f()
    <
    MacromanMidlet.c();
    as =”” 3;
    removeCommand(b);
    if(ay
    <
    addCommand(a);
    addCommand(e);
    >
    else
    <
    ax–; //
    if(ax
    <
    addCommand(a);
    addCommand(e);
    if(av > aq.e)
    aq.e =”” av;
    >
    else
    <
    addCommand(f);
    >
    >
    c();
    >

    Вот это – то, что нужно. Остается найти байт-код, соответствующей данной конструкции языка высокого уровня. Вот тут-то нам и пригодится IDA Pro, ну или утилита JavaBite. Открыв файл “e.class” в любой из этих программ, переходим к методу “f()” и внимательно исследуем код на предмет обращений к переменной “ax”.
    Как легко видеть, в методе “f()” обращение к переменной “ax” встречается дважды :

    met016_44: ; CODE XREF: f_1+22^j
    042 aload_0 ; var016_0
    089 dup
    180 001 199 getfield ax B ; читаем переменную ax, закидывая ее на стек
    004 iconst_1 ; закидываем на стек константу 1
    100 isub ; стягиваем со стека две ячейки и вычитаем их
    145 int2byte ; преобразуем в int и забрасываем на стек
    181 001 199 putfield ax B ; обновляем содержимое переменной ax
    042 aload_0 ; var016_0
    180 001 199 getfield ax B
    156 000 047 ifge met016_106

    А что, если заменить команду “isub” (опкод 64h/100) на “парную” ей команду “iadd” (опкод 60h/96)? Эту операцию легко осуществить в любом hex-редакторе, например, в hiew”е. Просто ищем последовательность “042/089/180 001 199/004/100/145/181 001 199” (окружающую инструкцию “isub”) и заменяем 100 на 96. Тогда при каждом столкновении со злобными приведениями количество жизней будет увеличиваться на единицу и. в конце концов мы получим незапланированное переполнение и тогда – трындец. А нам трынденца не надо! Нам надо корректный взлом.

    Хорошо! Попробуем заменить инструкцию “isub” на команду “nop” (опкод 00h). Кстати, говоря, это можно сделать прямо в JaveBite, не прибегая к помощи hiew”а. Достаточно подвести курсор к “isub”, щелкнуть правой кнопкой мыши и в появившемся контекстном меню выбрать пункт “Edit Instuction”. Откроется диалоговое окно со списком всех возможных команд. Находим “nop”, жмем на “OK” и давим (Save Class), чтобы сохранить результаты правки на диск.

    Вот только результаты эти. мягко говоря, довольно удручающие. И при запуске программы Java-верификатор завершает ее выполнение в принудительном порядке. Это в x86-процессорах с их регистровой архитектурой инструкцию SUB можно безболезненно менять на NOP. Виртуальная машина Java исповедует иной принцип и аргументы команды “isub” предварительно забрасываются на вершину стека, в расчете на то, что она стащит их оттуда. Замена “isub” на “nop” вызывает дисбаланс стека и чтобы восстановить статус-кво необходимо так же “занопить” и команду “iconst_1”. Инструкцию “int2byte” можно не трогать, т.к. она имеет нулевой побочный эффект, сохраняя стек в том состоянии, в каком он был до ее вызова.

    Короче говоря, корректно хакнутый байт-код выглядит так:
    met016_44: ; CODE XREF: f_1+22^j
    042 aload_0 ; var016_0
    089 dup
    180 001 199 getfield ax B ; читаем переменную ax, закидывая ее на стек
    000 nop ; ничего не делаем
    000 nop ; ничего не делаем
    145 int2byte ; преобразуем в int и забрасываем на стек
    181 001 199 putfield ax B ; обновляем содержимое переменной ax

    Сохранив изменения в класс-файле по (или если мы работаем в hiew”е), нам остается только упаковать все файлы обратно в jar-архив и залить его на сотовый телефон. Для тестирования, так сказать.

    При использовании WinAce достаточно выделить все файлы (включая каталоги), в типе архива указать “JavaSoft-Jar” и плюхнуться на “ОК” . А вот среди выходных форматов, поддерживаемых архиватором 7-Zip никакого jar”а нет! То есть, он, конечно, есть, просто называется Zip”ом. В “Archive format” указываем: “ZIP”, в “Compression level” – “Normal”, поле “Compression method” выставляем в “Deflate”. Остальные параметры оставляем по умолчанию – как есть. Главное, не забыть вместо расширения “.zip” указать “.jar”. Ну, а имя файла может быть каким угодно.

    Читайте также:  Видеорегистратор junsun инструкция на русском языке

    Заливаем игру на телефон

    Вот мы имеем свежеиспеченный хакнутый файл Macroman.jar. Будем заливать его на телефон? А то. Сделать это можно разными путями. Например, по инфракрасному порту, Голубому Зубу, прямому кабельному соединению или выложить файл на свой собственный http-сервер, а потом стянуть его оттуда через GPRS. В общем, вариантов множество. Лично мыщъх предпочитает ИК, пример связи с которым продемонстрирован ниже.

    Итак, игра залита на телефон и. Дрожащими от волнения руками (все-таки наш первый взлом, как-никак) мы едва попадаем по клавишам, запускаем игру и. о чудо. Она работает! (В смысле, не падает) И самое главное – счетчик жизней навечно застыл на отметке двух. Мы обрели бессмертие, а вместе с ним утратили весь игровой азарт и интерес. Но какой интерес играть в игры? Вот ломать их – настоящий кайф.

    Заключение или что еще можно сделать

    Вот мы и совершили свой первый взлом! Как видно, ничего сложного и сверхъестественного в этом нет. Не маги программы ломают. Это доступно каждому! Главное – сделай свой первый шаг, а уж там. поле деятельности практически безгранично. Можно заменить все текстовые строки, в том числе относящиеся к копирайту компании-создателя. Не то, чтобы это было законно, зато очень приятно и прикольно показывать друзьям мобилу с надписью “hacked by. “.

    Более творческие настроенные кодокопатели наверняка уже загружают спрайты в графический редактор, коверкая их в готическом хакерском стиле. Ну, или меняют логотип на заставке, который также находится в png-файлах, собранных в директории image.

    Конечно, мы рассмотрели простейший случай взлома незащищенной программы. Некоторые игры и приложения тем или иным образом проверяют целостность байт-кода, а также пропускаются через обфускаторы, добавляющие “мусорные” инструкции, отвлекающие внимание и затрудняющие анализ, но базовая техника взлома при этом все равно остается неименной. Найти-и-обезвредить – вот наш девиз. Знания приходят с опытом, а опыт – со временем, проведенным за ломанием игр. Так что, дерзайте. Да. и еще. не слишком-то распространяйтесь о своих хакерских наклонностях. А то ведь и повязать могут, хотя взлом “для себя” закон не запрещает, но это уже по-любому тема совсем другого разговора.

    Полезные ссылки

    А если серьезно – не мучайся и скачай какую нибудь другую. Если нужна именно эта, то при поиске игры в Google пишешь наиболее популярные фразы типа:
    Игра + Crack
    Игра + Keygen
    Игра + Serial
    Игра Full
    Игра + кряк
    Игра + лекарство
    Игра + таблэтка (именно через Э)

    Активатор демо-игр. По сути, обычный встраиватель, цель которого снять ограничения демо-версий игр (glomo, Tanchiki Pro, Robodef Pro, Dizzy IV/VI, Jimm SE).

    Инструкция:
    Запускаете активатор, выбираете нужный jar-файл. Всё остальное программа сделает автоматически. Готовый файл будет с припиской «UnDemo» в названии.
    P.S: На Nokia может быть ошибка null.
    – Для Nokia: файл.jar переименовываем в файл.zip
    – Загружаем браузером, с заменой на файл_jar, затем переименовываем в файл.zip

    Ultimate Edition содержит: SMS, Demo, Jad, Vserv (не все игры), Ads.

    Особенности для разных версий:

    1) UnJadder for NetLizard
    Программа изменяет купленные игры, которые требуют *.jad файл. После установки изменённой игры без *.jad файла она будет активирована.

    2) UnSMS
    Программа изменяет java приложения так, что бы сообщения SMS не могли быть отправлены с устройства.

    3) UnSMS 2.0:
    Полный пакет SMS, теперь
    без любых запросов связанных с SMS.

    4) UnJava:
    Обновление всех трех приложений в одной программе.

    ВНИМАНИЕ! Проверяйте, изменилось ли приложение. Потому что если нет, то возможна отправка платной SMS вместо взлома.

    “>

    Ссылка на основную публикацию
    Adblock detector