JavaScript отключён. Чтобы полноценно использовать наш сайт, включите JavaScript в своём браузере.

Гайд Находим оффсеты после добавления хэширования

Начинающий
Статус
Оффлайн
Регистрация
27 Сен 2017
Сообщения
23
Реакции[?]
2
Поинты[?]
0
Эта тема будет частично пересказана с забугорного форума.

Всем привет! Сегодня я расскажу о том, как реверсить оффсеты в игре, используя 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.%
Вы должны увидеть один результат:
1736545196680.png

2. Скопируйте значение после знака % (например, c2ca1660ae2fc11f23473a76db178fbc9bdb02fa) и откройте файл script.json. Найдите значение, которое заканчивается на _TypeInfo. Вот что должно у вас получиться:
1736545408160.png

3. В поле Address вы получите корректный оффсет для BaseNetworkable, который равен 0xDEA9418 (или 233477144 в десятичной системе).

Следуя этой логике, вы можете находить оффсеты для всех статических классов. Например, для MainCamera в script.json:
1736545742634.png

Чтобы найти оффсеты внутри классов, используйте dnSpy для анализа сгенерированным дампером в папке DummyDll (Assembly-CSharp.dll).

Пример нахождения оффсетов для класса BasePlayer:

1. Откройте поиск в dnSpy:
Правка -> Поиск в сборках -> В открывшемся поле "Искать" выберите "Всё возможное". Введите BasePlayer и перейдите к любому конструктору класса.

2. Прокрутите вниз до полей (или просто используйте Ctrl + F, чтобы ввести конкретный оффсет, например, 0x230). Вы увидите все доступные поля для BasePlayer и их оффсеты.

3. Чтобы понять, что скрывается за хэшем названия поля, вы можете сравнить их со старыми оффсетами (до обновления в августе) или определить их по классу, который не хэшируется в большинстве случаев (если он не вложенный).

На глаз я сразу нашел PlayerModel:
1736546586792.png

DisplayName:
1736546619216.png

PlayerEyes (шифруются аналогичным методом, что и инвентарь):
1736546664469.png

BaseMovement:
1736546791667.png

PlayerInput:
1736546842944.png

PlayerInventory:
1736546911857.png

Таким образом, вы можете получать оффсеты других полей и классов. Чтобы расшифровать методы для указателей инвентаря или глаз, нужно немного покопаться в IDE. При желании вы сможете разобраться, это не так сложно и не требует глубоких навыков реверс-инженерии. Все необходимые гайды можно найти в интернете.

Надеюсь, этот туториал будет полезен тем, кто не умеет гуглить! Удачи в ваших начинаниях!
 
Последнее редактирование:
Сверху Снизу