Как достать файлы из игры на unity

от admin

Как достать файлы из игры на unity

Нужна программа Disunity можете поискать, а можете скачать по ссылке.

распаковать в какой либо каталог,туда-же для удобства скопируем файл который хотим расковырять
далее 2 варианта(их больше но распишу 2)

1:вариант
Пуск\выполнить\cmd
откроется окно с командной строкой
далее нужно перейти в каталог с программой кто не знает — команды командной строки.

cd.. выйти на каталог выше
cd название папки — войти в неё
c: или d: или любой другой диск перейти на этот диск

добираемся до нужной папки с распакованной программой и файлом
далее пишем disunity extract имяфайла
программа создаст папку с именем файла и всё будет в ней.
(файл копировать не обязательно можно прописать путь до него..но так думаю поудобней)

2:вариант
нужен Total Commander или еще какой файловый менеджер.
через данную программу заходим в папку с программой и нужным файлом
далее в командной строке пишем(наверно и в проводнике можно но не проверял)
disunity extract имяфайла

По сути всё тоже самое только не надо вспоминать что такое командная строка и прочее.
Формат dds можно преобразовать с помощью XnConvert он бесплатный.

Name already in use

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

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

Структура папок игры Unity

* : имя было выбрано при компиляциии

File/Directory Description
*.exe Исполняемый файл игры
*_Data Папка с данными, содержащая игровые ресурсы
level0-levelN Файлы, содержащие данные игровых сцен, каждая сцена имеет свой файл
sharedassets0-sharedassetsN Ресурсы игры разделены на общие ресурсы и файлы .resS. и это бесит :/
resources.assets Активы, найденные в папках ресурсов проекта, и их зависимости хранятся в этом файле.
Managed Папка, содержащая библиотеки DLL Unity
Assembly-CSharp.dll DLL-файл, содержащий скомпилированные файлы C #
Assembly-UnityScript.dll DLL-файл, содержащий скомпилированные файлы UnityScript

Извлечение и редактирование кода

Файлы C # и UnityScript компилируются в библиотеки DLL Assembly-CSharp.dll и Assembly-UnityScript.dll соответственно, которые находятся в папке Managed.

DLL можно декомпилировать с помощью ILSpy или dnSpy которые позволяют изменять и перекомпилировать файлы сборки.

Если библиотеки DLL отсутствуют в управляемом каталоге, попробуйте сбросить их с помощью этого инструмента MegaDumper

Активы хранятся в файлах .assets и .resS. Содержимое этих файлов можно распаковать одним из следующих инструментов :

Tool Description
UtinyRipper uTinyRipper — это инструмент для извлечения ресурсов из сериализованных файлов (CAB- *, * .assets, .sharedAssets и т. д.) и пакетов ресурсов ( .unity3d, * .assetbundle и т. д.) и преобразования их в собственный формат Engine.
Unity Studio Инструмент для исследования, извлечения и экспорта ресурсов из игр и приложений Unity.
Unity Assets Bundle Extractor UABE — это инструмент, который позволяет изменять файл ресурсов и извлекать ресурсы в пригодных для использования форматах (png / tga для текстур, obj для сеток).
Unity Assets Explorer Может извлекать текстуры в формат .DDS, сетки в формат .43.
QuickBMS with this script or this one for webplayer

В DDS файлы могут быть открыты / перекодировано / отредактирован с этим gimp plugin или с этим photoshop plugin.

Другой способ извлечения сеток и текстур :

Используйте 3D Ripper DX (не поддерживает 64-битные двоичные файлы) или Ninja Ripper.

У cheat-engine есть функция Dissect mono которая может помочь взломать память игры. Это видео video series об использовании чит-движка действительно полезно.

Практическое руководство по взлому (и защите) игр на Unity

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

Извлекаем 3D-модели

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

Взламываем PlayerPrefs

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

Защищаем PlayerPrefs

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

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

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

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

Взламываем исходный код

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

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

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

Защищаем исходный код

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

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

Взламываем память игры

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

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

Защищаем память игры

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

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

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

Заключение

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

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

Как вытащить ассеты из игры на Unity

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

Методы были опробованы на играх:

  • Lobotomy Corporation
  • Oxygen Not Included
  • Library of Ruina
  • Disco Elysium
  • Hell is Others

Важно! Законно использовать файлы из игр можно только в некоммерческих целях! [1]

Содержание

AssetStudioGUI

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

Открываем ассеты

  1. Открываем AssetStudioGUI
  2. Нажимаем на вкладку FileLoad Folder
  3. Открываем папку, где установлена игра и выбираем папку с постфиксом _Data (например LibraryOfRuina_Data)
  4. Нажимаем на вкладку Asset List

Спрайты (Texture2D)

Пожалуй, достать их легче всего:

  1. Нажимаем на вкладку Filter TypeTexture2D
  2. А теперь на вкладку ExportFiltered Assets
  3. Выбираем папку выгрузки (внутри указанного места создастся папка с названием Texture2D)

Как правило, названия спрайтов редко связаны по смыслу, так что теперь начинается самое «весёлое»: отсортировать несколько сотен, а то и тысяч изображений по разным папкам, чтобы потом их можно было быстро найти. Часто папки можно назвать папки вот так:

  • Characters — персонажи
  • Items — предметы
  • Portraits — портреты персонажей
  • Enemies — враги
  • UI — элементы интерфейса
  • Other — для странных и бесполезных изображений

Обратите внимание, что могут быть файлы-дубликаты с припиской #424531 или ещё каким-нибудь числом. Их можно смело удалять, если раздражают.

Звуки

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

Важно! Как правило, файлы будут в формате .wav, соответственно, весить они могут очень много, часто даже больше 10 гигабайт. Советую сделать сортировку по размеру файла и найти границу, где короткие звуки отделяются от длинного саундтрека. Звуки достаём, а саундтрек находим на YouTube’е или где-то ещё в формате MP3.

Вариант №1 — папка с игрой

Редко, но такое бывает. Попробуйте поискать папку Sounds или Music среди содержимого папки с игрой.

Вариант №2 — AssetStudioGUI

В AssetStudioGUI во вкладке Filter Type может быть ассет типа AudioClip (если его нет, переходите к следующему варианту). Выбираете его, не забыв снять галочку с Texture2D, и экспортируете файлы.

Вариант №3 — формат .bank

  1. Заходим в папку _DataStreamingAssets
  2. Смотрим, есть ли файлы формата .bank
  3. Если есть, радуемся, и качаем программу Fmod Bank Tools
  4. Открываем программу, выбираем папку с .bank-файлами и папку экспорта. Экспортируем

В одном .bank-файле обычно лежит сразу группа звуков. Программа автоматически создаст папки для каждой.

Ни один вариант не сработал?

Проверьте, сделали ли вы всё правильно. Если вы уверены, что ни один способ не подходит к вашему случаю, напишите мне в личку, посмотрим вместе.

Диалоги и другие текстовые файлы

Аналогично звукам, тексты разработчики организуют огромным количеством вариантов.

Важно! Текстовые файлы могут быть очень большими, поэтому открывать их следует только в простых текстовых редакторах (Блокнот, Notepad++ и т.п.).

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

Вариант №1 — папка с игрой

Бывает, что создатели просто создают отдельную папку с файлами формата .xml. Попробуйте поискать её.

Вариант №1 — текстовые файлы

В AssetStudioGUI во вкладке Filter Type может быть ассет типа TextAsset (если его нет, переходите к следующему варианту). Выбираете его, не забыв снять галочку с других типов, и экспортируете файлы.

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

Вариант №3 — Articy:draft 3

Если диалоговая система в игре создана с помощью Articy:draft 3, то, скорее всего, подойдёт этот способ (к таким играм относится Disco Elysium):

  1. Открываем ассеты игры через AssetStudioGUI
  2. Нажимаем на вкладку Filter TypeMonoBehaviour
  3. Сортируем ассеты по размеру файла
  4. Экспортируем файлы DialoguesLockitRussian и GeneralLockitRussian (возможны другие названия)
  5. Открываем файлы в текстовом редакторе

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

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

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

Вариант №4 — I2 Localization

Если диалоговая система в игре создана с помощью плагина I2 Localization, то, скорее всего, подойдёт этот способ (к таким играм относится Hell is Others):

  1. Открываем ассеты игры через AssetStudioGUI
  2. Нажимаем на вкладку Filter TypeMonoBehaviour
  3. Сортируем ассеты по размеру файла
  4. Находим файл I2Languages, выделяем, нажимаем на вкладку ExportRawSelected assets
  5. Открываем получившийся файл в Notepad++
  6. Видим, что все нелатинские символы имеют неправильную кодировку. Нажимаем на вкладку КодировкиКодировкиКириллицаWindows-1251 , а затем КодировкиПреобразовать в UTF-8 . Сохраняем
  7. Открываем файл I2Languages.dat.bak, меняем кодировку на UTF-8. Теперь символы должны отображаться верно. Выделяем весь текст ( Ctrl  +  A ), копируем в текстовый файл

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

Ни один вариант не сработал?

Проверьте, сделали ли вы всё правильно. Если вы уверены, что ни один способ не подходит к вашему случаю, напишите мне в личку, посмотрим вместе.

Характеристики объектов

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

Вариант №1 — папка с игрой

Мало вероятно, но создатели могут просто создать отдельную папку с файлами характеристик. Попробуйте поискать её.

Вариант №2 — файлы MonoBehaviour

Ассеты Unity 1.png

Немного теории (возможно я опишу что-то некорректно, но суть вы должны уловить): особенность Unity заключается в том, что большинство скриптов для объектов делаются с добавлением класса MonoBehaviour. В этот класс можно добавлять различные переменные, в том числе и игровые характеристики объекта.

Например, для персонажа игрока можно создать скрипт, в который будут вписаны его ХП, выносливость, скорость передвижения и т.д. (см. изображение) Аналогично работают предметы, враги и NPC.

Часто, чтобы упростить код, в эти переменные могут записываться другие скрипты чисто с переменными для каждого отдельного объекта (т.н. ScriptableObject). Например, скрипт «Weapon : MonoBehaviour» может содержать поле «Data», в который можно засунуть скрипт «WeaponData : ScriptableObject» с параметрами урона, количества патронов и др. Таким образом, чтобы сделать пистолет, дробовик и снайперскую винтовку, разработчику достаточно просто поменять значения характеристик и сохранить получившийся объект в качестве префаба.

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

Далее рассмотрим процесс на конкретном примере: игре Hell is Others.

Как обновлять файлы?

Что делать, если с обновлением в игре появился новый контент? Для спрайтов и звуков всё просто:

  1. Создаём папку и копируем в неё все файлы одного типа из новой версии игры
  2. Создаём вторую папку и копируем в неё все файлы из старой версии (вынув их из папок)
  3. Содержимое второй папки копируем в первую с заменой
  4. Если всё сделано правильно, все старые файлы будут выделены. Нажимаем ⇧ Shift  +  Delete
  5. В папке остались все новые файлы и файлы-дубликаты с припиской типа #424531. Раскидываем их по папкам из старой версии

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

Можно ли достать что-то ещё?

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

Читать:
Что такое d в интеграле

Похожие статьи