-
Автор темы
- #1
Эта тема будет частично пересказана с забугорного форума.
Всем привет! Сегодня я расскажу о том, как реверсить оффсеты в игре, используя Il2CppDumper. Если вы не знакомы с реверс-инженерией, не переживайте — я постараюсь объяснить все понятия доступным языком.
Для начала, нам нужно скачать последний коммит
Поместите эти файлы в одну папку с дампером и запустите его. Укажите файл Il2Cpp игры (GameAssembly.dll) и файл метаданных (global-metadata.dat). После этого подождите некоторое время, пока дампер создаст все нужные файлы.
Теперь давайте получим оффсет для класса BaseNetworkable:
1. Откройте файл dump.cs в любом текстовом редакторе и найдите строку:
Вы должны увидеть один результат:
2. Скопируйте значение после знака
3. В поле Address вы получите корректный оффсет для BaseNetworkable, который равен
Следуя этой логике, вы можете находить оффсеты для всех статических классов. Например, для MainCamera в script.json:
Чтобы найти оффсеты внутри классов, используйте dnSpy для анализа сгенерированным дампером в папке DummyDll (Assembly-CSharp.dll).
Пример нахождения оффсетов для класса BasePlayer:
1. Откройте поиск в dnSpy:
Правка -> Поиск в сборках -> В открывшемся поле "Искать" выберите "Всё возможное". Введите
2. Прокрутите вниз до полей (или просто используйте
3. Чтобы понять, что скрывается за хэшем названия поля, вы можете сравнить их со старыми оффсетами (до обновления в августе) или определить их по классу, который не хэшируется в большинстве случаев (если он не вложенный).
На глаз я сразу нашел PlayerModel:
DisplayName:
PlayerEyes (шифруются аналогичным методом, что и инвентарь):
BaseMovement:
PlayerInput:
PlayerInventory:
Таким образом, вы можете получать оффсеты других полей и классов. Чтобы расшифровать методы для указателей инвентаря или глаз, нужно немного покопаться в IDE. При желании вы сможете разобраться, это не так сложно и не требует глубоких навыков реверс-инженерии. Все необходимые гайды можно найти в интернете.
Надеюсь, этот туториал будет полезен тем, кто не умеет гуглить! Удачи в ваших начинаниях!
Всем привет! Сегодня я расскажу о том, как реверсить оффсеты в игре, используя Il2CppDumper. Если вы не знакомы с реверс-инженерией, не переживайте — я постараюсь объяснить все понятия доступным языком.
Для начала, нам нужно скачать последний коммит
Пожалуйста, авторизуйтесь для просмотра ссылки.
и скомпилировать её вручную. После этого, извлекаем необходимые файлы из игры, которые находятся по следующим путям:- Rust\RustClient_Data\il2cpp_data\Metadata\global-metadata.dat
- Rust\GameAssembly.dll
Поместите эти файлы в одну папку с дампером и запустите его. Укажите файл Il2Cpp игры (GameAssembly.dll) и файл метаданных (global-metadata.dat). После этого подождите некоторое время, пока дампер создаст все нужные файлы.
Теперь давайте получим оффсет для класса BaseNetworkable:
1. Откройте файл dump.cs в любом текстовом редакторе и найдите строку:
C#:
public static class BaseNetworkable.%
2. Скопируйте значение после знака
%
(например, c2ca1660ae2fc11f23473a76db178fbc9bdb02fa
) и откройте файл script.json. Найдите значение, которое заканчивается на _TypeInfo
. Вот что должно у вас получиться:3. В поле Address вы получите корректный оффсет для BaseNetworkable, который равен
0xDEA9418
(или 233477144
в десятичной системе).Следуя этой логике, вы можете находить оффсеты для всех статических классов. Например, для MainCamera в script.json:
Чтобы найти оффсеты внутри классов, используйте dnSpy для анализа сгенерированным дампером в папке DummyDll (Assembly-CSharp.dll).
Пример нахождения оффсетов для класса BasePlayer:
1. Откройте поиск в dnSpy:
Правка -> Поиск в сборках -> В открывшемся поле "Искать" выберите "Всё возможное". Введите
BasePlayer
и перейдите к любому конструктору класса.2. Прокрутите вниз до полей (или просто используйте
Ctrl + F
, чтобы ввести конкретный оффсет, например, 0x230
). Вы увидите все доступные поля для BasePlayer и их оффсеты.3. Чтобы понять, что скрывается за хэшем названия поля, вы можете сравнить их со старыми оффсетами (до обновления в августе) или определить их по классу, который не хэшируется в большинстве случаев (если он не вложенный).
На глаз я сразу нашел PlayerModel:
DisplayName:
PlayerEyes (шифруются аналогичным методом, что и инвентарь):
BaseMovement:
PlayerInput:
PlayerInventory:
Таким образом, вы можете получать оффсеты других полей и классов. Чтобы расшифровать методы для указателей инвентаря или глаз, нужно немного покопаться в IDE. При желании вы сможете разобраться, это не так сложно и не требует глубоких навыков реверс-инженерии. Все необходимые гайды можно найти в интернете.
Надеюсь, этот туториал будет полезен тем, кто не умеет гуглить! Удачи в ваших начинаниях!
Последнее редактирование: