Как извлечь файлы из игры

Как извлечь файлы из игры

Движок Ren’Py является одним из самых популярных у создателей визуальных новелл из-за своей простоты и бесплатности.

Некоторые разработчики сжимают свои игры на этом движке помещая файлы в архивы вроде images.rpa. Если вам хочется посмотреть что спрятано в таких архивах, то есть очень простой способ их распаковать. Рассмотрим распаковку на примере игры Everlasting Summer (Бесконечное Лето), но этот способ будет работать и на других играх на движке Ren’Py.

Для начала заходим в папку с игрой.

Скачиваем этот файл:

depack.rpy

Помещаем скачанный depack.rpy в папку «game» нашей подопытной игры.

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

В появившейся папке «unpacked» будут лежать все распакованные файлы.

Здравствуйте. Сам я не являюсь программистом, но могу думать в данном направлении. Вопрос такой — требуется вынимать/перехватывать данные из игры. За пример берём любую часть GTA. Человек садится в машину, и едет. Происходит набор скорости у машины и естественно меняется траектория движения игрока.
Вопросы такие:
1) Можно ли вынуть данные из игры, которые сообщают что игрок сел в машину?
2) Можно ли вынуть данные из игры, о скорости движения машины/игрока в данный момент?
3) Можно ли вынуть данные о траектории движения?

Конечно реализовать это всё можно просто считываем вводимых значений с клавиатуры, например посадка в машину это нажатие на F. Конечно можно так же примерно узнать направление движения, путем считывания клавиш WASD, однако в данном случае это не подходит. Есть идеи?

Ещё один вопрос, касательно остальных игр, реализуют ли разработчики доступ к считыванию этих данных? Конечно они не секретны, их всегда можно открыть локально из архива с игрой. Но ведь сейчас многие реализуют анти-чит, особенно в онлайне, поэтому вскрыть поток например через Charles, или WPE PRO — чревато для аккаунта.

Есть ли какие-либо специальные программы для gamedev’a для этих целей?

  • Вопрос задан более трёх лет назад
  • 1952 просмотра

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

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

Читайте также:  Пацанские цитаты про маму

Не все, но некоторые игры точно имеют некоторое API. Например, World of warcraft, похоже, имеет некоторое API, с которым работает клиент Wowhead.

Когда речь идёт о программном обеспечении, термин «взлом» зачастую ассоциируют с пиратством и нарушением авторских прав. Данная статья не об этом; напротив, я решительно не одобряю любые действия, которые прямо или косвенно могут навредить другим разработчикам. Тем не менее, эта статья всё же является практическим руководством по взлому. Используя инструменты и методы о которых далее пойдёт речь, вы сможете проверить защиту собственной Unity игры и узнаете, как обезопасить её от взлома и кражи ресурсов.

В основе взлома лежит знание: необходимо понимать особенности компиляции Unity-проекта, чтобы его взломать. Прочитав статью, вы узнаете, каким образом Unity компилирует ресурсы игры и как извлечь из них исходные материалы: текстуры, шейдеры, 3D-модели и скрипты. Эти навыки будут полезны не только для анализа безопасности проекта, но также для его продвинутой отладки. В связи с закрытостью исходного кода, Unity часто работает как «черный ящик» и порой единственный способ понять, что именно в нём происходит — это изучение скомпилированной версии скриптов. Кроме прочего, декомпиляция чужой игры может стать серьёзным подспорьем в поиске её секретов и «пасхальных яиц». Например, именно таким образом было найдено решение финальной головоломки в игре FEZ.

Рассмотрим для примера игру, собранную под ОС Windows и загруженную через Steam. Чтобы добраться до директории, в которой находятся нужные нам ресурсы, откроем окно свойств игры в библиотеке Steam и в закладке «Local files» нажмём «Browse local files…».

Когда Unity компилирует проект под Windows, ресурсы всегда упаковываются по схожей схеме: исполняемый файл (например, Game.exe ) будет находится в корне директории игры, а по соседству расположится директория, содержащая все игровые ресурсы — Game_Data .

Большинство ресурсов Unity-проекта упаковываются в файлы проприетарного формата с расширениями .assets и .resources . Наиболее популярный на сегодняшний день инструмент для просмотра таких файлов и извлечения из них ресурсов — Unity Assets Explorer.

Графический интерфейс программы не отличается удобством, а также она страдает от нескольких критических багов. Не взирая на это, программа вполне способна извлечь большинство текстур и шейдеров из игры. Полученные в результате текстуры будут иметь формат DDS, который можно «прочитать» с помощью Windows Texture Viewer.

Читайте также:  На компе горит красная лампочка

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

Трёхмерные модели в типовой Unity-сборке «разбросаны» по различным ресурсам, а некоторые из них и вовсе могут генерироваться во время игры. Вместо копания в файлах, существует интересная альтернатива — получить данные о геометрии прямиком из памяти графического ускорителя. Когда игра запущена, вся информация о текстурах и моделях, видимых на экране, находится в памяти видеокарты. С помощью утилиты 3D Ripper DX можно извлечь всю эту информацию и сохранить в формате, понятном 3D-редакторам (например, 3D Studio Max). Учтите, что программа не самая простая в обращении — возможно, придётся обратиться к документации.

PlayerPrefs — это класс из стандартной библиотеки Unity, который позволяет сохранять данные в долговременную память устройства. Он часто используется разработчиками для хранения различных настроек, достижений, прогресса игрока и другой информации о состоянии игры. На ОС Windows эти данные сохраняются в системном реестре по следующему пути: HKEY_CURRENT_USERSoftware[company name][game name] .

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

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

Затем его можно использовать следующим образом:

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

Для Windows-сборок Unity компилирует и сохраняет исходный код всех игровых скриптов в директорию Managed . Интересуют нас следующие библиотеки: Assembly-CSharp.dll , Assembly-CSharp-firstpass.dll и Assembly-UnityScript.dll .

Для декомпиляции и просмотра managed-кода .NET библиотек (коими и являются наши жертвы) существуют довольно удобные и при этом бесплатные утилиты: IlSpy и dotPeek.

Читайте также:  Internet start net как убрать

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

Раз Unity не заботится о сохранности нашего кода — сделаем это сами. Благо, существует утилита, готовая автоматически зашифровать плоды нашего интеллектуального труда: Unity 3D Obfuscator.

И хотя программа отлично справляется со своими обязанностями, многие классы, адресуемые извне родной библиотеки, всё же не могут быть зашифрованы без риска нарушения связанности — будьте осторожны!

Cheat Engine — широко известная программа для взлома игр. Она находит ту область оперативной памяти, которая принадлежит процессу запущенной игры и позволяет произвольно её изменять.

Эта программа пользуется тем фактом, что разработчики игр очень редко защищают значения переменных. Рассмотрим следующий пример: в некой игре у нас есть 100 патронов; используя Cheat Engine, можно выполнить поиск участков памяти, которые хранят значение «100». Затем мы делаем выстрел — запас патронов составляет 99 единиц. Снова сканируем память, но теперь ищем значение «99». После нескольких подобных итераций можно с легкостью обнаружить расположение большинства переменных игры и произвольно их изменять.

Cheat Engine столь эффективна от того, что значения переменных хранятся в своём изначальном виде, без какой-либо защиты. Серьёзно усложнить жизнь «читерам» довольно просто: нужно лишь немного изменить способ работы с переменными. Создадим структуру SafeFloat , которая послужит нам безопасной заменой стандартного float :

Использовать нашу новую структуру можно следующим образом:

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

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

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

Ссылка на основную публикацию
Как зайти на канал в дискорде
На самом деле вопрос о том, как найти группу в Дискорде, не лишен смысла. Тем более, что штатных инструментов для...
Как будет время посмотрите пожалуйста
Вводное слово “пожалуйста” обособляется в любой позиции. Однако в случае “скажите пожалуйста нужна ли запятая” существуют определенные исключения из общего...
Как выйти из личного кабинета теле2
Помощь абонентам Tele2. Личный кабинет Теле2 – отличный способ самостоятельно, без похода в салон решить многие вопросы, связанные с вашим...
Как извлечь файлы из игры
Движок Ren’Py является одним из самых популярных у создателей визуальных новелл из-за своей простоты и бесплатности. Некоторые разработчики сжимают свои...
Adblock detector