Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #88, АПРЕЛЬ 2006 г.

Ломаем наяву

EGOiST/TSRh (icq: 8507375)

Хакер, номер #088, стр. 088-074-1


Мидлеты платные: вид изнутри

На сегодняшний день мобильник уже не редкость и, наверное, никого не удивляет, что в Интернете много сайтов, посвещенных халявным java-играм/программам. Что такое "мидлет"? Мидлет - это java-апплет, но для мобильных устройств, отсюда и приставка "мид" (Mobile Information Device). Чтобы найти мидлеты, кто-то работает программистом, сотрудничая с распространителями игр, тем самым "по блату" получая к ним доступ, а некоторые их просто покупают, затем расшаривая.

[а как же хакеры?]

А хакеры, как и в случае с обыкновенным софтом, просто отламывают триалы. Именно триалы, так как регистрации с проверкой ключа встречаются очень редко, но и их подобие мы разберем в этой статье. Как ты, наверное, догадался, на рынке мидлетов бесплатный софт разделяется на несколько категоррий, а именно: полностью бесплатный, триальный, бывают ограничения на количество запусков, дней, времени (обычно пару минут); демо (почти неломаемый вид). В этой статье мы опишем только триальный вид мидлетов.

[инструментарий]

Так, что нам нужно для счастья? Баночка пивка да упаковка кальмаров. Хотя нет, нам понадобятся дизассемблер/патчер Java байт-кода, JavaBite, декомпилятор классов (любой, основанный на Jad). Подойдет DJ Java Decompiller, но можно воспользоваться и чистым Jad, еще возьмем Java Decompiller со встроенным деобфускатором - очень помогает при исследовании обфусцированного кода. JavaBite с апдейтом от Stiver's также имеет деобфускатор. Но сам JavaBite очень тормозной, так что его будем использовать только для патча. Да и деобфускатор не без греха: на некоторых мидлетах он не хочет восстанавливать код обратно и просто вылетает. Чем отличается декомпилятор и дизассемблрер? Дизассемблер преобразовывает class-файлы в читабельный байт-код (подобно x86 дизассемблеру). Java байт-код выполняется в реальном времени Java VM, поэтому Ява-приложения немного тормозят. Вместо центрального процессора код обрабатывается виртуальной машиной. Декомпилятор же преобразовывает этот байт-код в читабельный (а иногда его можно и скомпилировать) полноценный исходник. Еще может пригодиться MobiTrans - специальная программа для перевода мидлетов. И напоследок можешь захватить свой любимый хекс и текстовой редактор, лучше с подсветкой. Чтобы не насиловать свой мобильник, возьмем эмулятор. Не обязательно искать эмулятор именно для своего телефона. Например, я взял первый попавшийся от Сименсов.

[легко]

Чуть не забыл, сами мидлеты находятся на www.getjar.com. Для самого простого примера при самой распространенной защите возьмем TMines - подобие виндового сапера. Ограничение состоит в том, что на полях больше чем 8х8, а играть можно только 45 секунд. Итак, скидываем TMinesTry2.jar в папку для игр примерно "\SMTK\emulators\CX65\Filesystem\0\Java\jam\Games" (я взял эмулятор для CX65). Запускаем игру в эмуляторе, устанавливаем поле больше, чем следует, и через 45 секунд видим сообщение: This trial version has a time limit of 45 seconds... Распаковываем jar-архив любым архиватором. Настало время для декомпиляции классов. В JavaDecompiller'е в опциях надо поставить галку у "Deobfuscate" и указать путь к Jad'y. Выбираем папку с классами, в которой распаковали архив, жмем Decompille и получаем в той же папке набор *.java-файлов (это и есть исходники игры). В этих файлах ищем упоминание о триале (я пользуюсь Far'ом, то есть Alt+F7 ;), нашлось оно в g$a.java и в g.java. Код, который нам нужен, есть только в g$a.class, просто при компиляции этот подкласс был вынесен в другой файл. Если попробовать дизассемблировать g.class, то никакого упоминания о триале там не будет (именно дизассемблировать, а не декомпилировать), а при декомпиляции класс g$a.class автоматически подключается. Итак, взглянем на код: перед показом триала идет блок if:

Содержание  Вперед на стр. 088-074-2