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

Гайд DayZ Xbox / Microsoft Store — Дампинг и реверсинг (структуры)

Sloppy
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
13 Фев 2026
Сообщения
703
Реакции
21
DayZ завезли в Xbox Game Pass, и теперь мы можем гонять с консольщиками через кроссплей. Проблема в том, что Microsoft жестко закрутили гайки: если попытаться просто достать DayZ_x64.exe из папки Xbox, вы упретесь в package ACL. Файл нельзя скопировать, нельзя открыть в IDA — система его просто блокирует.

Даже если вытащите файл с диска, он будет зашифрован, так что IDA выдаст мусор. Единственный рабочий вариант — старый добрый рантайм-дамп, пока игра запущена.

Шаг 0 — Обходим ACL (Опционально)
Игры из Game Pass защищены NTFS ACL, привязанными к системе WindowsApps. Самый простой способ обойти эту бюрократию — зайти через Safe Mode, там эти правила не работают:
  1. Win+R —> msconfig —> вкладка Boot —> ставим Safe boot, ребутаемся.
  2. Идем в папку установки (обычно C:\XboxGames\DayZ\Content\ или C:\Program Files\WindowsApps\).
  3. Копируем DayZ_x64.exe в любое удобное место.
  4. Возвращаемся в нормальный режим.
Но помните: файл на диске зашифрован. Это просто заготовка. Наша цель — чистый дамп из памяти.

Шаг 1 — Рантайм-дамп
Xbox расшифровывает страницы бинарника прямо в памяти во время работы. Нам нужен кернел-драйвер, чтобы прочитать процесс DayZ_x64.exe постранично.
  1. Аттачим драйвер к процессу.
  2. Читаем образ по 4KB, начиная с модуль-бейза.
  3. Если страница не читается — скипаем и пробуем позже.
  4. Важный нюанс: нужно побегать по карте. Это заставляет движок расшифровывать нужные секции и подгружать их в память.
  5. Когда покрытие устроит — жмем END и сохраняем.
  6. Не забудьте поправить PE-хидеры, иначе IDA не поймет структуру файла.
Обычно за первый проход получается 25-30% — для реверсинга .text секции этого более чем достаточно.

Шаг 2 — Работа в IDA
Открываем дамп как PE-файл. База будет кривая из-за ASLR (что-то вроде 0x7FF646B10000). Чтобы адреса были человеческими, делаем ребейс:
Edit —> Segments —> Rebase program —> 0x140000000

Теперь всё приведено к стандартному виду 0x14XXXXXXX. Чтобы получить RVA для своего чита, просто вычитаем базу:
Код:
Expand Collapse Copy
RVA = IDA_address - 0x140000000

Актуальные оффсеты (Xbox, ребейс 0x140000000)
Код:
Expand Collapse Copy
world            = 0x42710C8
network_manager  = 0x101CE50
landscape        = 0x42742F0
day_progress     = 0x427D570

Разница Player Names: Xbox vs Steam
Структура scoreboard_entity на Xbox отличается. На Стиме имя лежит по +0xF8, но на Xbox там заглушка "NoVoice". Реальный Gamertag и XUID лежат в других местах.
Код:
Expand Collapse Copy
+0x30  uint32_t      network_id    (общий)
+0x80  arma_string*  XUID          (уникальный ID Xbox, 16 цифр)
+0xD8  arma_string*  gamertag      (имя игрока Xbox)
+0xF8  arma_string*  player_name   (только Steam, на Xbox тут NoVoice)
+0xA0  arma_string*  steam_id      (только Steam, на Xbox тут null)

Логика arma_string:
Код:
Expand Collapse Copy
+0x08  uint16_t  length
+0x10  char[]    string data (ASCII)

Чтение ников на Xbox выглядит примерно так:
Код:
Expand Collapse Copy
// game_base + 0x101CE50  ->  networkmanager
//   + 0x50               ->  networkclient
//   + 0x18               ->  scoreboard*
//   + 0x24               ->  entry count

for (int i = 0; i < scoreboard_size; i++) {
    uintptr_t entry = read<uintptr_t>(scoreboard + i * 0x8);
    uint32_t network_id = read<uint32_t>(entry + 0x30);
    arma_string* gamertag = read<arma_string*>(entry + 0xD8);
    arma_string* xuid = read<arma_string*>(entry + 0x80);
}

Сам дамп не выкладываю, гайд написан для тех, кто хочет разобраться сам.

Интересно, как быстро античит начнет триггериться на чтение XUID через скорборд в этой версии.
 
Назад
Сверху Снизу