Подведи собственные итоги года совместно с YOUGAME и забери ценные призы! Перейти

Гайд Colorize SkyBox / Guide on ClassInformer

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
10 Апр 2025
Сообщения
61
Реакции
3

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

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

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

Что ж мое вступление уже затянулось - оно было сделано чтобы отбросить большинство претензий на корню. Можно считать что это мой подарок форуму на новый год. Начнем!



Процесс реверса



Для начала давайте определимся с DLL в которой будем дальше работать. Скажу сразу что за большую часть визуалов отвечает
scenesystem.dll, для дальнейшей работы нам понадобится дизассемблер IDA Pro, сама по себе она платная но я уверен что вы знаете где ее достать. А также нам нужно 2 плагина SigMaker и ClassInformer их можно найти в свободном доступе, достаточно добавить их в папку plagins и запустить. Впрочем это написано на GitHub'ах самих плагинов.
После того как все готово запускаем иду и на встречает окно выбора файла:

1766330467517.png

Далее идет стандартный процесс выбора .dll
путь до нужно нам видно на скрине.
У вас появятся окна при загрузке файла
везде прокликивайте "Yes" кроме окошка с файлом
pdb.
Далее у вас появится окно с ассемблерным кодом
Но мы ничего не делаем и ждем полной загрузки файла пока в левом нижнем углу не появится надпись "idle"

После этого нажимаем сочетание клавиш Shift + Alt + I у вас появится окно ClassInformer'а там ничего не трогаем и нажимаем "OK".
Далее у вас появится список названий классов (Это работает за счет того что компилятор MSVS оставляет некоторые символы в бинаре что и позволяет преобразовать имена классов в нормальные названия) нажимаем Ctrl + F и в поиске вводим слово "sky"
1766331296540.png


У вас появится на выбор 4 класса

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

Т.к. это можно сделать просто просмотреть содержимое и посмотреть количество
функций в классе.
Нажимаем на выбранный нами класс 2 раза и попадаем на его содержимое:
Тут отчетливо видно список функций
1766332058574.png

(Они начинаются на "sub" и
заканчиваются на свой адрес)
Сегодня нам понадобится только первая из них
Она уже подписана т.к. я в том же файле иды что реверсил ранее.
Важно понимать что все эти функции относятся к
SkyBox и размещены они здесь не случайно

Нажимаем на первую из них 2 раза чтобы попасть на ее содержимое и нажимаем F5 чтобы открыть псевдокод функции
Тут вам пригодятся знания C-подобных языков чтобы понять логику программы.
1766333175926.png

Пропустив передачу аргументов и объявление локальный переменных мы попадаем на тело функции. Скорее всего у вас появится вопрос
почему переменные уже с названия, ответ на поверхности, названия остались с моих прошлых
действий над кодом. Названия можно менять на кнопку "N" наведясь на нужную переменную или функцию. Нам стоит обратить внимание на skybox_data такое название я дал потому что в коде частое идет обращение к данной переменной и прибавлению к нему смещения (На скрине видно переменную v9 которая тоже является частью skybox_data.
1766333699607.png


Для полноты картины покажу вам аргументы
которые передаются в функцию

их названия можно также определить из тела функции
Возможно тут будут ошибки в нейминге но это не столь важно
Теперь нам надо вгетать skybox_data и составить класс с нужными нам смещениями (Их можно находить анализируя используемые
переменные и смещения от skybox_data. Если переменных не так много можно попробовать перебором)
А вот и наш цвет смотрим, на смещение - 0x128
1766334811744.png

Значит и смещение в нашем классе будет 0x128
от начала класса и структура Vector3 (это было понятно потому что был import и названия сохранились

1766335146391.png

Теперь нам необходимо создать паттерн нашей функции

Сделать это можно нажав Ctrl + Alt + S
Откроется меню SigMaker'а. Проставляйте настройки как на скрине и нажимайте "OK"
В консоли внизу появится паттерн нашей функции
Его надо перенести в код
И сделать hook

Создание хука



Для создания хука вам понадобится библиотека MinHook или любая удобная вам а также фунция PatternScan/FindPattern
чтобы найти адрес самой функции в памяти данные функции вы можете найти в интернете или написать самим
1766335766798.png


Ищем адрес функции из выше перечисленных переменных



1766335866302.png

Создаем сигнатуру функции как показано на скрине
для понимания можно соотнести с объявлением из иды
И понять принцип работы

1766336006280.png

Создаем хук через библиотеку выше сказанную (Подробности работы с MinHook можно в большом количестве найти все там же в интернете)
Самое важное сейчас сделать саму функцию хука
1766336190095.png

Можно сказать что тут мы переписывает игровую функцию
Я воспользовался формулой нахождения
SkyBoxData прямо как написано в ида
Привел его к классу о котором мы говорили выше



В данном варианте цвет определяется от 0.f до 1.f

(Но если мы поставим значения выше будет красивый эффект)
skybox_color это структура Vector3 т.е.
просто float x, y, z
после проделанной работы не забываем вызывать оригинальную функцию

Осталось только сделать класс но его можно избежать если для вас это не удобно и просто
прибавить офсет ручками как это написано в закомментированной строчке


Дальше дело за малым добавляем настройку в меню и кайфуем
результат:

1766336728902.png


+rep Cimoy за помощь
 
Последнее редактирование:

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

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

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

Что ж мое вступление уже затянулось - оно было сделано чтобы отбросить большинство претензий на корню. Можно считать что это мой подарок форуму на новый год. Начнем!



Процесс реверса



Для начала давайте определимся с DLL в которой будем дальше работать. Скажу сразу что за большую часть визуалов отвечает
scenesystem.dll, для дальнейшей работы нам понадобится дизассемблер IDA Pro, сама по себе она платная но я уверен что вы знаете где ее достать. А также нам нужно 2 плагина SigMaker и ClassInformer их можно найти в свободном доступе, достаточно добавить их в папку plagins и запустить. Впрочем это написано на GitHub'ах самих плагинов.
После того как все готово запускаем иду и на встречает окно выбора файла:

Посмотреть вложение 322610
Далее идет стандартный процесс выбора .dll
путь до нужно нам видно на скрине.
У вас появятся окна при загрузке файла
везде прокликивайте "Yes" кроме окошка с файлом
pdb.
Далее у вас появится окно с ассемблерным кодом
Но мы ничего не делаем и ждем полной загрузки файла пока в левом нижнем углу не появится надпись "idle"

После этого нажимаем сочетание клавиш Shift + Alt + I у вас появится окно ClassInformer'а там ничего не трогаем и нажимаем "OK".
Далее у вас появится список названий классов (Это работает за счет того что компилятор MSVS оставляет некоторые символы в бинаре что и позволяет преобразовать имена классов в нормальные названия) нажимаем Ctrl + F и в поиске вводим слово "sky"
Посмотреть вложение 322616

У вас появится на выбор 4 класса

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

Т.к. это можно сделать просто просмотреть содержимое и посмотреть количество
функций в классе.
Нажимаем на выбранный нами класс 2 раза и попадаем на его содержимое:
Тут отчетливо видно список функций Посмотреть вложение 322621
(Они начинаются на "sub" и
заканчиваются на свой адрес)
Сегодня нам понадобится только первая из них
Она уже подписана т.к. я в том же файле иды что реверсил ранее.
Важно понимать что все эти функции относятся к
SkyBox и размещены они здесь не случайно

Нажимаем на первую из них 2 раза чтобы попасть на ее содержимое и нажимаем F5 чтобы открыть псевдокод функции
Тут вам пригодятся знания C-подобных языков чтобы понять логику программы.
Посмотреть вложение 322632
Пропустив передачу аргументов и объявление локальный переменных мы попадаем на тело функции. Скорее всего у вас появится вопрос
почему переменные уже с названия, ответ на поверхности, названия остались с моих прошлых
действий над кодом. Названия можно менять на кнопку "N" наведясь на нужную переменную или функцию. Нам стоит обратить внимание на skybox_data такое название я дал потому что в коде частое идет обращение к данной переменной и прибавлению к нему смещения (На скрине видно переменную v9 которая тоже является частью skybox_data.
Посмотреть вложение 322635

Для полноты картины покажу вам аргументы
которые передаются в функцию

их названия можно также определить из тела функции
Возможно тут будут ошибки в нейминге но это не столь важно
Теперь нам надо вгетать skybox_data и составить класс с нужными нам смещениями (Их можно находить анализируя используемые
переменные и смещения от skybox_data. Если переменных не так много можно попробовать перебором)
А вот и наш цвет смотрим, на смещение - 0x128Посмотреть вложение 322639
Значит и смещение в нашем классе будет 0x128
от начала класса и структура Vector3 (это было понятно потому что был import и названия сохранились
Посмотреть вложение 322641

Теперь нам необходимо создать паттерн нашей функции

Сделать это можно нажав Ctrl + Alt + S
Откроется меню SigMaker'а. Проставляйте настройки как на скрине и нажимайте "OK"
В консоли внизу появится паттерн нашей функции
Его надо перенести в код
И сделать hook

Создание хука



Для создания хука вам понадобится библиотека MinHook или любая удобная вам а также фунция PatternScan/FindPattern
чтобы найти адрес самой функции в памяти данные функции вы можете найти в интернете или написать самим
Посмотреть вложение 322646

Ищем адрес функции из выше перечисленных переменных



Посмотреть вложение 322648
Создаем сигнатуру функции как показано на скрине
для понимания можно соотнести с объявлением из иды
И понять принцип работы

Посмотреть вложение 322649
Создаем хук через библиотеку выше сказанную (Подробности работы с MinHook можно в большом количестве найти все там же в интернете)
Самое важное сейчас сделать саму функцию хука
Посмотреть вложение 322651

Можно сказать что тут мы переписывает игровую функцию
Я воспользовался формулой нахождения
SkyBoxData прямо как написано в ида
Привел его к классу о котором мы говорили выше



В данном варианте цвет определяется от 0.f до 1.f

(Но если мы поставим значения выше будет красивый эффект)
skybox_color это структура Vector3 т.е.
просто float x, y, z
после проделанной работы не забываем вызывать оригинальную функцию

Осталось только сделать класс но его можно избежать если для вас это не удобно и просто
прибавить офсет ручками как это написано в закомментированной строчке


Дальше дело за малым добавляем настройку в меню и кайфуем
результат:

Посмотреть вложение 322652


+rep Cimoy за помощь
- fnUpdateSkyBox + get by classname "C_EnvSky" and use schema???
 
Назад
Сверху Снизу