Разработчики игр с удовольствием пользуются теми удобствами, что им предоставляет движок Unity, но, как выяснилось, он столь же удобен и для любого желающего вскрыть эти игры. Для примера я возьму Poker World и покажу на ней, как можно не только менять параметры, но и влезть в саму логику, переиначить все на свой лад и перепаковать APK. Заодно соберем небольшой набор утилит, который поможет в работе с мобильным софтом.

INFO

Все манипуляции с приложением делались исключительно в исследовательских целях и не преследуют финансовой выгоды в каком-либо виде.

Работа работой, а отдыхать тоже нужно. Человек я не азартный, но карты покидать люблю. Недавно я приметил офлайновое приложение для игры в покер под названием Poker World. У него аскетичный интерфейс, минимальный набор функций, но есть почти все, что мне нужно. Напрягал только повышенный интерес разработчиков к донату. Поэтому с каждой раздачей исследовательская жилка напрягалась и таки не выдержала. Я взялся за клавиатуру с твердым намерением раздобыть себе немного виртуальных деньжат.

 

Первые шаги

Чтобы начать вивисекцию приложения, нам понадобится небольшой стенд. В первую очередь стоит поставить нормальный эмулятор Android. Раньше я использовал Andy, но теперь он скурвился и даже начал пихать майнеры в свои дистрибутивы. Мне в срочном порядке пришлось искать замену. Моя основная ОС — Windows, и поэтому все поиски были направлены на дистрибутивы для этой платформы. Я перебрал с десяток вариантов из топа выдачи Google, и все они, культурно выражаясь, оставляли желать лучшего. Однако мои молитвы были услышаны, и я наткнулся на MEmu. На момент написания статьи последняя версия была 5.5.1. Тут есть все, что тебе может понадобиться. Создавать можно виртуальные машины Android версий 4.4 и 5.1, а также поддерживается эмуляция нескольких моделей устройств.

Настройки эмулятора MEmu 5.5.1
Настройки эмулятора MEmu 5.5.1

Также тут присутствуют разные приятные фишки типа эмуляции камеры, спуфинга GPS, мак-адреса и сотового оператора, и, конечно же, есть поддержка трехмерной графики, то есть возможность запускать игры.

Что очень важно, MEmu поддерживает установку приложений из файлов APK и, о боги, в нем есть обычные настройки сетевого подключения Android. Это позволяет легко настроить устройство на работу через прокси типа Burp и перехватывать трафик. Ты удивишься, но часть эмуляторов не поддерживала работу через прокси и не имела стандартных сетевых настроек.

Главный экран эмулятора MEmu после запуска
Главный экран эмулятора MEmu после запуска

В общем, пока у меня не возникало претензий к MEmu. Если ты знаешь о более достойных вариантах, не стесняйся и пиши о них в комментариях.

Еще нам понадобится APK Studio, чтобы иметь возможность удобно распаковывать, пересобирать и подписывать пакеты. Для подписи пакетов к нему потребуется скачать uber-apk-signer и положить в директорию C:\Users\<имя_юзера>\.apkstudio\vendor, предварительно переименовав в uber-apk-signer.jar. Также можешь обновить apktool до последней версии и скопировать в ту же папку.

Главное окно утилиты APK Studio
Главное окно утилиты APK Studio

И конечно же, само приложение. Его можно скачать из Play Market и App Store, но нам ведь нужен сам дистрибутив. Тут на помощь приходят сайты — агрегаторы приложений. Такого рода сервисы легко гуглятся по запросу apk download. Я, например, остановился на https://apkpure.com/, где помимо текущей версии приложения можно скачать и предыдущие (иногда бывает полезно).

Переходим по ссылке и скачиваем нашего подопытного. На момент написания статьи последняя версия приложения — 1.3.5.

Теперь можно установить скачанный apk в эмуляторе. Для этого достаточно перетащить его на окно с запущенным MEmu — практически в лучших традициях macOS.

Загрузка игры Poker World 1.3.5 в эмуляторе
Загрузка игры Poker World 1.3.5 в эмуляторе

На этом этапе базовые приготовления закончены. Обо всех остальных полезных штуках и утилитах я расскажу в процессе препарирования приложения.

 

Начинаем веселье в iOS

Так получилось, что играть я начал на айфоне. И где-то на третьем уровне денег начало катастрофически не хватать. Аппарат был без джейлбрейка, и делать мне его совершенно не хотелось, поэтому я начал искать баги в логике самого приложения. Такие, чтобы можно было провернуть, не закапываясь в его дебри.

Парочку таких я и обнаружил. В игре есть возможность раз в четыре часа крутить однорукого бандита, из которого тебе рандомно выпадают всякие ништяки. Их в игре всего два вида — это деньги и билеты. И те и другие нужны для участия в турнирах. Так вот в местном аналоге тотализатора можно выиграть небольшое количество денег или один билетик. Количество денег, которые ты можешь срубить, зависит от уровня твоего персонажа. Каждые несколько уровней суммы выигрыша в этой рулетке удваиваются. На самом первом они составляют от 400 до 2000 долларов.

Своеобразный однорукий бандит в Poker World
Своеобразный однорукий бандит в Poker World

Про билет и 2000 баксов можно забыть, за месяц игры и тысячи кручений этой рулетки ни разу ничего подобного мне не выпало. Интересно будет взглянуть на алгоритм. 🙂

Тем не менее через пять таких спинов ты получаешь возможность сделать джекпот-спин, в котором все выигрыши умножены на три и, соответственно, можно урвать аж три билета.

Эволюция спинов в Poker World
Эволюция спинов в Poker World

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

Чтобы бесконечно не переводить время в будущее, можно сделать так:

  • сворачиваем приложение, находясь на экране с таблицей спинов и таймером до следующего;
  • переводим часы на четыре часа вперед;
  • разворачиваем, видим, что появилась кнопка Spin Now. Нажимать ее не нужно;
  • сворачиваем;
  • переводим время на четыре часа назад;
  • снова разворачиваем и теперь уже нажимаем кнопку.

Я проводил такую процедуру после каждого джекпот-спина. Это дает возможность не уходить далеко в будущее, так как от системного времени много чего зависит. Срабатывание алертов, событий в календаре и прочее.

Вообще, я сильно удивился тому, какие проблемы может вызвать изменение даты на устройстве с iOS. Например, после того как я выставил 2030, меня разлогинил iCloud и отказывался пускать обратно с неизвестной ошибкой. Я уж было подумал, что мой аккаунт заблокировали за путешествия во времени. Повторно авторизоваться удалось только после перезагрузки девайса.

INFO

Два года назад в iOS нашли баг: устройство окирпичивалось, если поставить дату на 1970 год. Можно предположить, что от системной даты многое зависит.

Плюс сама смена даты неудобна — чтобы сменить год, нужно прокрутить все 365 дней. Вот и сиди, вози пальцем как сумасшедший.

Помимо бесплатных спинов, имеются еще игры без вложений, которые тоже доступны каждые четыре часа. В цепочке — пять игр, в каждой ты можешь выиграть определенную сумму, причем чем дальше по цепочке ты проходишь, тем больше куш. Приз за выигрыш в последней — один билет.

Эволюция бесплатных игр в Poker World
Эволюция бесплатных игр в Poker World

Ускорить можно точно таким же способом — изменение системного времени. К слову сказать, этот стандартный финт с переводом часов еще много где прокатывает, не стесняйся и чекай в тех приложениях, где предлагают чего-то подождать. 🙂

Но это все цветочки. У меня завалялся старый джейлбрейкнутый айфон, а это значит, что настало время заглянуть поглубже в недра игры и посмотреть, что там творится. Запускаю утилиту Filza и смотрю, где располагаются файлы приложения. У меня это /path. Немного покопавшись, я обнаружил интересный файл com.youdagames.pokerworld.plist.

Интересный файл с настройками игры Poker World
Интересный файл с настройками игры Poker World

Сам файловый менеджер Filza позволяет открывать, редактировать и сохранять файлы plist. В нем располагаются разные настройки, которые касаются игры в целом и текущего пользователя в частности. Мой взгляд зацепился за парочку интересных именованных переменных: UserChips и UserTickets. И да, они означают именно то, что ты подумал. Это количество твоих денег (фишек) и билетов. Я поменял значения на нужные и запустил игру.

Редактирование количества денег и билетов у игрока в Poker World
Редактирование количества денег и билетов у игрока в Poker World
Добавили себе фишек и билетов
Добавили себе фишек и билетов

И вуаля! Виртуальный миллионер. Помимо этого, в файле находится куча интересных параметров — таких как текущий уровень игрока, его позиция в десятке лидеров, какие уровни уже пройдены, лимиты столов и прочее. Если будет интересно, то можешь поэкспериментировать на досуге, а я перехожу к версии приложения для Android и более увлекательным вещам.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    3 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии