Как взять модель из игры
Перейти к содержимому

Как взять модель из игры

  • автор:

Практическое руководство по взлому (и защите) игр на 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 :

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

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

Заключение

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

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

Как взять модель из игры

1) Итак, первым делом нам необходимо скачать 3ds max. У меня лично завалялась седьмая версия, но вы можете скачать любую с 5 по 9 и с 2009 года по 2011 (требует программа по вытаскиванию моделей). Надеюсь, гуглом умеете пользоваться. Прежде чем переходить ко второму шагу, установите 3ds max. P.s. если кто-то каким-то чудом не нашёл 3ds max, то можете скачать по ссылке тот, на котором проводился весь этот опыт — https://yadi.sk/d/onuRny8UiDJ4B

2) Второе дело тоже нехитрое – нужно скачать и установить 3D Ripper DX. Именно с помощью него мы будем вытаскивать модели из игр. Найти его довольно несложно, ведь скачать его можно бесплатно прямо с сайта разработчика — http://www.deep-shadows.com/hax/3DRipperDX.htm#Download. Устанавливаем его.

3) Третьим квестом для вас будет найти программу Deep Exploration. Лично у меня все с ней получилось только на версии 3.5.10.1242. Так и вводим в гугле – «Deep Exploration 3.5.10.1242», с первой строчки скачиваем, устанавливаем. Эта программа нам понадобится для интегрирования текстур. Если вы не нашли, я скинул вам свою версию на яндекс диск — https://yadi.sk/d/KhT-eEBti48LM . Там установка и кейген. Итак, все три квеста выполнены, получаем level up и идем дальше.

4) Запускаем программу 3D Ripper DX. У нас появляется вот такое окно.

настройка 3D Ripper DX

Настраиваем. Вверху указываем путь к игре, из которой будем дергать модель. (я выбрал orcs must die). Ставим галочки как на скриншоте. Можно поставить также Force windowed mode, если хотите, чтобы игра запустилась в оконном режиме. Внизу три пути указывают, куда будет сохраняться модель, текстуры и тени. Оставляем по умолчанию, чтоб потом не запутаться.

5) Приступаем к извлечению модели из игры. С молитвами и надеждой жмем на Launch. Запускается игра. В левом углу у нас должна присутствовать желтая надпись. Вот такая.

ready to capture

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

фрагмент игры для выдергивания

6) Теперь наша 3D модель персонажа выдернута из игры. Запускаем 3ds max. Нажимаем File – Import и находим нашу сохраненную модель в \Documents\3DReaperDX\Frames. Открываем ее и видим окошко, в котором нам следует выбрать Recommended Values, в противном случае модель может сплющиться.

настройка 3ds max

Нажимаем ок и в результате перед нами предстает нечто подобное.

модель в 3ds max

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

Как вытаскивать модели из игр

Теперь мы экспортируем модель из игры, нажав на File — Export и сохраняем в укромное местечко (на ваш выбор), с расширением 3ds. Кстати, если вам не нужны текстуры, то есть подойдет просто белая модель, то сохраняете ее в расширении obj. и сразу можете открывать в pepakura designer.

7. Теперь нам нужно наложить текстуры. Мы идем в \Documents\3DReaperDX\Textures и копируем все файлы оттуда в наше укромное местечко, в котором мы сохраняли модель в формате 3ds.

7.1 Теперь запускаем Deep Exploration. В левом окне, там, где папки, находим нашу модель (она в том самом укромном местечке). И нажимаем на название модели в формате 3ds. Должно быть что-то наподобие такого.

3d модели персонажей из игр

Модель может быть прозрачной, но это ничего страшного, нам главное здесь текстуры. Теперь нажимаем на File – Save as и сохраняем с расширением obj.

8. Теперь заходим в Pepakura Designer и открываем нашу импортированную модель (файл с расширением obj). Если вся модель черная, текстуры не отображаются, то в именах папок на пути к файлу имеются русские буквы. Надо чтоб файл obj с bmp — шными текстурами имел путь только из анлийских названий, ничего русского. Тогда все нормально отобразится. Теперь можем шаманить, разворачивать, вертеть, крутить — в общем делать все что душе угодно с вашей моделью уже в пепакуре.

3d модели из игр

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

достаем модель из игры

З.ы. бывает так, что модель как-то криво отображается, попробуйте изменить угол при захвате в игре. Вся эта эпопея тестировалась на Windows 7 64 bit.

157 коммент.

Здравствуйте, столкнулся с такой проблемкой при наложении текстур на готовую модель. Вытащил модель из игры через 3D Ripper (сохранял через .obj), через Blender (3Dx Max слишком тяжелая и много всякого, но не об этом), убрал лишние детали, сохранил в формате .3ds, запустил Deep Exp. все текстуры отображаются корректно, сохраняю с тем же названием в формате .obj, в Pepakura Desiner открываю, всё корректно отображается, но после калибровки ориентации модели текстуры напрочь пропадают, остается один белый каркас. С ним можно работать, но текстуры очень нужны в развертке. Если калибровку не делать, то текстуры остаются, но вращать модель становится просто ужасно.Подскажите, пожалуйста, решение проблемы=)

Thumb up10 Thumb down3

Случайно нашел решение: баг самой Pepakura Designer. При начале калибровки ориентации модели откатиться в самое начало калибровки и текстуры встают на место=)

Thumb up7 Thumb down3

Здравствуйте. Всё вытащила, преобразовала и сохранила. Получились файлы obj, mtl и несколько файлов в формате bmp. Пытаюсь открыть файл obj PepakuraDesigner_3.1.7, потом Pepakura Designer 4, но мне выдаёт ошибку от Microsoft Visual C++:
Runtime Error!
Program: C:\Program …
R6002
— floating point support not loaded.
И я не понимаю что мне делать.
При открытии скаченных моделей такая ошибка не выскакивает. Только на созданных самой.

Thumb up9 Thumb down5

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

Воу, горячий коммент, что думаете: Thumb up73 Thumb down15

чел, если открыть архив, то в описании виден пароль: ripper

Thumb up3 Thumb down0

Спасибо за хороший обзор!

Thumb up1 Thumb down0

А если я хочу вытащить модель из Nintendo Wii игры, открытой через эмулятор на ПК, у меня получится по вашей схеме? Если нет, то жаль…

Thumb up0 Thumb down0

К сожалению, через эмулятор не получится

Thumb up0 Thumb down1

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

Thumb up2 Thumb down1

Взлом: получаем исходный код, текстуры и модели игр на Unity

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

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

Извлекаем текстуры и шейдеры

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

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

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

Установка программы dnSpy

dnSpy — это утилита для декомпиляция приложений на языке программирования C#. Инструкцию по установке можно найти на официальной страничке автора на github. Также в конце статьи будет ссылка на скачивание программы из статьи.

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

Поиск нужный файлов

Для того, чтобы получить исходный код игры скачиваем ее (можно и Steam версию игры). Далее нам нужно найти ее локальные файлы. Для этого заходим в ‘свойства‘ >> ‘локальные файлы’ >> ‘просмотреть локальные файлы‘. Далее, нужно немного порыться и найти папочку Managed‘.

Убедитесь, что игра написана на Unity!

В этой папке будет много файлов с расширением .dll. Нам нужен только 1 из них. Assembly-CSharp.dll

Работа в dnSpy

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

У вас может не быть некоторых файлов, они появятся со временем работы.

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

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

Чтобы что-то поменять в коде нужно нажать по нему ПКМ и выбрать «Изменить класс (C#)». Ставим под себя и нажимаем на «Скомпилировать» . Ссылка на скачивание — ТЫК

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

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

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

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

Дополнительные видео по нашей теме

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

Трёхмерные модели в типовой Unity-сборке «разбросаны» по различным ресурсам, а некоторые из них и вовсе могут генерироваться во время игры. Вместо копания в файлах, существует интересная альтернатива — получить данные о геометрии прямиком из памяти графического ускорителя.

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

Взламываем PlayerPrefs

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

Заключение

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

Как вытащить игровые модели из файлов игры ?

Как вытащить 3d модели из файлов игры ?
Например из новой Dying light 2. Хочу использовать для себя (немного поменять цвет, поприкалываться с монтажем над ними). А для этого мне надо их хотя бы крутить. Приветствую любую инфу по теме. No negative, no х0m0.

Иметь на руках исходный код игры.

Ну мне рил надо, хотя бы на старых игрушках применю, можно поточнее чуток ?

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

На старых игрушках денувы нету.

Никак. На данный момент никак. Вообще.

А любую другую игру ? Например первую часть или я не знаю, Batman Arkham Asylum ?

Точно не знаю, но так как она на анриле 3, то возможно можно скрыть с помощью UE Viewer (https://www.gildor.org/projects/umodel).

Так то просто просмоторщик. Он не умеет переносить модель во что-то, чтобы потом это можно было редактировать.

Почему не умеет? там буквально есть кнопка экспорта. Импортишь в блендер/макс/маю и сиди делай что хочешь. Сам в блендер много чего импортил

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

p3dm.ru вот тут ребята из игр модельки вытаскивают — может и из DL2 появятся

Ninja ripper попробуй

))) не думаю что denuvo пропустит

с пиратки потом grabить

Ну мне в какую сторону копать ? Шо гуглить

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

ебать шоооо, а как мне воссоздать в точности модель, если я захочу одного челобриняку именно такого ?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *