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

Обновлено: 03.07.2024

Автор материала: Михаил Бесчетнов aka Terminus

В статье, в качестве примера, описывается процесс распаковки архива формата DAT из игры Imperium Galactica II

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

Начнем с поиска самих ресурсов. В принципе, видов хранения информации в играх немерено. Однако вначале следует взглянуть, не лежат ли спрайты/картинки/звуки в привычном для нас формате (bmp,jpg,wav и пр.). Если вы нашли что-то подобное, значит вам крупно повезло. Если нет — можете продолжать читать дальше.

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

При расшифровке любого формата вероятность успешного результата резко возрастает, если разбирать одновременно несколько образцов этого формата. В нашем случае используется два архива: sounds_colony_speech_self-destruct.dat и textures_colony_lens.dat.

Итак, подопытные архивы отобраны. Теперь пришла пора найти содержащиеся в них файлы. В каждом архиве есть область, в которой описываются все файлы. Назовем эту область FAT (File Allocation Table). В каждом же архиве имеется и заголовок (Header), в котором может раполагаться смещение до FAT, идентификатор формата, количество файлов, Copyright и много еще чего. Как правило Header располагается в начале архива, реже — в конце, очень редко — его нет совсем, однако это уже тяжелый случай. Для начала попробуем найти FAT в одном из наших архивов. Зрительно он определяется довольно просто — это область, где группы байтов располагаются с некой переодичностью. Проще всего это увидеть , если сравнить Рисунок 1 с Рисунком 2 . В первом случае данные располагаются хаотично, и регулярность не улавливается. Кроме того, FAT отличается обилием нулей в своих полях, особенно в начале. Объясняется это тем, что смещение первых (а иногда и всех) файлов ограничивается значением 16’777’215 (или даже 65’536) т.е. помещается в трех (или двух) из четырех байт значения типа LongInt и один(или два) байт остается нулевым. Это очень заметно. Ничего этого в начале нашего первого архива нет. Так что искать там нечего.

Перейдем в конец нашего архива и к рисунку 2. Сразу бросаются в глаза имена файлов. Ну вот, найден FAT. Его расшифровка теперь — дело техники. Теперь надо найти информацию о смещении FAT и об общем количестве файлов. Ищем глазами начало FAT (на рисунке он за пределами видимости). Обнаруживаем, что начинается он по смещению $DC1A3. Но ведь нашей задачей стоит не разбор конкретного архива, а возможность с помощью отработаного метода разобрать любой архив DAT. Так что ищем универсальный способ определения адреса FAT. Адрес этот может отсчитываться как от начала, так от конца архива. Получаем два адреса: от начала — $DC1A3, от конца — $DCAB9(размер архива)-$DC1A3=$916. Попытаемся найти любой из этих адресов в конце архива. И находим значение $16 09 00 00 по адресу $DCAB5. Это последние 4 байта архива.

Теперь обратимся ко второму эксперементальному архиву и к Рисунку 3 . Как мы уже поняли, предположительно смещение FAT можно прочитать в последних четырех байтах архива. Чтобы окончательно подтвердить это предположение, посмотрим на последние четыре байта второго архива ( Рисунок 3 ). Там, по смещению $5BB2 читаем значение $106. Вычитаем это значение из общего размера архива и получаем $5AB0. Идем по этому смещению и куда попадаем? Да, на начало FAT второго архива. Значит, гипотеза подтвердилась.

Осталось только рассмотреть структуру записи об одном из файлов. Вот содержащиеся в записи поля (в скобках указана длина поля):

  1. Имя файла (длина произвольна).
  2. Смещение в архиве до него (4 байта).
  3. Хлам (4 байта).
  4. Размер данных (4 байта).
  5. Реальный размер файла (если использован алгоритм сжатия GZip) (4 байта).
  6. Хлам (4 байта).

Длина поля имени может быть во всех записях фиксированой или произвольной. Во втором случае либо перед полем указывается длина имени, либо (как в нашем случае) имя читается до первого нулевого символа. Остальные поля отгадываются эксперементально. Размер первого файла=Смещение второго-смещение первого. Само смещение можно отгадать. Это особенно легко, в случае если все файлы имеют один и тот-же тип, т.е. имеют общий идентификатор в заголовке. Например, во втором архиве рассмотрим запись о первом файле (смещение $5AB0), и о втором (смещение $5ACE). После имени первого файла, пропустив один нулевой символ, читаем $00 00 00 00. Будем считать, что это и есть смещение до первого файла. Идем по этому смещению, т.е. в начало архива и запоминаем хотя бы два первых байта — $78 9C. Теперь читаем те же четыре символа — $FF 48 00 00. Идем по этому смещению ($48FF) и видим те же два байта. Т.о. совпадают идентификаторы обоих файлов, следовательно поле, содержащее смещение файла определено верно. Таким же методом научного тыка определяются и остальные поля.

Напоследок хотелось бы уделить внимание еще кое чему. Иногда файлы в псевдоархивах сжаты совершенно настоящим архиватором GZip. Этот метод использован и в IG2, и в HOM&M III. Идентификатором формата GZip является последовательность $1F 8B 08 00 00 00 00 00 00 00. Однако в играх этот идентификатор по неизвестной мне причине заменяют на $78 9C. Что бы при распаковке псевдоархива сформировать полноценный архив GZip из того файла, что там хранится, например, правильно извлечь из второго архива файл flare.bmp ( Рисунок 3 ), нужно:

  1. Создать файл с именем Flare.bmp.
  2. Записать туда настоящий идентификатор GZip, т.е. $1F 8B 08 00 00 00 00 00 00 00.
  3. Копировать в созданый файл данные Flare.bmp из псевдоархива , начиная с третьего байта (чтобы отсечь ложный идентификатор GZip).
  4. В конце Flare.bmp вписать Реальный размер файла. Он включен в запись FAT.

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

Примечание от 11 ноября 2001г.

Маневр с «ложным заголовком» GZip справедлив в том, и только в том случае, когда вы используете библиотеку GZipLib или другие библиотеки того же класса. При использовании ZLib заголовок редактировать не надо.

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

Я хочу рассказать о том, как с помощью реверсивной инженерии можно вносить изменения в игры на ПК. Не обязательно с целью взлома, иногда это используется для исправления багов, которые разработчики не исправили по каким-то причинам. Так, например, существует проект 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-редактор, например. Хоть по-человечески обращаться к памяти можно.

Программы для распаковки игр

MultiEx Commander

Использование программы MultiEx Commander для извлечения игровых ресурсов

Вместе с MultiEx Commander разработчики предлагают добавить EasyMod. Этот инструмент предназначен для создания пользовательских модов с быстрой интеграцией их в игровые ресурсы. Можно сказать, что данное приложение представляет собой полноценный комбайн, позволяющий не только получать файлы, но и сразу изменять их, сохраняя проект и просматривая, как влияют внесенные изменения на игровой процесс. Кстати, вы можете сразу извлечь все файлы, а затем отредактировать определенные, чтобы получить не просто мод, а отдельно запускаемую игру. На официальном сайте MultiEx Commander есть ссылки на документацию и наглядный видеоурок по использованию упомянутого EasyMod, помогающие быстро разобраться со встроенными функциями и применить их при извлечении игровых ресурсов.

Game Extractor

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

Использование программы Game Extractor для извлечения игровых ресурсов

Известно, что изображения, использующиеся внутри игры, часто имеют довольно специфический формат и, соответственно, не подходят для использования обычными юзерами. В Game Extractor присутствует простой конвертер, предназначенный для преобразования картинок в JPG или PNG и сохранения их на компьютере с целью дальнейшего использования. Отметим, что эта функция, как и режим предпросмотра, разблокирована только в полной версии, распространяющейся за 10 долларов. Скачайте сначала базовую сборку, проверьте, совместима ли она с необходимыми играми, после чего уже решайте, стоит ли переходить на полную. Для этого можете прочитать список различий, представленный на официальном сайте.

Dragon UnPACKer

Использование программы Dragon UnPACKer для извлечения игровых ресурсов

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

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

Game File Explorer

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

Использование программы Game File Explorer для извлечения игровых ресурсов

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

QuickBMS/QuickBMS GUI

Рассмотрим версию QuickBMS как с графическим интерфейсом, так и запускающуюся через консоль, поскольку разные пользователи желают получить соответствующее их требованием ПО. Конечно, в большинстве случаев GUI-версия куда привычнее, но на ее выборе дело еще не закончено. Сами по себе эти программы не предназначены для распаковки игр, а всего лишь являются средствами исполнения BMS-скриптов. Скрипты требуют ручной установки, после чего их уже можно выполнять. Благо энтузиастами было создано множество различных утилит, в том числе и для извлечения игровых ресурсов. Вы можете воспользоваться официальным сайтом, чтобы ознакомиться с готовыми скриптами и подобрать подходящие.

Использование программы QuickBMS для извлечения игровых ресурсов

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

Resource Hacker

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

Использование программы Resource Hacker для извлечения игровых ресурсов

Закрыть

Мы рады, что смогли помочь Вам в решении проблемы.

Отблагодарите автора, поделитесь статьей в социальных сетях.

Закрыть

Опишите, что у вас не получилось. Наши специалисты постараются ответить максимально быстро.

Для того чтобы не тратить время на прохождение игры, разблокировать платные уровни или поставить рекорд в игре, её можно взломать. Существуют несколько способов взлома игр на Андроид, которые подойдут абсолютно для любой игры. Вам понадобятся root права (права суперпользователя) на вашем устройстве и файловый менеджер Root Explorer.

1. Изменение параметров в системных файлах игры.
Первый способ взлома игр на Андроид - это изменение параметров в системных файлах игры.
Давайте рассмотрим этот способ взлома на примере игры Highway Rider . Скачайте, установите и запустите игру. Ломать будем ускорения или boost tanks.


Для начала, необходимо обязательно завершить процесс игры которую мы будем ломать из диспетчера задач. Нажмите и удерживайте кнопку Home на главном экране устройства, что откроет список всех запущенных процессов (скриншот ниже), найдите там Highway Rider и swipe-движением удалите его из списка.


Далее открываем Root Explorer, открываем в нём папку Data и внутри неё еще одну папку с таким же названием Data. В этой Data папке находим папку с нашей игрой, обычно в конце полного названия папки написано название приложения, и открываем её (в нашем примере это com.batteryacid.highwaydriver. Далее видим несколько папок. Файл с параметром boost tanks, который нам необходимо изменить находится либо в папке shared_prefs, либо в папке files.











Выходим из Root Explorer, запускаем игру и смотрим изменился ли показатель boost tanks.






После этого вернитесь обратно в игру нажав кнопку “Обратно” в правом верхнем углу программы. Наберите еще некоторое число очков в Subway Surfers и запомните сколько набранных очков у вас теперь. Снова нажмите на иконку Game Guardian по середине экрана и осуществите поиск еще раз как описано выше, только теперь введите новое число набранных вами очков. На этот раз найтись совсем немного значений, в нашем примере нашло всего 5. Нажимаем на каждое из них и держим палец пока не появится окно в котором вводим необходимое нам значение очков.

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