Как копаться в файлах игры на телефоне

Обновлено: 05.07.2024

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

Я хочу рассказать о том, как с помощью реверсивной инженерии можно вносить изменения в игры на ПК. Не обязательно с целью взлома, иногда это используется для исправления багов, которые разработчики не исправили по каким-то причинам. Так, например, существует проект Forged Alliance Forever, будучи участником которого я исправил пару багов в игре Supreme Commander, которая пользуется большой популярностью до сих пор, но из-за проблем между издателем и разработчиком поддержка игры была прекращена.

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

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

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

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

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

Дебаггер — программа, которая подключается к (например) игре и позволяет ковыряться в ней во время ее работы. Она позволяет выполнять инструкции последовательно, менять содержимое регистров и стека.

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

Стек используется для хранения информации, которая используется программой. Он нам мало интересен, кроме его особенности в хранении информации в упорядоченном виде.

Вот так выглядит приложение под в режиме отладки (дебага) в x64dbg

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

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

Это посложнее, здесь мы уже перехватываем выполнение функций графической подсистемы. (Чаще всего DirectX или OpenGL). Для этого мы создаем динамическую библиотеку DLL, которая меняет адрес нужной нам функции на нашу, которая потом вызывает и оригинальную функцию, и наш код, рисующий врагов!

DLL подменяет адрес функции в таблице адресов программы, кажется, мы подсмотрели это поведение у кукушек.

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

Поскольку в реальной жизни отладка занимает просто колоссальное количество времени, мы опробуем свои силы на чем-то простом, чтобы уложиться в рамки статьи. У меня под рукой оказалась The Outer Worlds, над которой мы сегодня и будем паразитировать.

В игре есть механика заточки оружия, платим деньги — получаем улучшенное оружие.

Находим количество денег, тратим немного, фильтруем те значения, которые нас устраивают. В итоге остается одно значение, которое и является нашим количеством денег.

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

Синяя линия внизу — текущая команда процессора. Именно в этом месте и меняется значение денег. Огибающие линии сверху показывают, что мы находимся в нескольких уровнях вложенности, а команды jl как раз и являются проверками каких-то условий.

Далее мы поднимаемся немного наверх, добираемся до начала функции и попеременно меняем условия, которые в дебаггере подсвечиваются желтым цветом. Опытным путем мы узнаем, что если третье условие сработает, то мы не потратим деньги. Почему? Хороший вопрос, для этого надо проследить ход выполнения программы более внимательно, но результат не хочет ждать, поэтому вместо условия jl ставим безусловный переход командой jmp и наслаждаемся бесплатными улучшениями.

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

Исправление ошибки с максимальным уровнем снаряжения

Еще в игре есть досадная ошибка разработчиков, влияющая на баланс, — оружие можно улучшать только на пять уровней выше персонажа. Что ж, исправим это!

Первым делом необходимо найти в памяти уровень персонажа. Это можно сделать предварительно накрутив себе опыта. Как только у нас есть информация об уровне персонажа, мы снова любезно просим дебаггер приостановить работу игры в момент обращения к памяти по этому адресу.

Когда нужно что-то найти в памяти, Cheat Engine приходится очень кстати. Чаще всего необходимо найти базовый адрес, это делается довольно просто, но немного выходит за рамки статьи. Редактируем команду — заменяем обращение к адресу в памяти [rax+310] константным значением 1000

После чего доверчивая игра позволяет нам ковать столько, сколько вздумается.

Обратите внимание на уровень персонажа и уровень винтовки, теперь можно отыгрывать Men In Black, у нас же все-таки рпг, не так ли?

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

Список изменений в программе, которые будут внесены в исполняемый файл

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

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

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

Или обратная разработка, на худой конец

Это все круто, но можно гайд по руссификаций игр. Как например, извлекается текст, на чем делать перевод. И ссылки на полезные сайты.) Общий смысл то, я знаю. А вот как приступить с чем и с какой стороны, не ведаю. А напрягать какую нибудь кучку энтузиастов переводчиков, ну тоже не охота.

Насколько мне известно - зависит от движка. Как он пакует ресурсы. В некоторых случаях есть анпакеры. В некоторых танцы с бубном.

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

Да текст игры обычно нет смысла шифровать, обычно пакуют данные чтобы легче было с ними работать и читать их, этим как раз анпакеры занимаются.
Гайд такой: гуглишь анпакер от игры, если не находишь, гуглишь от другой игры на том же движке, если не работает пишешь разработчику, если не находишь, пишешь задание фрилансеру.
Если ты фрилансер анпакеры делаются просто - реверсинженирится код, догадываешься что значат эти байты с данными, проверяешь, пишешь программу которая распакует, потом запакует данные. Это как раз та нудятина которая тут описана.

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

Как два пальца ебать хаха

Сову тяжелее нарисовать

У тебя тоже есть какая-то старая игра, которую ты мечтаешь обмазать нормальными текстурами?

Это тоже можно, но сначала хотелось бы руссификаций поставить, ну естественно перед этим создать ее.)

Я раньше игры переводил. Unity очень просто переводиться, для нее даже существует утилита в духе Resourse Editor. Там просто ищешь английский текст в коде и заменяешь на русский. Если игра продуманней и поддерживает моды, находишь ресурсы, которые отвечают за язык и вставляешь как мод. Вообще вся инфа есть в Интернете, достаточно желания и гугла

Комментарий удален по просьбе пользователя

Денува шифрует . Хотя гораздо сложнее выдрать ее из ехе файла , чем обмануть ее.

К сожалению, общего подхода тут просто нет, каждый случай уникален. Как верно было замечено, зависит как минимум от движка игры. Мне лично приходилось иметь дело с No Man's Sky и Astroneer, и нюансов там куча.

Грусть. Ну хотя бы с чего начать можно?

Я бы начал с выяснения, на каком движке и какой его версии сделана игра. Делали ли уже русификацию или иные моды на эту игру до тебя, если да, то как, на какие проблемы наткнулись. Нужен ли анпакер, если да, то где достать. Скажем, в UE анпакер штатный, а вот на файлы локализации придётся искать нечто отдельно, и не факт, что найдёшь на используемую разрабами версию. Отдельно ситуацию усложняет то, что разработчики могут использовать хоть и не самописный движок (например тот же UE), но зато СИЛЬНО модифицированный. С включениями из разных версий, этакого монстра Франкенштейна. В общем, куча нюансов, как и говорил.
Т.е. до того, как ты непосредственно начнёшь что-то делать, придётся собрать немало инфы. Это сильно сэкономит время потом, но может и изрядно огорчить.
В принципе, всё это уже было сказано до меня, никакого общего алгоритма тут просто нет.

Окей, понимаю. Вообщем, есть толковые сайты по этому делу? Или только ZoG?

Возможно я ошибаюсь, но имхо ZoG это ресурс где надо искать в первую очередь сами переводы, а не методы их создания?
Честно говоря, какого-то отдельного сайта по этому вопросу я не нашёл, может быть, недостаточно искал. Но и задачи у меня были достаточно узкие. Скажем, NMS распаковывается элементарно, и текстовые ресурсы там лежат в открытом виде (зато самого текста завались, и чудовищное количество мусора, который никто не чистит). С другой стороны, Астронир распаковывается штатным анпакером UE, а вот файлы локализации приходится распаковывать дополнительно сторонней утилитой. И, в целом, UE считается не самым приятным движком для мододелов, особенно если разработчики не озаботились поддержкой оных изначально.
Поэтому ничего конкретного посоветовать не могу, только искать, концентрируясь на конкретно твоей задаче/игре.

Скачай сначала SoftICE, там уже походу разберёшься. Во всём, вообще.

Вот такой подход мне по душе

Извини бро, мои познания устарели, как выяснилось) SoftICE максимум с win xp работает.

А что тогда скачать?!

Ого, чет давно я его не запускал, гугль говорит - устарел.

Думаю ответ можно найти на ZOG.

Я вроде шарился и гайдов там таких не нашел.(

Там есть кураторы. Они уж точно знают.
Я из прошлого опыта посоветовал.
Сам переводы с ЗОГ давно не качал.
И такое чувство, что переводов там давно не делают.
Но инфа могла остаться.

Я зачем то заходил туда, там был один новый перевод и презентовали его как будто авторы диско перевели.

Ясненько.
Собсно и нужды в ЗОГ особой нет, т.к. почти все значимые игры переводят на русский. Обычно проблемы с переводом возникауют у РПГ, но и они все переводятся (пусть и не всегда достаточно хорошо).

Да мне тоже нравится как сейчас дела проходят с русификацией. Все стало намного лучше. Просто хочу себе такое маленькое хобби. Ибо при условий, что я могу перевести, что написано на экране, мне все равно тяжело воспринимать информацию, чем если это написано на русском.

Статья о реверс инжиринге.
Ожидание: дизассеблеры, программирование на ассемблере и си.
Реальность: Артмани.

А если серьезно, то оригинальное использование софта! В детстве баловался и Артманей и hex-редакторами, но использовать их совместно я не додумался.

Я, кажется, не использовал ArtMoney, да и вряд ли унылый разбор различий между соглашениями вызовов был бы интересен здесь, все-таки, не Хабр)

Я без всякой злобы) Понятно, что показан достаточно простой , но эффектный прием.

Cheat Engine не пользовался, но по скринам и описанию функционал вроде схож с Артманей - ищет конкретные значения в памяти.

Артманя - кастрированный читэнжин. В энжине встроенный HEX-редактор, например. Хоть по-человечески обращаться к памяти можно.

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

Введение

В этой статье мы поговорим о том, как разобрать пакет APK с приложением, рассмотрим его внутреннюю структуру, дизассемблируем и декомпилируем байт-код, а также попробуем внести в приложения несколько изменений, которые могут принести нам ту или иную выгоду.

Чтобы сделать все это самостоятельно, потребуются хотя бы начальные знания языка Java, на котором пишутся приложения для Android, и языка XML, который используется в Android повсеместно — от описания самого приложения и его прав доступа до хранения строк, которые будут выведены на экран. Также понадобится умение обращаться со специализированным консольным софтом.

Итак, что же представляет собой пакет APK, в котором распространяется абсолютно весь софт для Android?

Декомпиляция приложений

В статье мы работали только с дизассемблированным кодом приложения, однако если в большие приложения вносить более серьезные изменения, разобраться в коде smali будет гораздо сложнее. К счастью, мы можем декомпилировать код dex в Java-код, который будет хоть и не оригинальным и не компилируемым обратно, но гораздо более легким для чтения и понимания логики работы приложения. Чтобы сделать это, нам понадобятся два инструмента:

Использовать их следует так. Сначала запускаем dex2jar, указывая в качестве аргумента путь до apk-пакета:

В результате в текущем каталоге появится Java-пакет mail.jar, который уже можно открыть в jd-gui для просмотра Java-кода.

Устройство APK-пакетов и их получение

Пакет приложения Android, по сути, является обычным ZIP-файлом, для просмотра содержимого и распаковки которого никаких специальных инструментов не требуется. Достаточно иметь архиватор — 7zip для Windows или консольный unzip в Linux. Но это что касается обертки. А что внутри? Внутри же у нас в общем случае такая структура:

  • META-INF/ — содержит цифровой сертификат приложения, удостоверяющий его создателя, и контрольные суммы файлов пакета;
  • res/ — различные ресурсы, которые приложение использует в своей работе, например изображения, декларативное описание интерфейса, а также другие данные;
  • AndroidManifest.xml — описание приложения. Сюда входит, например, список требуемых разрешений, требуемая версия Android и необходимое разрешение экрана;
  • classes.dex — компилированный байт-код приложения для виртуальной машины Dalvik;
  • resources.arsc — тоже ресурсы, но другого рода — в частности, строки (да-да, этот файл можно использовать для русификации!).

Перечисленные файлы и каталоги есть если не во всех, то, пожалуй, в абсолютном большинстве APK. Однако стоит упомянуть еще несколько не столь распространенных файлов/каталогов:

  • assets — аналог ресурсов. Основное отличие — для доступа к ресурсу необходимо знать его идентификатор, список asset’ов же можно получать динамически, используя метод AssetManager.list() в коде приложения;
  • lib — нативные Linux-библиотеки, написанные с помощью NDK (Native Development Kit).

Этот каталог используют производители игр, помещая туда движок игры, написанный на C/C++, а также создатели высокопроизводительных приложений (например, Google Chrome). С устройством разобрались. Но как же получить сам файл пакета интересующего приложения? Поскольку без рута с устройства забрать файлы APK не представляется возможным (они лежат в каталоге /data/app), а рутить не всегда целесообразно, имеется как минимум три способа получить файл приложения на компьютер:

  • расширение APK Downloader для Chrome;
  • приложение Real APK Leecher;
  • различные файлообменники и варезники.

Какой из них использовать — дело вкуса; мы предпочитаем использовать отдельные приложения, поэтому опишем использование Real APK Leecher, тем более что написан он на Java и, соответственно, работать будет хоть в винде, хоть в никсах.

Настройка Real APK Leecher

Настройка Real APK Leecher

Просмотр и модификация

Допустим, ты нашел интересующий тебя пакет, скачал, распаковал… и при попытке просмотра какого-нибудь XML-файла с удивлением обнаружил, что файл не текстовый. Чем же его декомпилировать и как вообще работать с пакетами? Неужели необходимо ставить SDK? Нет, SDK ставить вовсе не обязательно. На самом деле для всех шагов по распаковке, модификации и упаковке пакетов APK нужны следующие инструменты:

Использовать все эти инструменты можно и по отдельности, но это неудобно, поэтому лучше воспользоваться более высокоуровневым софтом, построенным на их основе. Если ты работаешь в Linux или Mac OS X, то тут есть инструмент под названием apktool. Он позволяет распаковывать ресурсы в оригинальный вид (в том числе бинарные XML- и arsc-файлы), пересобирать пакет с измененными ресурсами, но не умеет подписывать пакеты, так что запускать утилиту signer придется вручную. Несмотря на то что утилита написана на Java, ее установка достаточно нестандартна. Сначала следует получить сам jar-файл:

Далее нам понадобится скрипт-обвязка для запуска apktool (он, кстати, доступен и для Windows), включающий в себя еще и утилиту aapt, которая понадобится для запаковки пакета:

Далее просто сваливаем содержимое обоих архивов в каталог

/bin и добавляем его в $PATH:

Если же ты работаешь в Windows, то для нее есть превосходный инструмент под названиемVirtuous Ten Studio, который также аккумулирует в себе все эти инструменты (включая сам apktool), но вместо CLI-интерфейса предоставляет пользователю интуитивно понятный графический интерфейс, с помощью которого можно выполнять операции по распаковке, дизассемблированию и декомпиляции в несколько кликов. Инструмент этот Donation-ware, то есть иногда появляются окошки с предложением получить лицензию, но это, в конце концов, можно и потерпеть. Описывать его не имеет никакого смысла, потому что разобраться в интерфейсе можно за несколько минут. А вот apktool, вследствие его консольной природы, следует обсудить подробнее.

Импорт APK в Virtuous Ten Studio

Импорт APK в Virtuous Ten Studio

Рассмотрим опции apktool. Если вкратце, то имеются три основные команды: d (decode), b (build) и if (install framework). Если с первыми двумя командами все понятно, то что делает третья, условный оператор? Она распаковывает указанный UI-фреймворк, который необходим в тех случаях, когда ты препарируешь какой-либо системный пакет.

Рассмотрим наиболее интересные опции первой команды:

  • -s — не дизассемблировать файлы dex;
  • -r — не распаковывать ресурсы;
  • -b — не вставлять отладочную информацию в результаты дизассемблирования файла dex;
  • --frame-path — использовать указанный UI-фреймворк вместо встроенного в apktool. Теперь рассмотрим пару опций для команды b:
  • -f — форсированная сборка без проверки изменений;
  • -a — указываем путь к aapt (средство для сборки APK-архива), если ты по какой-то причине хочешь использовать его из другого источника.

Пользоваться apktool очень просто, для этого достаточно указать одну из команд и путь до APK, например:

После этого в каталоге mail появятся все извлеченные и дизассемблированные файлы пакета.

Препарирование. Отключаем рекламу

Теория — это, конечно, хорошо, но зачем она нужна, если мы не знаем, что делать с распакованным пакетом? Попробуем применить теорию с пользой для себя, а именно модифицируем какую-нибудь софтину так, чтобы она не показывала нам рекламу. Для примера пусть это будет Virtual Torch — виртуальный факел. Для нас эта софтина подойдет идеально, потому что она под завязку набита раздражающей рекламой и к тому же достаточно проста, чтобы не потеряться в дебрях кода.

Поиск кода рекламы в jd-gui

Поиск кода рекламы в jd-gui

Итак, с помощью одного из приведенных способов скачай приложение из маркета. Если ты решил использовать Virtuous Ten Studio, просто открой APK-файл в приложении и распакуй его, для чего создай проект (File -> New project), затем в контекстном меню проекта выбери Import File. Если же твой выбор пал на apktool, то достаточно выполнить одну команду:

После этого в каталоге com.kauf.particle.virtualtorch появится файловое дерево, похожее на описанное в предыдущем разделе, но с дополнительным каталогом smali вместо dex-файлов и файлом apktool.yml. Первый содержит дизассемблированный код исполняемого dex-файла приложения, второй — служебную информацию, необходимую apktool для сборки пакета обратно.

Первое место, куда мы должны заглянуть, — это, конечно же, AndroidManifest.xml. И здесь мы сразу встречаем следующую строку:

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

В каталоге com.kauf.particle.virtualtorch/build/ появится результирующий APK-файл. Однако установить его не получится, так как он не имеет цифровой подписи и контрольных сумм файлов (в нем просто нет каталога META-INF/). Мы должны подписать пакет с помощью утилиты apk-signer. Запустили. Интерфейс состоит из двух вкладок — на первой (Key Generator) создаем ключи, на второй (APK Signer) подписываем. Чтобы создать наш приватный ключ, заполняем следующие поля:

  • Target File — выходной файл хранилища ключей; в нем обычно хранится одна пара ключей;
  • Password и Confirm — пароль для хранилища;
  • Alias — имя ключа в хранилище;
  • Alias password и Confirm — пароль секретного ключа;
  • Validity — срок действия (в годах). Значение по умолчанию оптимально.

Остальные поля, в общем-то, необязательны — но необходимо заполнить хотя бы одно.

Создание ключа в apk-signer

Создание ключа в apk-signer

WARNING

Чтобы подписать приложение с помощью apk-signer, ты должен установить Android SDK и указать полный путь до него в настройках приложения.

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

Теперь этим ключом можно подписать APK. На вкладке APK Signer выбираем только что сгенерированный файл, вводим пароль, алиас ключа и пароль к нему, затем находим файл APK и смело жмем кнопку «Sign». Если все пройдет нормально, пакет будет подписан.

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

Цифровая подпись необходима только стороннему софту, поэтому если ты занимаешься модификацией системных приложений, которые устанавливаются копированием в каталог /system/app/, то подписывать их не нужно.

Обычно авторы приложений создают специальные классы для вывода рекламы и вызывают методы этих классов во время запуска приложения или одной из его «активностей» (упрощенно говоря, экранов приложения). Попробуем найти эти классы. Идем в каталог smali, далее com (в org лежит только открытая графическая библиотека cocos2d), далее kauf (именно туда, потому что это имя разработчика и там лежит весь его код) — и вот он, каталог marketing. Внутри находим кучу файлов с расширением smali. Это классы, и наиболее примечателен из них класс Ad.smali, по названию которого нетрудно догадаться, что именно он выводит рекламу.

Мы могли бы изменить логику его работы, но гораздо проще будет тупо убрать вызовы любых его методов из самого приложения. Поэтому выходим из каталога marketing и идем в соседний каталог particle, а затем в virtualtorch. Особого внимания здесь заслуживает файл MainActivity.smali. Это стандартный для Android класс, который создается Android SDK и устанавливается в качестве точки входа в приложение (аналог функции main в Си). Открываем файл на редактирование.

Внутри находится код smali (местный ассемблер). Он довольно запутанный и трудный для чтения в силу своей низкоуровневой природы, поэтому мы не будем его изучать, а просто найдем все упоминания класса Ad в коде и закомментируем их. Вбиваем строку «Ad» в поиске и попадаем на строку 25:

Здесь происходит создание объекта. Комментируем. Продолжаем поиск и находим в строках 433, 435, 466, 468, 738, 740, 800 и 802 обращения к методам класса Ad. Комментируем. Вроде все. Сохраняем. Теперь пакет необходимо собрать обратно и проверить его работоспособность и наличие рекламы. Для чистоты эксперимента возвращаем удаленную из AndroidManifest.xml строку, собираем пакет, подписываем и устанавливаем.

Наш подопытный кролик. Видна реклама Он же, но уже без рекламы

Оп-па! Реклама пропала только во время работы приложения, но осталась в главном меню, которое мы видим, когда запускаем софтину. Так, подождите, но ведь точка входа — это класс MainActivity, а реклама пропала во время работы приложения, но осталась в главном меню, значит, точка входа другая? Чтобы выявить истинную точку входа, вновь открываем файл AndroidManifest.xml. И да, в нем есть следующие строки:

Они говорят нам (и, что важнее, андроиду) о том, что активность с именем Start должна быть запущена в ответ на генерацию интента (события) android.intent.action.MAIN из категории android.intent.category.LAUNCHER. Это событие генерируется при тапе на иконку приложения в ланчере, поэтому оно и определяет точку входа, а именно класс Start. Скорее всего, программист сначала написал приложение без главного меню, точкой входа в которое был стандартный класс MainActivity, а затем добавил новое окно (активность), содержащее меню и описанное в классе Start, и вручную сделал его точкой входа.

Открываем файл Start.smali и вновь ищем строку «Ad», находим в строках 153 и 155 упоминание класса FirstAd. Он тоже есть в исходниках и, судя по названию, как раз и отвечает за показ объявлений на главном экране. Смотрим дальше, идет создание экземпляра класса FirstAd и интента, по контексту имеющего отношение к этому экземпляру, а дальше метка cond_10, условный переход на которую осуществляется аккурат перед созданием экземпляра класса:

Скорее всего, программа каким-то случайном образом вычисляет, нужно ли показывать рекламу на главном экране, и, если нет, перескакивает сразу на cond_10. Ок, упростим ей задачу и заменим условный переход на безусловный:

Больше упоминаний FirstAd в коде нет, поэтому закрываем файл и вновь собираем наш виртуальный факел с помощью apktool. Копируем на смартфон, устанавливаем, запускаем. Вуаля, вся реклама исчезла, с чем нас всех и поздравляем.

  • Перевод приложений Android;
  • пример снятия триала с приложения.

Итоги

Эта статья лишь краткое введение в методы вскрытия и модификации Android-приложений. За кадром остались многие вопросы, такие как снятие защиты, разбор обфусцированного кода, перевод и замена ресурсов приложения, а также модификация приложений, написанных с использованием Android NDK. Однако, имея базовые знания, разобраться во всем этом — лишь вопрос времени.


Конечно, на разном устройстве эти места разные, как и путь к ним. Поэтому в данной статье будут разобраны наиболее частые места нахождения файлов сохранения на двух платформах: ПК (Windows) и мобильном устройстве (Android).

Сохранение прогресса через TapPouch Wi-Fi File Transfer

Если вы обзавелись новым смартфоном и хотите перекинуть на него со старого гаджета какую-либо офлайн игру со всеми сохранениями, можно воспользоваться бесплатным файловым менеджером TapPouch Wi-Fi File Transfer. Для успешного выполнения поставленной задачи вам потребуется сделать следующее:

Для защиты канала передачи на смартфоне-источнике сгенерируется цифровой код. Его нужно ввести на принимающем аппарате. После этого начнется процесс копирования, длительность которого будет зависеть от объема данных. По окончанию загрузки найти игру на новом гаджете можно в папке Wi-Fi File Transfer на внешней карте памяти.


Описанный способ сохранения прогресса работает только с офлайн приложениями, то есть с теми, в которых вся информация хранится непосредственно на мобильном устройстве. Для восстановления достижений в онлайн играх следует применять другие инструменты.


Сохранение прогресса на сервере

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

Чтобы восстановить игру со всеми сохранениями и достижениями после слета системы, выполнения factory reset или при покупке нового девайса, вам потребуется:


После этого вы сможете продолжить юзать игру с того места, на котором ранее остановились.







С помощью личного аккаунта

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

  • Многие приложения хранятся в кэше самого Андроид устройства
  • В случае обновления игры через Play Market возможна утеря данных аккаунта
  • Невозможно передать таким образом игры, установленные со сторонних сервисов (поскольку они не привязаны к Google Play)

Создание бэкапа игры через Titanium Backup

Восстановить удалённые игры или перенести их на другой гаджет без потери сохраненных данных также можно через программу для создания бэкапов Titanium Backup. Единственный ее минус – необходимость рутирования устройства. Однако современный софт позволяет получить права суперпользователя за несколько кликов.

Сегодня мобильные игры популярны как Dendy 20 лет назад. Они идеальное спасение от скуки. Но, вот вы купили новый планшет – последнюю модель. Или же, вы решили сменить своего зеленого робота на надкусанное яблоко. Как же перенести все сохранения игр на новый девайс? Скоро узнаете.

Переносим сохранения с одного Андроид-устройства на другое

Операционная система Android имеет довольно много отличий от iOS. У нее множество преимуществ, но единое хранилище данных до сих пор не продумали. Нельзя просто так нажать копировать/вставить и перенести файлы с одного устройства на другое. Поэтому перемещение сохранений игры нужно с помощью специальных программ.

На выручку приходят файловые менеджеры. Пример такой программы TapPouch Wi-Fi File Transfer

. Она бесплатна и подходит для всех Android, начиная с версии 2.2. Именно это приложение поможет перенести все файлы нужной игры на другое устройство.


Чтобы начать работу с менеджером файлов, установите его на два устройства, которые подключены к одному Wi-Fi. Далее – запускаем TapPouch, выбираем нужную папку с игрой и передаем все файлы с помощью опции Share files. На принимающем устройстве нужно подтвердить прием файла, и ввести пароль.

Но, если переместить сохранения так и не получилось, то на выручку может прийти только и программа Titanium Backup

, с помощью которой и будет произведен перенос файлов. Для этого нужно сделать следующее.

  1. Разблокировать и получить права суперпользователя.
  2. Установить Titanium Backup на два устройства – «донор» и «приемник».
  3. Создать бэкап нужного приложения и перенести полученные файлы в аналогичную папку на «пустое» устройство.
  4. Далее, на том же устройстве, в Titanium Backup, переходим во вкладку «Резервные копии» и восстанавливаем интересующее нас приложение.
  5. Удача улыбнулась и все сохранения на новом телефоне. Можете играть дальше.

С помощью Вай Фай (без ROOT-прав)

Еще один способ перенести игру с одного устройства на другое без потери прогресса. Нам поможем утилита TapPouch Wi-Fi File Transfer. Это бесплатное приложение и подходит для всех ОС Android версии 4.0 и выше. Приложение необходимо установить на двух устройствах. На аппарате-доноре откроется в стандартном режиме «Share Mode

Переносим файлы с iOS на Android и обратно

А вот здесь все не так просто как в предыдущем варианте. Нельзя просто перенести сохранения на устройство с другой операционной системой. На таких устройстваъ совершенно разная архитектура. И даже если вы передадите файлы сохранения или целую игру с Андроида на iOS то результата не получите. Но, к счастью, все не так плохо. И вот почему.

Есть игры, которые для хранения информации используют не память телефона, а облачные хранилища. Чаще всего такие приложения используют Game Center. То есть все ваши сохранения хранятся в интернете. Например, Clash of Clans.

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

И что дальше?

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

Многие сталкивались с ситуацией, когда по той или иной причине возникает необходимость поменять устройство, однако не хочется терять прогресс в своих играх. И тут в голове может появиться мысль о том, что все файлы игры, включая и сохранения, сделанные во время нее, должны где-то находиться. И если игра не подразумевает под собой постоянное подключение к интернету, то и файлы с сохранениями должны храниться на ПК/мобильном устройстве, а скопировав их на какой-либо носитель информации, игру в будущем можно будет запустить с того же места, на котором остановился. Так где хранятся сохранения игр?

Конечно, на разном устройстве эти места разные, как и путь к ним. Поэтому в данной статье будут разобраны наиболее частые места нахождения файлов сохранения на двух платформах: ПК (Windows) и мобильном устройстве (Android).

Не работает звук в Call of Juarez: Gunslinger

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

Если используете внешнюю звуковую карту – проверьте наличие новых драйверов на сайте производителя.

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

Где хранятся сохранения игр

В основном на персональных компьютерах файлы сохранения игр находятся непосредственно в папке с игрой. Однако так получается не всегда: игры, требующие подключения к интернету, вроде ММОРПГ, а также многопользовательских шутеров вовсе не имеют файлов сохранения. Так что искать их не стоит даже и пытаться: все данные об аккаунте пользователя и его прогрессе сохраняются.

Но не все игры находятся в своих папках. Где хранятся сохранения игр, если найти их в папке, куда игра устанавливалась, не получается? В полусистемной папке Local. Также здесь находятся игры, скачанные с крупных площадок вроде Steam, BattleNet, а также с сайта Ubisoft. В этом случае все данные игр, включая файлы сохранения, будут находиться в корневых папках этих площадок. Иногда случается, что здесь же появляются файлы приложений, установленных через торрент/диск, так что проверить эту папку стоит всегда.

В строке с адресом нужно прописать C:Users AppDataLocal. Username – название учетной записи. Пользователя выкинет в папку, в которой находятся файлы практически всех приложений.

Кто способен оказать такую услугу?

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

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

Мы ждем вас!

Возможно вас заинтересуют другие наши услуги:

В 2020г. на Google Play можно было скачать более 1.5 млн. приложений и игр. Пользователи Android часто без разбору устанавливают приложения, а спустя время удаляют за ненадобностью. Но что делать, если вы хотите вернуть что-то, но не можете вспомнить название?

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

Полный список можно посмотреть в аккаунте на Google Play. Откройте приложение Google Play на своем Android телефоне или планшете и нажмите на кнопку меню (3 горизонтальные линии в верхнем левом углу). Далее коснитесь «Мои приложения & игры.» Затем нажмите кнопку «Все» и вы увидите все названия.

Клик по удаленному приложению приведет вас на его страницу в Google Play, откуда вы и сможете его переустановить. Если вы не хотите засорять список удаленными приложениями или играми, то нажмите на X в правом верхнем углу.

: Руководство было сделано на основе смартфона с шаблонной ОС Android 6.0.1 Marshmallow. На девайсах с другой операционкой все может выглядеть иначе.

Как найти удаленные Android приложения и заново установить их

1. Откройте Google Play на своем Android девайсе.

2. Нажмите на кнопку меню.

3. Перейдите в Мои приложения & игры.

4. Коснитесь таба All.

5. Вот и все: вы сразу увидите удаленные приложения, поскольку напротив его названия не будет зеленой надписи Installed. Клик на удаленное приложение позволит быстро его восстановить, а на кнопку X справа — окончательно удалит из списка после подтверждения действия.

В этой инструкции я расскажу как восстановить на iPad/iPhone/iPod Touch удалённые игры и программы. Речь пойдёт как о восстановлении случайно удалённых программ, так и пропавших приложений из App Store, так и различных способах восстановления потерянных данных, которые были в приложении.

Как восстановить удалённое с iPad/iPhone приложение?

Вариант 1. Приложение до сих пор есть в App Store

В этом случае заходим в App Store и скачиваем. Если вы уже покупали приложение, то второй раз его покупать не нужно, даже если у вас указана его цена. Нужно просто залогиниться в App Store, тогда на купленных приложениях у вас вместо цены будет облачко со стрелкой.

Если вы совершали встроенные покупки в приложении, то необходимо найти кнопку внутри программы “Восстановить покупки” (Restore purchase и т.п). И нажать. Система попросит ввести пароль от Apple ID.

Если такой кнопки нет (обычно у старых приложений), но вы точно помните, что покупали, условно говоря, какое-то дополнение к настольной игре во встроенных покупках, то необходимо тапнуть по дополнению ещё раз. Вас iOS предупредит, что вы уже совершали эту покупку и позволит скачать её заново. Обратите внимание, что всякие кристаллы, подсказки и т.п. таким образом вы не восстановите.

Вариант 2. Приложения уже нет в App Store

Действуем по следующей схеме. Заходим в App Store в раздел Обновления. Там тыкаем по своему аватару.


Тыкаем на “Покупки”:


Даже если приложения нет в App Store, но есть в покупках – оно восстановится на iPad.

Как туда попасть

Для того чтобы попасть в папку Data, нужно открыть файлы телефона, выбрать память устройства и найти там папку Android. В ней будет несколько файлов, среди которых – заветная Data. Тут хранятся 90 % файлов приложений, которые можно легко скопировать. Однако, копаясь в папках игр, стоит соблюдать осторожность: если удалить/вырезать какой-нибудь нужный игре файл, то она может не запуститься или окатить прогресс.


Однако иногда, особенно при скачивании игр не через “Плэй Маркет”, а с различных сторонних сайтов, либо если игре нужен дополнительный кэш – ее может не быть в данном списке. Это происходит потому, что такие игры во время установки создают себе отдельную папку. В таком случае где хранятся сохранения игр, кроме этой папки? Находиться они могут в двух местах: в корневой папке в памяти устройства либо во вкладке games здесь же.

Как обновить сохранения

Итак, файлы скопированы и сохранены, а устройство обновлено. Пользователь заходит в игру – и она начинается сначала. Как же правильно вставить сохранения игры так, чтобы вернуть прошлый прогресс?

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

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

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

Как сделать резервную копию игровых сохранений на Android?

Итак, представьте, что ваша SD-карта или внутренняя память устройства уже трещит о швам от количества загруженной информации. Вы, конечно, можете удалить часть данных, но тогда вы потеряете драгоценные сохранения от любимых игр. Как быть? Очень просто – вам нужно скачать, установить и настроить программу , которая поможет вам сэкономить время и спасти ваши данные.

Ошибки в самой программе

Начну с пункта номер 7, поскольку по личному опыту могу судить, что причиной невозможности сохранений чаще всего являются именно сбои в самой программе. Особенно это касается тех геймеров, которые любят использовать в игре всевозможные моды. Такой конфуз со мной случился, когда я недавно решил поиграть в любимую «Cities in Motion» (транспортный менеджер). Понаставив кучу модов, я совершенно забыл, что предыдущие-то сохранения записывались без них (модов), и естественно, попытка перезаписать старый сэйв привела к логичному вылету из игры — целый игровой год оказался потерян и остался я без новых трамваев. Поэтому внимательно следите за тем, какие дополнения вы используете, и какая версия игры у вас установлена. Сюда же я отнесу и неполную версию игры, ведь вполне возможно, что вы играете в демку (демо-версию), где сохранения просто не предусмотрены. Идем дальше.

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

Зачем взламывать игры

Для взлома игрушек существует множество причин. Конечно, основная – это не платить деньги за доступ к игровым возможностям, применять разнообразные бонусы, которые обычно по усмотрению разработчиков должны быть оплачены. При этом фишки, доступные пользователям за деньги, могут быть следующими:

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

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

Подготовка телефона к использованию

Чтобы успешно взламывать игры, телефон нужно подготовить, а именно – наделить root-правами. Для работы некоторых программ потребуются дополнительные подтверждения, поэтому этим пунктом нельзя пренебрегать. Кроме того, если приложение не принадлежит Google Play, придется скачивать с отдельных ресурсов сервис в формате apk. Когда root-права получены, можно приступать к основному этапу.

Как взломать игру на Android с помощью изменения системных файлов

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

Когда разрешение на изменения файлов будет получено, следует действовать согласно инструкции, изложенной ниже:

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

image

Как взломать игры на Android с помощью приложений

Некоторых пользователей может испугать перспектива копаться в кодовых данных приложений. Для них существуют специальные программы, которые справятся со взломом игр без активного участия пользователя. Приложения представлены в двух вариантах – с root-правами и без них, каждый сервис несколько отличается друг от друга.

Лучшие приложения с ROOT-правами

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

Lucky Patcher

Эта программа абсолютно бесплатно, при этом она обладает широкими возможностями, от повышения игровых ресурсов, до обхода лицензий на игры. К основным функциям этой программы относятся: отключение рекламы полностью, доступ к игровым покупкам, прокачка навыков и уровней персонажей, установка дополнительных патчей, сохранение файлов в формате apk и возможность делать их копии. Один из плюсов – у программы относительно понятный интерфейс, разобраться в котором сможет и новичок. Благодаря ей можно сделать процесс игры в разы приятнее.

Читайте также: