Начинающий
- Статус
- Оффлайн
- Регистрация
- 19 Окт 2025
- Сообщения
- 101
- Реакции
- 4
Парни, кто шарит за Rust internals, нужен совет.
Хочу сделать так, чтобы хотя бы player ESP переживал обновы без ручного дампа после каждого патча, т.е. нужен какой‑то адекватный рантайм автоапдейт оффсетов, а не постоянное ковыряние дампа руками.
Что уже пробовал:
Пошёл по очевидному пути — раз мы internal и сидим в том же процессе, то пусть само il2cpp всё отдаёт. Пытаюсь через свои врапперы дернуть что‑то вроде:
- `il2cpp::field(klass, "clientEntities", false)` → получить `FieldInfo*` по имени;
- под капотом это упирается в `class_get_fields`/перебор полей класса.
И на этом месте всё ломается:
любые попытки поиска по имени упираются в то, что **имена полей обфусцированы**, и вместо нормального `clientEntities` прилетают кракозябры. Соответственно, рантайм‑резолв по строкам имени умирает.
То есть по факту сейчас имею:
- internal, доступ к il2cpp есть;
- но:
- поиск `field()` по имени — мимо;
- новые билды с обфусцированными полями;
- нет желания после каждого патча вручную гонять Il2CppDumper и править оффсеты в хедере.
Собственно, вопросы:
1. Как вы, будучи internal, в 2026 году находите оффсеты/поля в Rust в рантайме, если:
- строковые имена полей уже обфусцированы;
- `class_get_fields` выдаёт только зашифрованный мусор?
Используете ли вы что‑то вроде:
- резолв по токенам/metadata‑индексам;
- поиск через сигнатуры по самим `FieldInfo`/`MethodInfo`;
- или заранее жёстко кодируете смещения и только базу обновляете?
2. Есть ли рабочие подходы именно для `clientEntities`:
- через статик‑поля класса (offset 0 для static field table, как советуют в ревёрс‑тредах по Rust);
- или через обход `BaseNetworkable`/списков сущностей, вообще не трогая имя `clientEntities`?
Может, кто‑то привязывается к типу/размеру/шаблону поля, а не к его имени.
3. Делаете ли вы какой‑то гибрид:
- один раз после патча всё равно гоняете Il2CppDumper/Inspector;
- но внутрь чита льёте не сами оффсеты, а, например, токены/индексы, а уже internal часть в рантайме по ним резолвит нужные поля через своё il2cpp‑API?
Я понимаю, что “магического” полного автоапдейта без любого внешнего шага может и не быть, но интересно именно, как вы минимизируете ручной труд, когда игра уже живёт на обфусцированных именах и обычный `il2cpp::field(klass, "clientEntities")` больше не спасает.
Если можете поделиться общим подходом (без раздачи полного сорса), как:
- находите `clientEntities`/другие ключевые поля;
- обходите обфускацию имён;
- и что именно автоматизируете при апдейтах —
буду благодарен за любые мысли.
Хочу сделать так, чтобы хотя бы player ESP переживал обновы без ручного дампа после каждого патча, т.е. нужен какой‑то адекватный рантайм автоапдейт оффсетов, а не постоянное ковыряние дампа руками.
Что уже пробовал:
Пошёл по очевидному пути — раз мы internal и сидим в том же процессе, то пусть само il2cpp всё отдаёт. Пытаюсь через свои врапперы дернуть что‑то вроде:
- `il2cpp::field(klass, "clientEntities", false)` → получить `FieldInfo*` по имени;
- под капотом это упирается в `class_get_fields`/перебор полей класса.
И на этом месте всё ломается:
любые попытки поиска по имени упираются в то, что **имена полей обфусцированы**, и вместо нормального `clientEntities` прилетают кракозябры. Соответственно, рантайм‑резолв по строкам имени умирает.
То есть по факту сейчас имею:
- internal, доступ к il2cpp есть;
- но:
- поиск `field()` по имени — мимо;
- новые билды с обфусцированными полями;
- нет желания после каждого патча вручную гонять Il2CppDumper и править оффсеты в хедере.
Собственно, вопросы:
1. Как вы, будучи internal, в 2026 году находите оффсеты/поля в Rust в рантайме, если:
- строковые имена полей уже обфусцированы;
- `class_get_fields` выдаёт только зашифрованный мусор?
Используете ли вы что‑то вроде:
- резолв по токенам/metadata‑индексам;
- поиск через сигнатуры по самим `FieldInfo`/`MethodInfo`;
- или заранее жёстко кодируете смещения и только базу обновляете?
2. Есть ли рабочие подходы именно для `clientEntities`:
- через статик‑поля класса (offset 0 для static field table, как советуют в ревёрс‑тредах по Rust);
- или через обход `BaseNetworkable`/списков сущностей, вообще не трогая имя `clientEntities`?
Может, кто‑то привязывается к типу/размеру/шаблону поля, а не к его имени.
3. Делаете ли вы какой‑то гибрид:
- один раз после патча всё равно гоняете Il2CppDumper/Inspector;
- но внутрь чита льёте не сами оффсеты, а, например, токены/индексы, а уже internal часть в рантайме по ним резолвит нужные поля через своё il2cpp‑API?
Я понимаю, что “магического” полного автоапдейта без любого внешнего шага может и не быть, но интересно именно, как вы минимизируете ручной труд, когда игра уже живёт на обфусцированных именах и обычный `il2cpp::field(klass, "clientEntities")` больше не спасает.
Если можете поделиться общим подходом (без раздачи полного сорса), как:
- находите `clientEntities`/другие ключевые поля;
- обходите обфускацию имён;
- и что именно автоматизируете при апдейтах —
буду благодарен за любые мысли.
