Assembly csharp dll как изменять

Обновлено: 06.07.2024

private bool MainMenu = true;
И юзаем ссылку UnityEngine:
using UnityEngine;
В Update пишем:

if (Input.GetKeyDown(KeyCode.Insert)) //Кнопка на которую будет открываться и закрываться меню, можно поставить другую
this.MainMenu = !this.MainMenu;

public Rect RT_MainMenu = new Rect(0f, 100f, 120f, 100f); //Rect это месторасположение меню по x,y и высота, ширина.
public int ID_RTMainMenu = 1;
И в OnGUI пишем:
if (this.MainMenu)
this.RT_MainMenu = GUILayout.Window(this.ID_RTMainMenu, this.RT_MainMenu, new GUI.WindowFunction(this.Menu_MainMenu), "MainMenu", new GUILayoutOption[0]);
>
Теперь мы сделали так, что бы при нажатии на Insert у нас открывается меню. Теперь заполним это меню:
Создаем кнопку в методе Menu_MainMenu:
if (GUILayout.Button("Название вашей кнопки", new GUILayoutOption[0]))
//Здесь код, который будет происходить при нажатии на эту кнопку
>
Но где взять этот код ? Ах, хорошо что у нас есть Assembly-CSharp.dll. Ранее мы открыли этот файл в DnSpy, теперь мы ищем в нем интересную информацию. Я нашел переменную PlayerScript.health (Здоровье игрока)

И я вписываю этот код в нашу кнопку, получается:

if (GUILayout.Button("Бессмертие", new GUILayoutOption[0]))
PlayerScript.health = 999999; //При нажатии на кнопку у игрока устанавливается здоровье 999999

using UnityEngine;
Создаем переменные:
public static GameObject MainClass;

// Token: 0x040000FE RID: 254
public static GameObject DrawPlayers;

// Token: 0x040000FF RID: 255
public static GameObject DrawVeh;

// Token: 0x04000100 RID: 256
public static GameObject TestAim;

// Token: 0x04000101 RID: 257
public static GameObject GuiClass;
Создаем метод лоад и пишем в него следующее:
public static void Load()
Loader.MainClass = new GameObject("fl_Main");
MainClass.AddComponent<Название класса чита>();
UnityEngine.Object.DontDestroyOnLoad(Loader.MainClass);
>

В целом, я объяснил как примерно создать чит. Далее какой он будет зависит только от вас. Мы сделали чит, да, теперь осталось его заинжектить(внедрить) в игру.
Для этого нам нужны Mono-Инжекторы. На просторах интернета их полно. Ищем исходник, и открываем его в том же VisualStudio
Теперь нужно определится для чего будет инжектор(Для браузерных игр, либо для игр скачанных на компьютер)
Я буду делать для браузерных. Отличия этих двух инжекторов, в том что они ищут разные процессы. У игр скачанных на компьютер модуль mono.dll, у браузерных mono-1-vc.dll
В общем, если выражаться проще, мне нужно найти в коде инжектора строку mono.dll и заменить на mono-1-vc.dll. Все, теперь инжектор ищет процессы в которых есть модуль mono-1-vc.dll(Т.е браузерную игру)
Каждый MonoInjector внедряет Пространство имен(Namespace), класс(Class) и метод (Method) просто у некоторых оно прямо в коде, а у некоторых нужно писать прямо в активированной проге.
Пример:

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

Открываем инжектор и внедряем.
Надеюсь вы дочитали это до конца, поняли, и узнали для себя много нового <З
По началу может быть тяжело, но спустя время будет щелкать это как орешки.


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


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

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

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

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

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



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

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


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

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


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

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

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

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

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

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

Моды состоят из файлов с расширением .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 для фактического импорта спрайтов или изображений.

как взломать игру unity

Уроки

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

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

Prostoi-proejk-v-unity

Далее, сохраним сцену и скомпилируем все это в игру для платформы windows.

Компиляция для windows

Укажем папку для сохранения игры и назовем файл к примеру test.

сохранение

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

В папке, куда скомпилирована наша игра, есть файл с расширением exe и папка с библиотеками куда Unity и компилирует все игровые скритпы, игровые модели и т.д. Нам понадобятся, для просмотра скрипта, всего один файл. В папке managed найдите файл Assembly-CSharp.dll

библиотеки игры

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

ILSpy

ILSpy открытие проекта

Как видим, Unity не сильно то и затрудняется шифровать игровые скрипты , особо не меняет их структуру и так же, не меняет название переменных. Таким образом, есть возможность посмотреть скрипты большинства игр созданных на Unity, например скрипты игры The Long Dark без труда можно посмотреть в данной программе.

Unity3d шифрование Assembly-CSharp DLL платформы Android полная запись




0, принцип шифрования

Когда Mono загружает Assembly-CSharp.dll, он считывает файл в память и, как правило, не имеет значения, чтобы прочитать файл игрового ресурса.

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

То же самое верно для моно чтения Assembly-CSharp.dll. Пока мы просто изменяем один байт Assembly-CSharp.dll, мы можем уничтожить структуру данных Assembly-CSharp.dll, и тогда Assembly-CSharp.dll больше не будет dll, он становится обычным файлом, неизвестным типом файла, который система не распознает.



В Android сборка-CSharp.dll загружается libmono.so.

libmono.so Это моно.



Поскольку Assembly-CSharp.dll зашифрован нами, libmono.so, универсальный инструмент для чтения, больше не может читать зашифрованный Assembly-CSharp.dll, поэтому нам также нужно изменить и перекомпилировать libmono.so, добавить его Только функция расшифровки.

Unity3d основан на Mono2.0, который является бесплатным и открытым исходным кодом. Поэтому, основываясь на различных протоколах с открытым исходным кодом, Unity официально также открыла исходный код модифицированного Mono, который мы скачали и модифицировали для перекомпиляции нашего собственного libmono.so.

Проект размещен на Github, адрес проекта:

Как только вы знаете какой-то фон, вы можете начать работать.

1. Установите систему Ubuntu



Компиляция в Windows более сложна . это будет проще для Linux или Mac. Большинство онлайн-уроков основаны на Mac. Я выбрал последнюю систему Ubuntu здесь.

Ubuntu официально предоставляет инструменты для записи ISO:

Загрузка системы Ubuntu:

Используйте инструмент выше, чтобы установить его на флэш-накопитель USB, а затем установить его на свой компьютер.

После установки Ubuntu обратите внимание на разницу между 32 и 64 битами в Ubuntu

sudo su переключиться на установку root

После установки найдите RELEASE.txt в каталоге установки, в котором записан полный номер версии NDK, и измените его на r10e.

(Сценарий компиляции Mono считывает номер версии, записанный в этом файле RELEASE.txt, а затем совпадает с номером версии, введенным в сценарий компиляции. Если он не совпадает, он будет загружен из Google)

Установите переменную среды ANDROID_NDK_ROOT

Сделайте так, чтобы переменные среды вступили в силу немедленно

Проверьте, успешно ли добавлено

3. Скомпилируйте разрабатываемую версию libmono.so

Скачайте unity-mono с Github, версию 4.6, которую я скачал здесь, и найдите 4.6 в ветке

Распакуйте и скопируйте mono-unity-4.6/external/buildscript/build_runtime_android.sh Перейдите в каталог mono-unity-4.6 / root.

Перейдите в каталог mono-unity-4.6 / и запустите build_runtime_android.sh с правами root,

Подскажу Git не установлен

Затем установите git:

Измените строку build_runtime_android.sh 113, чтобы:

Затем измените mono-unity-4.6 / external / android_krait_signal_handler / build.pl

Удалить первую строку

Продолжайте запускать ошибку, подскажите ANDROID_NDK неправильная версия , Загрузите снова, загрузка не удалась, измените нашу собственную версию.

Найдите build.pl с помощью команды

Измените r9 в функции BuildAndroid до версии, которую вы скачали

Потому что в r10e нет 3.3, только 4.8.

Потом продолжай компилировать

подсказка Нет авторефкон

Установите autoreconf, используя следующую команду:

Таким же образом, установите следующие пакеты, кстати

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

После более чем десяти минут скомпилируйте его. Используйте find / -name "libmono.so", чтобы найти скомпилированный файл so.

Скомпилированная версия является версией для разработчиков. Теперь вы можете скопировать скомпилированный libmono.so на свой компьютер. После экспорта проекта Android замените libmono.so в каталоге libs.

Затем бегите к телефону, чтобы проверить, все ли в порядке.

Что касается того, как скопировать libmono.so с компьютера Ubuntu на компьютер Windows, вы можете напрямую использовать диск U. Однако у меня нет флэш-накопителя USB, поэтому я открыл службу SSH в Ubuntu, затем подключился к Ubuntu в Windows и загрузил ее на компьютер с Windows, что создает дополнительные проблемы.

Запустите ssh-сервер в Ubuntu, и он автоматически запустится после установки

Запустите сервис вручную

Посмотрите, был ли запуск успешным

Введите пароль для учетной записи ip в Ubuntu, порт 22, для соединения SFTP.

4. Скомпилируйте релизную версию libmono.so

Изменить все build_runtime_android.sh и build_runtime_android_x86.sh

Найти -fpic -g удалить -g

Выполните build_runtime_android.sh снова

Начните компилировать код,

Успешно скомпилируйте, используйте find / -name "libmono.so", чтобы найти скомпилированный файл so. Затем скопируйте его на компьютер с Windows, экспортируйте выпускную версию проекта Android и запустите его на своем телефоне для тестирования.

Мой тест в порядке.

5. Измените libmono.so и добавьте функцию расшифровки

Найдите файл /metadata/image.c

Эта функция, эта функция используется для чтения DLL. Измените эту функцию, чтобы добавить код расшифровки.

Начните компилировать код,

Успешно скомпилируйте, используйте find / -name "libmono.so", чтобы найти скомпилированный файл so. Скопируйте на компьютер с Windows.

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

Это потому, что мы изменили libmono.so и добавили функцию расшифровки, но текущая Assembly-CSharp.dll не зашифрована! ! ! Таким образом, libmono.so здесь не удалось прочитать Assembly-CSharp.dll, поэтому ни один из написанных нами кодов не был выполнен.

Теперь вы знаете, как добавлять методы расшифровки и компилировать версии для разработки и выпуска.

Поэтому теперь скомпилируйте зашифрованный libmono.so для разработки и выпуска соответственно.

Каждая компиляция автоматически генерирует libmono.so для процессоров armv7a и x86.

Давайте скопируем эти libmono.so в проект Unity и сохраним их в папке Editor. Вы можете скачать мой пример, чтобы просмотреть его.

6. Шифрование Assembly-CSharp.dll

После экспорта проекта Android в Unity3d зашифруйте Assembly-CSharp.dll и замените файл libmono.so в экспортированном проекте Android.

Unity3d обеспечивает обратный вызов для экспорта проекта Android. В этом обратном вызове мы заменяем файл libmono.so в экспортированном проекте Android следующим образом:

Хорошо, это все, что нужно сделать.

Снова экспортируйте проект Android, а затем запустите его на телефоне, чтобы проверить, в порядке ли он.

Затем найдите файл dll в экспортированном проекте по следующему пути:

Это показывает, что наше шифрование успешно! !




Вы можете скачать мой тестовый проект для просмотра и тестирования:

Я также упаковал его в пакет:

Обратите внимание, что это просто простое шифрование. Не делайте его таким простым для онлайн-проектов .

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