Cover

Взлом игр на Unity3D

Written on July 2nd, 2019

Структура игровых директорий

│   *.exe
└───*_Data
    │   globalgamemanagers
    │   globalgamemanagers.assets
    │   level0
    │   level0.resS
        ...
    |   levelN
    |   levelN.resS
    │   sharedassets0.assets
    │   sharedassets0.assets.resS
        ...
    |   sharedassetsN.assets
    |   sharedassetsN.assets.resS
    |   resources.assets
    ├───Managed
    │       Assembly-CSharp.dll
    │       Assembly-UnityScript.dll
    │       Mono.Security.dll
    │       mscorlib.dll
    │       System.Core.dll
    │       System.dll
    │       UnityEngine.dll
    │       UnityEngine.dll.mdb
    │       UnityEngine.Networking.dll
    │       UnityEngine.UI.dll
    ├───Mono
    │   │   mono.dll
    │   └───etc
    │       └───mono
    │           │   browscap.ini
    │           │   config
    │           ├───1.0
    │           │       DefaultWsdlHelpGenerator.aspx
    │           │       machine.config
    │           ├───2.0
    │           │   │   DefaultWsdlHelpGenerator.aspx
    │           │   │   machine.config
    │           │   │   settings.map
    │           │   │   web.config
    │           │   └───Browsers
    │           │           Compat.browser
    │           └───mconfig
    │                   config.xml
    └───Resources
            unity default resources
            unity_builtin_extra

* : название, данное при сборке проекта

Файл/Директория Описание
*.exe Исполняемый файл
*_Data Data содержит ресурсы игры
level0-levelN Это файлы сцен, каждый хранит информацию о своей сцене
sharedassets0-sharedassetsN В тких файлах хранятся игровые ассеты
resources.assets Ассеты-библиотеки и их зависимости
Managed Содержатся библиотеки Unity3D
Assembly-CSharp.dll Библиотека, в которую собираются все C# файлы проекта
Assembly-UnityScript.dll То же самое, только UnityScript файлы

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

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

Их можно декомпилировать с помощью ILSpy, в то же время dnSpy позволяет ещё и редактировать и рекомпилировать библиотеки.

Извлечение ресурсов

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

Инструмент Описание
Unity Assets Explorer Экспортирует текстуры в .DDS, а меши .43.
DisUnity Инструмент коммандной строки, написан на Java, экспортирует ресурсы в сыром формате.
Unity Assets Bundle Extractor Позволяет модифицировать ассеты и экспортировать их в удобнызх для использования/модификации форматах (png/tga - текстуры, obj - меши).
Unity Studio Инструмент для осмотра, экспорта и модификации ресурсов из приложений на Unity3D.
QuickBMS с этим скриптом или этим для OpenGL билдов

DDS :

Файлы DDS можно редактировать с помощью плагина для GIMP или для Photoshop.

Как ещё можно извлекать модели/текстуры :

С помощью 3D Ripper DX (нет поддержки x64) или Ninja Ripper (ИМХО самый удобный вариант).

Изменение памяти

У Cheat Engine имеется инструменты Dissect Mono, который помогает в редактировании памяти работающего приложения. Довольно полезная серия гайдов об использовании данного инструмента (на английском).

P.S. могу записать видео-гайд, если это нужно
(отпишись в комментариях)