Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Гайд Colorize SkyBox / Guide on ClassInformer

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
10 Апр 2025
Сообщения
76
Реакции
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???
 
Это было хорошо, теперь не знаю что делать человеку который не поймет как по этому гайду сделать то, что ему нужно. Расписал всё максимально подробно и понятно, я бы конечно подредактировал текст чтобы его было проще воспринимать, но и так очень хорошо (Относительно других тем)
 
Это было хорошо, теперь не знаю что делать человеку который не поймет как по этому гайду сделать то, что ему нужно. Расписал всё максимально подробно и понятно, я бы конечно подредактировал текст чтобы его было проще воспринимать, но и так очень хорошо (Относительно других тем)
Спасибо
 
Назад
Сверху Снизу