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

Вопрос Rust — Поиск оффсетов в рантайме и обфускация il2cpp

Sloppy
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
13 Фев 2026
Сообщения
505
Реакции
13
Надоело каждый раз после апдейта Раста лезть в дампер и руками выцеплять оффсеты для своего интернала. Хотелось бы сделать нормальный runtime auto-update, чтобы ESP не отваливался после каждого микро-патча от Facepunch.

Пытался через il2cpp::field(klass, "clientEntities", false) вытянуть FieldInfo*, но столкнулся с классикой — поиск через class_get_fields выдает лютую обфускацию вместо вменяемых имен. В итоге имеем кучу мусора, из которого невозможно выцепить нужный указатель по строке.

Суть проблемы в том, что в Unity/IL2CPP метаданные часто забиты обфусцированными именами полей. Искать по жесткой строке вроде 'clientEntities' в рантайме — затея дохлая, так как разрабы переименовывают всё, что движется.

Какие сейчас есть адекватные варианты обхода этой дичи для Internal софта? Пока вижу несколько путей:
  1. Сигнатуры (Pattern Scanning). Искать куски кода в функциях, которые работают с нужными полями, и вытягивать смещения прямо из опкодов.
  2. Парсинг методов. Найти метод по имени (они часто менее обфусцированы) через method_get_from_name, а потом натравить на него мини-дизассемблер, чтобы найти смещение поля.
  3. Использование уникальных типов полей. Если поле имеет редкий тип, можно попробовать перебор всех полей класса и фильтрацию по типу, но это костыль.

Кто как реализует авто-апдейтер в своих проектах под Rust? Делать через поиск по именам в il2cpp — это путь в никуда, если мы говорим про нормальный софт, который должен жить дольше одного патча.

Делитесь своими идеями или рабочими подходами по поиску структур в памяти Unity-игр.
 
Назад
Сверху Снизу