Game assembly dll что это

Обновлено: 02.07.2024

Ниже мы рассмотрим проблемы с работой DDL файлов в самых популярных версиях операционной системы Windows, разберем почему возникают проблемы с DLL, а также предоставим способы их устранения.

Содержание:

  • Почему возникают ошибки с DLL?
  • Решение проблем с DDL файлами.
  • Недостающие компоненты C++ Runtime Library и DirectX.
  • Удаление сбойного приложения.
  • Обновление драйверов устройства.
  • Другие проблемы с DLL библиотеками.
  • Что делать если важный файл или DLL библиотека были случайно удалены?

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

Почему возникают ошибки с DLL?

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

Из-за ошибок DLL приложение может не корректно работать или вовсе не загружаться, поэтому следует ознакомиться с возможными причинами появления ошибок.

Одними из основных причин возникновения ошибок DLL является простое отсутствие библиотек , которые требуются для работы приложений. Недостающие файлы могут быть удалены самим пользователем, уничтожены вирусами или перезаписанными более старыми версиями в процессе установки программных компонентов. Помимо этого, ошибки могут возникать из-за неправильной работы драйверов , недостающего программного обеспечения таких, как NET Framework, DirectX и т.д.

Стоит отметить, ошибки DLL могут быть вызваны и более серьезными проблемами, связанными с жестким диском .

Решение проблем с DDL файлами

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

Пункты "Восстановление системы" "Восстановление образа системы" и "Восстановление при загрузке" подойдут для решения большинства логических проблем операционной системы. Пункты "Восстановление системы" "Восстановление образа системы" и "Восстановление при загрузке" подойдут для решения большинства логических проблем операционной системы.

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

Если проблема кроется в некорректной работе загрузчика, рекомендуем ознакомится со способами исправления в статье «Как восстановить загрузчик Windows 10» .

Недостающие компоненты C++ Runtime Library и DirectX

Чаще всего пользователи сталкиваются с проблемой ошибок DLL, которые связаны с отсутствием необходимых компонентов C++ Runtime Library либо DirectX .

Существует два способа решения проблем с недостающими компонентами DLL. Первый и более правильный – полная переустановка сбоящего ПО. Второй – скачивание непосредственного одного компонента, вызывающего ошибку.

Ошибка msvcr100.dll – сбойный компонент в системе безопасности.

Ошибки dxgi.* , d3dx9_25.*, d3d11.*, d3dx9.*, d3dx9_43.*, xinput1_3.*, d3dx9_31.*, xinput1_2.*, d3dx9_31.*, d3dx9_34.*, d3dx9_42.*, x3daudio1_7.*, x3daudio1_6.*, xrsound.* d3dx10_43.*, d3dx9_26.*, d3dx9_30.*, d3dx9_27.*, d3dx11_43.*, d3dcompiler_43.*, d3d10.*.

Ошибка steam_api.dll – распространённая ошибка среди геймеров и пользователей магазина цифровой дистрибуции Steam. Часто возникает при установке пиратских сборок игр и взломанных клиентов Steam.

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

Ошибка uplay_r1_loader.* , Uplay.exe, uplay.*, ubiorbitapi_r2_loader.* — аналогичная ошибка, как и с со Steam.

Ошибка xlive – проблемы с файлами цифрового магазина Microsoft.

Ошибка msvcrt.* , msvcr71.*, msvcrt.*, msvcp120.*, msvcp110.* x64 msvcr90.*, msvcr110.*, msvcr100.*, msvcr80.*, msvcr120.*.

Ошибка physxcudart_20.* , physxloader.* и т.д.- проблемы с файлами NVIDIA PHYSX SYSTEM.

Удаление сбойного приложения

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

Чтобы определить сбойное приложение, необходимо:

Шаг 1. Нажимаем левой кнопкой мыши по иконке «Поиск» (изображение лупы возле кнопки «Пуск») и вводим в строку фразу «Панель управления» , после чего переходим в непосредственно сам пункт «Панель управления» .

Я преследовал две цели:

  • Убрать "поломку" предмета в результате применения модификаторов
  • Не расходовать модификаторы при крафте

cut

Вот так выглядит окно крафта в игре:

Окно крафта в Last Epoch

Для начала я опишу процесс модификации старой версии игры (0.7.8)

Ищем логику крафта

Итак, запускаем dnSpy и открываем Assembly-CSharp.dll

dnSpy с открытым Assembly-CSharp.dll

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

После непродолжительных поисков мы нашли искомое — класс CraftingSlotManager:

dnSpy x CraftingSlotManager

А именно метод Forge() в данном классе:

ndSpy x CraftingSlotManager.Forge()

С моей точки зрения данный код выглядит не так уж и плохо. Даже и не скажешь сразу, что это декомпелированная версия (выдают только названия переменных в духе num1, num2. ). Есть даже логирование, которое позволяет легче понять назначение веток.

После изучения кода я выяснил примерный механизм работы — у нас есть несколько CraftingSlot 'ов, в которые мы помещаем предмет крафта и модификаторы. CraftingSlotManager соответсвенно управляет взаимодействием этих слотов и в целом отвечает за логику крафта.

Отключаем расходование ресурсов при крафте

Нас интересуют две переменные: this.modifier и this.support

Это слоты для модификаторов, которые используются во время крафта.

Как оказалось уничтожение модификаторов происходит в процессе следующих вызовов:

Хотя для меня не очевидно, почему очистка слота обязательно должна удалять его содержимое (а не, например, возвращать обратно в инвентарь) — это вопрос наименования методов и переменных и к нашему исследованию отношения не имеет.

Удаляем все вызовы this.modifier.Clear(); и this.support.Clear(); из кода функции и радуемся

Процесс редактирования в dnSpy просто фантастика — просто поправили код и сохранили в .dll — все изменения будут скомпилированы автоматически:

Убираем поломку предмета в процессе крафта

В игре поломка предмета в процессе крафта называется Fracture, поэтому мне сразу бросился в глаза данный кусок кода:

dnSpy x CraftingSlotManager.Forge()

И действительно — модификация вида int num3 = -10; полностью отключает поломку — спасибо разработчикам за оставленный дебаг флаг.

Часть вторая, где мы испытываем боль и страдания

Начиная с версии 0.7.9 разработчики начали использовать IL2CPP для того, чтобы собирать проект напрямую в нативный бинарник под нужную платформу. В результате у нас больше нет IL-кода, а есть лишь хардкорный ассемблер… но кого это останавливало?

Автор статьи не является реверс-инженером, а имеет за спиной только остатки университетского курса Ассемблера и один No-CD, сделанный в OllyDbg 10 лет назад. Вполне возможно, что какие-то вещи были сделаны неправильно или их можно было сделать намного лучше и проще

Ищем иголку в стоге Гидры

Итак, из папки игры пропали все старые .dll-ки и мы взамен получили один огромный GameAssembly.dll весом в 55 мегабайт. Наши цели не изменились, но теперь все будет намного сложнее.

Первым делом загружаем dll-ку в Ghidra'у и соглашаемся на все виды анализа, которые она предлагает (анализ занимает довольно много времени и в дальнейшем я останавливал его на стадии Analyze Address Table )

Ghidra

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

К счастью погуглив на тему IL2CPP я нашел утилиту Il2CppDumper, которая позволяет частично восстановить информацию на основе метадата-файла (который обнаружился по пути <GameFolder>/il2cpp_data/Metadata/global-metadata.dat ). Не знаю является ли данный файл необходимостью или разработчики просто забыли убрать его, но он сильно облегчил нашу задачу.

Скармливаем утилите наши файлы dll и метадаты и получаем набор восстановленных данных:

Il2CppDumper output

В папке DummyDll находятся восстановленные dll-ки с частично восстановленным IL-кодом. Загружаем восстановленный Assembly-CSharp.dll в dnSpy и идем в наш любимый CraftingSlotManager :

dnSpy (restored) x CraftingSlotManager

Ну что же, кода у нас больше нет, зато у нас есть адрес! В аннотации

Нам нужно значение VA — это оффceт, по которому мы найдем нашу функцию в Гидре:

Ghidra forge offset

Теперь мы хотя бы нашли начало нашей функции, что уже неплохо.

Можно ли сделать лучше? Вспоминаем, что Il2CppDumper генерирует данные, котрые можно импортировать в Гидру — копируем скрипт в папку скриптов Гидры, запускаем ghidra.py и скармливаем ему script.json , сгенерированный из нашей метадаты. Теперь у всех функций, которые были объявлены в исходном коде, появились имена.

Отключаем расходование ресурсов при крафте

Мы уже знаем, что нам достаточно убрать вызовы this.modifier.Clear(); и this.support.Clear(); . Осталось найти их в коде. К счастью восстановленные имена функций помогают решить эту задачу довольно просто.

Ghidra

Ломать — не строить. Чтобы убрать вызов функции нам достаточно заменить все байты, участвующие в CALL на NOP

Разбиваем команду на отдельные байты (выделив ее и нажав C, или Clear Code Bytes), затем в бинарном представлении просто впечатываем 90 пять раз. Готово!

Такую операцию повторяем для всех вызвов OneSlotItemContainer$$Clear() из нашей функции Forge() (На самом деле это нужно делать не для всех вызовов, потому что в коде есть один вызов this.main.Clear(); Но мне было слишком лениво выискивать конкретное исключение в ассемблерной каше, поэтому я убрал все вызовы).

Убираем поломку предмета в процессе крафта

Изначально мы делали int num3 = -10; и благодарили разработчика за оставленный дебаг флаг в качестве подсказки. Теперь это не кажется такой простой задачей — сложно понять, какая из

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

Ghidra

К сожалению моих знаний Ассемблера не хватило, чтобы понять как именно это работает (судя по Гидре этот процесс занимает 4 команды начиная с MOVZX и заканчивая на AND), поэтому деликатно изменить эту часть я не смог. Другого способа изменить эту переменную я тоже не нашел в силу своих ограниченных знаний, поэтому я изменил подход.

Посмотрев еще раз в замечательный (после работы с Гидрой) код старой версии игры в dnSpy я увидел, что за накопление "нестабильности" отвечает метод AddInstability

Гидра радует нас относитлеьно простым кодом данной функции:

Ghidra

По коду мы видим, что сначала происходит вызов CALL ItemData$$RollFractureTier , затем мы проверяем результат TEST EAX и прыгаем в нужную ветку:

Ghidra

Нам нужно, чтобы мы всегда шли по ветке uVar3 < 1 . Тут можно сделать разные исправления — например (могу ошибаться) поменять JG(Jump short if greater) на JLE(Jump short if less or equal).

Я решил вопрос иначе — просто сделаем проверяемый регистр равным нулю и тогда остальной код будет работать как надо. Меняем CALL на XOR EAX, EAX (самый просто способ обнулить регистр в Ассемблере), который занимает два байта и оставшиеся три байта заполняем NOP'ами.

Ghidra

Готово! Сохраняем, заменяем существующий GameAssembly.dll (почему-то Гидра в процессе экспорта файла всегда добавляет расширение .bin и его нужно удалять) и чувствуем себя хакерами.

Выводы

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

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

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

Моды состоят из файлов с расширением .assets или файлов с расширением .dll.

Вы можете скачать моды с официального сервера WorldBox в Discord. ( ссылка )

Установка мода Assembly-CSharp [ ]

Windows [ ]

Примечание. Убедитесь, что скрытые файлы отображаются. Вы можете узнать в Google, как это сделать, если они не отображаются.

2. Обязательно скопируйте все файлы, которые вы заменяете, чтобы вы могли вернуться в обычную игру, если хотите.

3. Для файлов .assets: если вы заменяете файл с расширением .assets, замените все файлы в папке, перечисленные выше, на те, которые вы загрузили.

4. Для файла Assembly-CSharp.dll: перейдите в папку ( C: \ Program Files (x86) \ WorldBox \ WorldBox_Data \ Managed) и замените файл Assembly-CSharp.dll тем, который вы скачали.

Mac [ ]

1. Удерживая Ctrl / щелкните правой кнопкой мыши на панели запуска worldbox

2. Щелкните по Показать содержимое пакета

3. Щелкните по contents->Resources->Data->Managed

4. Замените Assembly-CSharp.dll / files, заканчивающиеся на .assets, на модифицированный

Общие исправления [ ]

Текст подсказки Текст подсказки . и другие проблемы с загрузкой:

- Используйте версию игры, для которой был создан мод - Переименуйте модифицированный файл на исходное имя файла ( Пример: Assembly-CSharp (2) .dll ---> Assembly-CSharp .dll )

Мод не отображается:

- Убедитесь, что исходный файл перезаписан - Проверьте, не удалён ли модифицированный файл антивирусным программным обеспечением.

Прочие проблемы:

- Обратитесь за помощью на сервер Discord.

BepInEx Установка модов [ ]

РУКОВОДСТВО ПО WINDOWS (для linux / mac: здесь)

Windows [ ]

Вы можете следить за одним из видеороликов, использовать письменные инструкции или использовать WBMI.

WBMI [ ]

Установщик мода worldbox bepinex, созданный для очень простой установки.

Дополнительная информация / руководство здесь: WBMI

Видео: [ ]

Вам нужно только посмотреть видео, которое научит вас полной установке.

Письменные инструкции [ ]

1. Установите BepInEx отсюда

2. Откройте zip-архив BepInEx, полученный при загрузке.

3. Скопируйте и вставьте содержимое этого zip-архива в C: \ Program Files (x86) \ WorldBox (или, если он у вас установлен в другом месте, поместите их рядом с exe)

5. Возьмите любой мод BepInEx, заканчивающийся на .dll , и поместите его в BepInEx-> plugins (создайте эту папку или запустите игру, и она создаст эту папку)

Ура, вы закончили!

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

Создание модов [ ]

Моддинг WorldBox будет состоять либо из изменений кода, либо из изменений текстуры. Эти изменения влияют на внешний вид и работу игры.

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

Моддинг: Кодирование [ ]

Изменения кода в этой игре производятся с помощью файла Assembly-CSharp.dll. После открытия этого файла декомпилятором, таким как DnSpy или DotPeek, будет показан список всех классов и кода. Существуют известные классы библиотек, такие как ActorStatsLibrary, ActorTraitLibrary и PowerLibrary, которые позволяют с легкостью редактировать статистику, черты и способности. Хотя эти библиотеки не содержат всего кода для своих действий. Используя DnSpy, ваш анализатор может найти ссылки на ваш код повсюду, чтобы найти нужный вам код. Как правило, вы найдете то, что вам нужно, выполнив поиск по названию в строке поиска. Другими более крупными примечательными классами являются Actor, ActorBase и Mapbox, содержащие всевозможную случайную информацию и, возможно, лучшее место для поиска, если вы не можете найти то, что вам нужно.

Проверьте эту страницу для примеров кода.

Моддинг: текстуры [ ]

Редактирование текстур возможно посредством редактирования множества файлов с расширением ".assets". Вы будете использовать такие инструменты, как UTinyRipper , Asset Studio и Unity Asset Bundle Extractor для извлечения изображений и аудио. Чтобы импортировать / изменить эти изображения для изменения текстуры, вы будете использовать Unity Asset Bundle Extractor.Также известен как (UABE). Используя UABE, вы можете редактировать изображения, добавлять ресурсы (аудио, изображения, спрайты и т. Д.) И редактировать аудио. Игра использует листы спрайтов и будет состоять из всех увеличенных спрайтов под «sactx-1024x1024-Uncompressed-WorldAtlas-5e0836b1». Пользовательский интерфейс находится в аналогичном файле с SpriteAtlas вместо WorldAtlas. Эти два атласа содержат большое количество спрайтов, и любые изменения, которые вы хотите внести в спрайты, содержащиеся в них, можно сделать только через них. Любые значки или другие изображения можно найти и отредактировать индивидуально.

Примечание: [ ]

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

При запуске игры появится инструкция по использованию.


Для PC Building Simulator вышел бесплатный DLC на 20 часов контента

Для PC Building Simulator вышел бесплатный DLC на 20 часов контента

PC Building Simulator "Мод для поднятия фпс FPS BOOST 2.1 beta"

PC Building Simulator "Мод для поднятия фпс FPS BOOST 2.1 beta"

PC Building Simulator: Сохранение/SaveGame (Миссии не пройдены, много денег и уровней)

PC Building Simulator: Сохранение/SaveGame (Миссии не пройдены, много денег и уровней)


Ну и что же он делает?


helg123 Этот чит добавляет хорошие отзывы (5 звёзд) Опыт (Уровень) И деньги (50$ Каждое нажатие можно зажать кнопку)


Не кинешь гайд как делать подобное?


При запуске игры нету никакой инструкции лень на главной странице написать или же это очередной вирус?(Решено просто на Steam версиях игры там надо перименовать файл вот так Assembly-CSharp-firstpass.dll)



не работает (пиратка)


Ярослав Позыкаев переменуй файл вот так Assembly-CSharp-firstpass


KINGNN Вы забыли .dll в конце


Lolnickname111 По умолчанию при переименовании формат не выделяется


А как сделать такую же программу или же изменить значение выдавания денег а то 50 мало

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