Взлом игр для Android на примере Defender

Defender взлом

Решил ради интереса взломать игрушку на Android. Для теста взял довольно успешную игру Defender. Покажу как взломать игру и задать любое количество золота и кристаллов.

Сразу надо сказать, что вам понадобится рут доступ (Android rooting). Почему выбрал именно Defender? Потому что пришлось немного попотеть для взлома =3

И так, рут доступ у вас есть. Заходим в папку /data/data/com.droidhen.defender/shared_prefs . Можно использовать Root Browser Lite как менеджер. В папке будут файлы вроде: save2.xml, save3.xml. Юзается, как я понял, стандартный механизм сохранения параметров под Android. То есть, все данные в xml формате, что убирает необходимость использовать HEX редакторы.

Файл выглядит примерно так:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<int name="wallLevel" value="10" />
<int name="singleRetry" value="0" />
<int name="magicStone" value="10" />
<string name="goldcheckValue" >76de858b1664d23221ab412ed4abbb51</string>
<int name="guardLevel" value="10" />
<int name="equipBow" value="1" />
<string name="magicStonecheckValue" >5fd2b882d59f61217457c49ccdf89bca</string>
<int name="totalRetry" value="2" />
<int name="gold" value="100" />
<int name="stage" value="1" />
<int name="hardMode" value="0" />
</map> 

Большую часть параметров можно менять без последствий. Хотите себе супер оружие? Установив значение <int name="equipBow" value="10" />. Ну и т.д. Трудность заключается в изменении значений золота и кристаллов. Сами значения то вот:

...
<int name="magicStone" value="10" />
<int name="gold" value="100" />
...

Но, как наверно заметили, для них ещё и чек поле есть:

...
<string name="goldcheckValue" >76de858b1664d23221ab412ed4abbb51</string>
<string name="magicStonecheckValue" >5fd2b882d59f61217457c49ccdf89bca</string>
...
</map> 

Кто хоть немного шарит, мог предположить, что это хэш какой-нить. И я об этом подумал, решил проверить на md5. Не сошлось…Затем решил восстановить значение по хэшу. Для этого есть интересный сайт по расшифровке. И внезапно…для хэша 76de858b1664d23221ab412ed4abbb51 из файла он выдал 100checkChar.

Ещё прогнав пару примеров выяснилось, что magicStonecheckValue и goldcheckValue — это md5(значение+"checkChar") . Дальше уже дело техники. Хотим 99999 золота и 999 кристаллов, надо установить такие значения:

...
<int name="magicStone" value="999" />
<int name="gold" value="99999" />
<string name="goldcheckValue" >44a1c01d87f7f3a656aab4971554cff2</string>
<string name="magicStonecheckValue" >4b7ca05fb6be594a45f36410cb4b441a</string>
...
</map> 

Меняйте значения с осторожностью

Меняйте значения золота и кристаллов с большой осторожностью. Если чек поле заполните неверно, то ваш прогресс сбросится (сейв файлы при следующем запуске игры обнулятся). Так что, тщательно проверьте изменённые значения перед запуском игры.

Генератор для checkValue

Ниже генератор представлен для checkValue. Вводите в верхнее поле нужное значение золота/кристаллов, он выдаст вам значение для чек поля, которое вам надо будет занести в файл.

Значение:

Значение для чек поля: