Перейти к содержанию
  • записи
    104
  • комментариев
    125
  • просмотров
    15 627

[dnSpy + Unity ] Пошаговая отладка


MasterGH

13 170 просмотров

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

Сэкономит кучу времени при поиске и отладке игрового кода,

 

1. Страница загрузки dnSpy

2. Скачиваем dnSpy и все архивы с mono.dll файлами

Unity-debugging-4.x-win32.zip

Unity-debugging-4.x-win64.zip

Unity-debugging-win32.zip

Unity-debugging-win64.zip

3. Смотрим свойства exe файла игры и определяем по нему версию Unity. Например, "Версия продукта 5.5.0.3120186" или версия "файла 5.50.39994" может указывать на версию Unity 5.5.

4. Определяем разрядность приложения через Process Explorer

5. Т.к. версия Unity 5.5 и приложение 32 разрядное, то открываем Unity-debugging-win32.zip ищем там версию Unity и заменяем mono.dll в директории игры

6. Запускаем игру и dnSpy x86 (игра 32 разрядная поэтому x86). Открываем файл "\...\Managed\Assembly-CSharp.dll" Запускаем отладку нажав F5 или кноgку Play

7. Настраиваем соединение и жмем ок

we9Xt6mU2XPzgAAAABJRU5ErkJgggA=

8. Ставим брейкпоинты, смотрим перемененные, перемещаемся по коду, пишем свой код и так далее

Скрытый текст

wewqVGDWgxJOAAAAABJRU5ErkJgggA=

9. После изменения кода, нужно перезаписать модуль предварительно сохранив его

Скрытый текст

kpfver+Dj6AAAAAElFTkSuQmCCAA==

BzcLWYXisTzFAAAAAElFTkSuQmCCAA==

 

О других способах подключения пошаговой отладки есть на английском руководство.

----------------------

 

Как работать в пошаговой отладке

 

Работать можно почти также как и в Cheat Engine в пошаговой отладке или в среде разработки программ.

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

Стоит обратить внимание на такие названия как "IsPlayer, Player, Character, CharacterController, MainCharacter, Health, Inventory, Craft" и другие. Чтобы не искать вручную можно задействовать поиск сборкам. Поиск стандартного тега "Player" в виде в строки кода (в Unity выше версии 5.0) или свойства "IsPlayer" может помочь найти игрока или отличить от чужих.

 

Важно представлять иерархию игровых объектов, которую мы не видим в dnSpy. Программист работая в Unity видит это окошко много лет и эту иерархию всегда представляет смотря на скрипты в dnSpy

8H5UZxRYGA6h4AAAAASUVORK5CYIIA

Скрипты наследники от MonoBehavior могут находиться на игровом объекте и могут работать как с ним так и с другими объектами. Получается такая штука, что игровой объект всегда имеет Transform компонент с полями позиций, углами и scale. Классы Transform и GameObject самые основные. Методами этих классов можно разместить объект в мире, создать или удалить его. В идеале удалив объект со сцены не должно быть никаких ошибок связанных с пустыми ссылками, потерей объекта. Также и клонировав объект, тоже не должно быть ошибок. Но не всегда так просто отспавнить игровой объект. Если это сделать методами UnityEngine, то другие классы ничего не будут знать о появлении игрового объекта. Нужно ставить брейкпоинт в функции Start или Awake в классе и трейсить по Shift+11 чтобы выйти на функцию разработчиков спавна этого GameObject. Функции Start или Awake (в классе наследника от MonoBehavior) срабатывают один раз при включении скрипта и инициализации. По ним можно выйти на строку кода, которая создает объекты в мире.

 

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

 

Основные приемы

В Update можно обновлять параметры только своего игрока. Например, в Character классе сделать сравнения в Update по IsPlayer свойству (если оно там есть) и у тебя за каждый кадр рендеринга будет максимум характеристик.

В Update с классом Input можно считывать хоткеи.

В Start и Awake можно подгружать свои ассеты с внутриигровым user interface. Код скриптов перед загрузкой ассетов должен быть внедрен через dnSpy

Иерархию игровых объектов и инспектор, если очень нужно, то можно отрисовать в user interface. Обычно не требуется. (поищите по форуму в игрострое)

 

В заключении

Пока нет времени делать трейнер или таблицу на CE для включения опций в играх Unity. Для меня пока подходит способ через перезапись модуля в dnSpy вручную.

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

  • Плюс 4

5 Комментариев


Рекомендуемые комментарии

16 часов назад, maks17990 сказал:

Подскажите а как определить какая версия unity

Посмотреть свойства файла игры. Первые две цифры как в примере пункта 3

Ссылка на комментарий
В 30.06.2018 в 15:15, MasterGH сказал:

Посмотреть свойства файла игры. Первые две цифры как в примере пункта 3

а по подробнее можно как именно просто я беру exe фаил нажимаю свойство и там ни какой информации нет 

Ссылка на комментарий

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

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



Войти
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.