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

Гайд Unity C# — Поиск стабильных оффсетов для управляемых типов

Sloppy
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
13 Фев 2026
Сообщения
537
Реакции
14
Unity и управляемый код C# — это не классический C++, где структуры лежат в памяти предсказуемо. Тут мы имеем дело с управляемой кучей, сборщиком мусора (GC) и JIT-компиляцией, из-за чего обычный поиск указателя на объект типа Dictionary или HashSet превращается в квест.

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

Что нужно учитывать при реверсе таких структур:
  1. Статические поля. В dnSpy ищи классы с static полями. Именно через них можно выйти на нужные инстансы. Тебе нужен не адрес объекта в памяти, а смещение до статической базы класса из Domain.
  2. Mono vs IL2CPP. Если игра на Mono, структура объектов прозрачнее, но выше риск, что GC их перетасует. Если IL2CPP — используй дамперы, чтобы увидеть физические смещения полей в структурах.
  3. Внутренняя кухня коллекций. Dictionary и HashSet — это не просто массивы данных. У них есть заголовки, buckets и entries. Тебе придется реверсить саму структуру класса из System.Collections.Generic, чтобы понять, по какому оффсету лежат реальные данные.
  4. Базовый адрес. Всегда ищи путь от базового модуля (например, GameAssembly.dll или mono-2.0-bdwgc.dll) через смещения до статических полей нужных тебе менеджеров.

Если ты нашел указатель через поиск в Cheat Engine, нажми по нему правой кнопкой и выбери «Find out what accesses this address». Если повезет, увидишь код, который обращается к полю через фиксированное смещение от регистра — это и будет твой путь к успеху.

Код:
Expand Collapse Copy
// Пример логики пути:
// Pointer -> BaseAddress + StaticFieldOffset -> Instance -> FieldOffset -> Data

Кто как обычно вытаскивает данные из сложных C# коллекций в Unity без прямого вызова методов движка — через сигнатуры или цепочки оффсетов от синглтонов?
 
Назад
Сверху Снизу