- Статус
- Оффлайн
- Регистрация
- 13 Фев 2026
- Сообщения
- 394
- Реакции
- 7
Здорово, реверсеры. Решил плотно поковырять Rust на C#, но наткнулся на классические грабли с итерацией объектов. Потихоньку переползаю на C++, но пока проект живет на шарпе, пытаюсь выжать максимум из того, что есть.
Суть проблемы: успешно зацепился за список объектов через BaseNetworkable, но кроме ClassName и prefabID вытащить ничего не получается. При обновлении адресов после патча потратил кучу времени на FOV и фикс самого списка, но данные игрока (имя, SteamID) упорно не хотят читаться, хотя флаги типа IsWounded или IsAlive залетают на ура.
Текущая логика итерации:
На данный момент из интересного тянутся только базовые сущности:
Главный затык — это BasePlayer. Почти все логические функции отрабатывают (вижу, кто спит, кто ранен, позиции), но попытка прочитать _displayName или userID заканчивается ничем. Есть подозрение на шифрование строк или я просто юзаю битые оффсеты для этих полей.
Кто сталкивался с подобным в Unity/IL2CPP играх? Возможно, я упускаю какой-то уровень вложенности при чтении строк или в Rust ввели дополнительные проверки на доступ к данным игрока.
Кто уже фиксил получение имен в последних патчах, отпишите в тред.
Суть проблемы: успешно зацепился за список объектов через BaseNetworkable, но кроме ClassName и prefabID вытащить ничего не получается. При обновлении адресов после патча потратил кучу времени на FOV и фикс самого списка, но данные игрока (имя, SteamID) упорно не хотят читаться, хотя флаги типа IsWounded или IsAlive залетают на ура.
Текущая логика итерации:
Код:
public void Demo(ulong baseNetworkableStr, int Index)
{
ulong data = ReadPtr(baseNetworkableStr + 0x10);
ulong entityBaseStr = ReadPtr(data + 0x20 + ((ulong)Index * 8));
ulong prefabID = ReadPtr(entityBaseStr + 0x30);
ulong pKlass = ReadPtr(entityBaseStr);
ulong classNameStr = ReadPtr(pKlass + 0x10);
string className = ReadCString(classNameStr);
}
На данный момент из интересного тянутся только базовые сущности:
- BasePlayer (Prefab: 4108440852)
- LootContainer (Prefab: 966676416)
- MapMarkerCH47 (Prefab: 5138185490)
- VendingMachineMapMarker
Главный затык — это BasePlayer. Почти все логические функции отрабатывают (вижу, кто спит, кто ранен, позиции), но попытка прочитать _displayName или userID заканчивается ничем. Есть подозрение на шифрование строк или я просто юзаю битые оффсеты для этих полей.
Код:
public static class BasePlayer
{
public const ulong playerModel = 0x508;
public const ulong playerEyes = 0x630;
public const ulong playerInventory = 0x390;
public const ulong clActiveItem = 0x4e8;
public const ulong baseMovement = 0x2b8;
public const ulong playerFlags = 0x630;
public const ulong playerInput = 0x350;
public const ulong _displayName = 0x358;
public const ulong clothingMoveSpeedReduction = 0x718;
public const ulong lifestate = 0x270;
public const ulong currentTeam = 0x4b8;
public const ulong userID = 0x678;
public const ulong UserIDString = 0x5d0;
}
Кто сталкивался с подобным в Unity/IL2CPP играх? Возможно, я упускаю какой-то уровень вложенности при чтении строк или в Rust ввели дополнительные проверки на доступ к данным игрока.
Кто уже фиксил получение имен в последних патчах, отпишите в тред.