–>Главная | –>Регистрация | –>Вход
RSS
–> –>
–> –>Форма входа –> |
–> –> |
–>
–> –> –> –> –> –>
–> –>Друзья сайта –> |
–> –>
|
–>

Введение
Популярность мобильных игр стремительно растет. Они прочно оккупировали рынок сотовых телефонов, коммуникаторов, смартфонов, карманных компьютеров и других аналогичных устройств. Большинство игр распространяется на условно-бесплатной основе, то есть требуют деньги, иначе блокируют часть возможностей и/или ограничивают количество запусков. Но даже полностью бесплатные игры не лишены недостатков. Неудобное управление, быстро кончающиеся жизни. Да мало ли существует причин, побуждающих хакера дорабатывать код в соответствии со своими предпочтениями? Этические проблемы взлома нас не волнуют, поэтому мы немедленно переходим к технической части, благо хвост уже зудит, чешется и рвется в бой. О взломе мобильных игр написано много, но все как-то неконкретно и не в тему. Не так-то просто обобщить свой опыт и передать его другим. Но мыщъх все же попробовал.
Чем мы будет ломать
Выбор хакерского инструментария – дело сугубо личное, индивидуальное и, можно даже сказать, интимное. Поэтому не следует воспринимать ниже перечисленный список как догму. Это всего лишь один из вариантов. Практически все обозначенные утилиты реализованы в двух-трех вариантах – как консольных, так и графических. Так что, каждый может найти программу под свой вкус. Предлагаемая подборка включает в себя только бесплатные программы, игнорируя их коммерческие аналоги, иначе это не хакерство получается, а сплошной рекурсивный спуск (чтобы сломать мобильную игру, нужно хакнуть программу, которая ее ломает).
- Прежде всего нам потребуется спецификация на байт-код виртуальной 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”. Ну, а имя файла может быть каким угодно.
Заливаем игру на телефон
Вот мы имеем свежеиспеченный хакнутый файл 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 вместо взлома.
“>