Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно. Вам необходимо обновить браузер или попробовать использовать другой.
Приветствую дорогие пастерочки и не только, сегодня я бы хотел показать процесс реверса и непосредственно хука Skybox.
Возможно, уже опытные в данной теме люди скажут: "Ну это же база" попрошу заметить, сколько в ветке "вопросы и помощь новичкам" появляется постов по типу "как искать паттерны".
В данной теме я хочу закрыть данную тему раз и навсегда. Также я думаю, что появятся индивиды, которые предложат чекнуть чужой сурс и стащить паттерн, с такими людьми лучше не иметь дружеских отношений. Ведь когда они пастять с любой базы они либо стремятся выдать чужой труд за свой, либо почувствовать себя умнее, я не могу полноценно представить что у них в голове в этот момент поэтому не буду продолжать.
Данный гайд направлен на то, чтобы те, кто действительно хочет чему-то научится могли подчерпнуть для себя важные знания не шерстя весь интернет и не спрашивая всех подряд. Конечно, я не говорю что не нужно самостоятельно искать информацию, это очень важное умение для хорошего кодера. Но как я уже писал выше многие новички не стараясь найти нужную им информацию лезут засорять соседнюю ветку.
Что ж мое вступление уже затянулось - оно было сделано чтобы отбросить большинство претензий на корню. Можно считать что это мой подарок форуму на новый год. Начнем!
Процесс реверса
Для начала давайте определимся с DLL в которой будем дальше работать. Скажу сразу что за большую часть визуалов отвечает scenesystem.dll, для дальнейшей работы нам понадобится дизассемблер IDA Pro, сама по себе она платная но я уверен что вы знаете где ее достать. А также нам нужно 2 плагина SigMaker и ClassInformer их можно найти в свободном доступе, достаточно добавить их в папку plagins и запустить. Впрочем это написано на GitHub'ах самих плагинов. После того как все готово запускаем иду и на встречает окно выбора файла:
Далее идет стандартный процесс выбора .dll путь до нужно нам видно на скрине. У вас появятся окна при загрузке файла везде прокликивайте "Yes" кроме окошка с файлом pdb. Далее у вас появится окно с ассемблерным кодом Но мы ничего не делаем и ждем полной загрузки файла пока в левом нижнем углу не появится надпись "idle"
После этого нажимаем сочетание клавиш Shift + Alt + I у вас появится окно ClassInformer'а там ничего не трогаем и нажимаем "OK". Далее у вас появится список названий классов (Это работает за счет того что компилятор MSVS оставляет некоторые символы в бинаре что и позволяет преобразовать имена классов в нормальные названия) нажимаем Ctrl + F и в поиске вводим слово "sky"
У вас появится на выбор 4 класса
Из них нам нужно выбрать последний, данный выбор я комментировать не буду
Т.к. это можно сделать просто просмотреть содержимое и посмотреть количество функций в классе. Нажимаем на выбранный нами класс 2 раза и попадаем на его содержимое: Тут отчетливо видно список функций
(Они начинаются на "sub" и заканчиваются на свой адрес) Сегодня нам понадобится только первая из них Она уже подписана т.к. я в том же файле иды что реверсил ранее. Важно понимать что все эти функции относятся к SkyBox и размещены они здесь не случайно
Нажимаем на первую из них 2 раза чтобы попасть на ее содержимое и нажимаем F5 чтобы открыть псевдокод функции Тут вам пригодятся знания C-подобных языков чтобы понять логику программы.
Пропустив передачу аргументов и объявление локальный переменных мы попадаем на тело функции. Скорее всего у вас появится вопрос почему переменные уже с названия, ответ на поверхности, названия остались с моих прошлых действий над кодом. Названия можно менять на кнопку "N" наведясь на нужную переменную или функцию. Нам стоит обратить внимание на skybox_data такое название я дал потому что в коде частое идет обращение к данной переменной и прибавлению к нему смещения (На скрине видно переменную v9 которая тоже является частью skybox_data.
Для полноты картины покажу вам аргументы которые передаются в функцию
их названия можно также определить из тела функции Возможно тут будут ошибки в нейминге но это не столь важно Теперь нам надо вгетать skybox_data и составить класс с нужными нам смещениями (Их можно находить анализируя используемые переменные и смещения от skybox_data. Если переменных не так много можно попробовать перебором) А вот и наш цвет смотрим, на смещение - 0x128
Значит и смещение в нашем классе будет 0x128
от начала класса и структура Vector3 (это было понятно потому что был import и названия сохранились
Теперь нам необходимо создать паттерн нашей функции Сделать это можно нажав Ctrl + Alt + S Откроется меню SigMaker'а. Проставляйте настройки как на скрине и нажимайте "OK" В консоли внизу появится паттерн нашей функции Его надо перенести в код И сделать hook
Создание хука
Для создания хука вам понадобится библиотека MinHook или любая удобная вам а также фунция PatternScan/FindPattern
чтобы найти адрес самой функции в памяти данные функции вы можете найти в интернете или написать самим
Ищем адрес функции из выше перечисленных переменных
Создаем сигнатуру функции как показано на скрине
для понимания можно соотнести с объявлением из иды
И понять принцип работы
Создаем хук через библиотеку выше сказанную (Подробности работы с MinHook можно в большом количестве найти все там же в интернете)
Самое важное сейчас сделать саму функцию хука
Можно сказать что тут мы переписывает игровую функцию
Я воспользовался формулой нахождения
SkyBoxData прямо как написано в ида
Привел его к классу о котором мы говорили выше
В данном варианте цвет определяется от 0.f до 1.f
(Но если мы поставим значения выше будет красивый эффект)
skybox_color это структура Vector3 т.е.
просто float x, y, z
после проделанной работы не забываем вызывать оригинальную функцию
Осталось только сделать класс но его можно избежать если для вас это не удобно и просто
прибавить офсет ручками как это написано в закомментированной строчке
Дальше дело за малым добавляем настройку в меню и кайфуем
результат:
Приветствую дорогие пастерочки и не только, сегодня я бы хотел показать процесс реверса и непосредственно хука 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
после проделанной работы не забываем вызывать оригинальную функцию
Осталось только сделать класс но его можно избежать если для вас это не удобно и просто
прибавить офсет ручками как это написано в закомментированной строчке
Дальше дело за малым добавляем настройку в меню и кайфуем
результат: