Начинающий
- Статус
- Оффлайн
- Регистрация
- 19 Окт 2025
- Сообщения
- 102
- Реакции
- 4
Народ, назрела важная инфа для тех кто любит почитерить в расте.
Копался в HTTP-трафике клиента и наткнулся на занятную (и неприятную) штуку, которая касается вообще всех, кто бегает с модифицированным клиентом/экстерналами. Речь не про EAC, а про то, как сам игровой клиент Rust стучит на тебя на сервера Facepunch.
По факту нашлось два эндпоинта, которые должны заставить задуматься любого, кто трогает convar’ы, FOV, погоду и прочую графику.
Эндпоинт 1: F7-репорт
Когда ты жмёшь F7 и отправляешь репорт на игрока, вместе с текстом и категорией улетает **твой полный client state**. В том, что уходит в тело запроса, есть, помимо прочего:
- полный дамп конфига:
- все графические настройки;
- аудио;
- инпуты;
- конфиг прицела и т.д.;
- таблица всех биндов:
- каждая клавиша;
- все бинды на консольные команды;
- AppInfo:
- железо (GPU, CPU, RAM, ОС, архитектура);
- твой Steam UserID;
- текущий сервер;
- твоя позиция в мире и направление взгляда в момент репорта;
- build-инфа:
- Jenkins build tag;
- changeset ID;
- ветка;
- дата сборки.
Вся эта пачка улетает напрямую на Facepunch, а не в EAC.
Эндпоинт 2: аналитика клиента
Это отправляется периодически, пока ты коннектнут к серверу. И тут уже совсем весело:
- `modified_convars` — полный список всех convar’ов, отличающихся от дефолта;
- `device_hash` и `steam_id_hash` — захешированные железо + аккаунт для линковки альтов;
- `command_line` — полный список аргументов запуска;
- EOS‑статус безопасности:
- `eos_tpm`, `eos_secureboot`, `eos_hvci`, `eos_iommu` — включены/выключены TPM, Secure Boot, HVCI, IOMMU;
- поле `encryption` в графических настройках — версия шифрования, которую использует клиент;
- различные session ID, по которым это всё можно связать с серверными логами твоих действий.
Почему это важно для читов
Ключевое поле — `modified_convars`. Клиент честно сообщает Facepunch, какие convar’ы у тебя не дефолтные и какие у них значения. Отсюда сразу вылезает несколько типичных палевных сценариев.
FOV‑чит (external, запись в `ConVar_Graphics_Static._fov`)
Ты можешь сколько угодно писать FOV в “зашифрованное поле” извне, игра всё равно читает оттуда значение — и именно его шлёт в телеметрию. UI‑слайдер в Rust ограничен примерно 90.
Если в payload прилетает:
"graphics.fov": "120",
"field_of_view": "120"
— это физически недостижимо через обычные настройки. FOV > 90 сразу создаёт идеальную метку “юзер трогает FOV не через UI”.
Zoom‑чит (временное зум‑состояние через FOV)
Если телеметрия/репорт выстреливают в тот момент, когда ты зажатым хоткеем уводишь FOV сильно вниз, можно поймать, например:
"graphics.fov": "30"
Слайдер ниже ~60 в легитных условиях опустить нельзя. Значит, клиент сам только что сознался, что у него активен зум‑чит в момент отправки.
Всегда день / выкрутка яркости (через `TOD_Sky` и связанные convar’ы)
Когда сервер считает, что сейчас ночь (2:00), а твоя клиентская телеметрия говорит о дневных значениях освещения, получается несостыковка “серверная ночь — клиентский день”. Это уже повод сверять, что у тебя там творится с погодой и освещением.
Вырубание слоёв (terrain/trees/buildings) через culling mask камеры
Если ты режешь слои рендера (камера не рисует часть геометрии), сами маски могут и не светиться в convar’ах, но аномально низкие draw calls по определённым категориям могут всплывать в перф‑метриках (поля типа `draw_count` в аналитике).
Манипуляция погодой (популярно в интерналах)
Если внутренний чит тупо пишет в convar’ы:
"weather.clear_chance": "1",
"weather.fog_chance": "0",
"weather.rain_chance": "0",
"weather.storm_chance": "0"
— это уже совсем не похоже на нормальный конфиг. Легитный игрок может иметь `weather.clear_chance` около `0.8–0.9`, но все единицы и нули по ряду погодных параметров одновременно создают очень жирный маркер.
Трава / вода на нуле (по отдельности легит, в контексте — нет)
"grass.quality": "0",
"water.quality": "0",
"water.reflections": "0"
Это можно получить и через настройки, но в связке с FOV 120 + жёсткой погодой это уже не “низкие настройки ради FPS”, а профиль чита.
Что не светится через этот вектор
Отдельные хорошие новости:
- изменение отдачи/разброса/снаряда в большинстве случаев идёт через поля структур (`BaseProjectile`, `Projectile`), а не через convar’ы — значит, в `modified_convars` это не попадёт;
- silent aim (правка `PlayerEyes::bodyRotation` по нужному оффсету) тоже не трогает convar’ы, и через эти два эндпоинта не палится напрямую.
Но это не значит, что они не детектятся вообще — просто не через F7/analytics, а серверными проверками паттернов стрельбы/углов.
HWID / альты / конфиг‑фингерпринт
Оба эндпоинта шлют железо и идентификаторы в той или иной форме:
"device_hash": "...",
"steam_id_hash": "..."
Если ты ловишь бан на одном аккаунте, а потом создаёшь новый с тем же железом и через какое‑то время жмёшь F7 или просто отыгрываешь достаточно долго для очередного heartbeat — Facepunch спокойно линкует учётки между собой по `device_hash`.
Плюс:
- полный конфиг (прицел, чувствительность, бинды, звук, графика) создаёт довольно уникальный “отпечаток профиля”;
- два аккаунта с одинаковым сумасшедшим FOV, теми же биндами и прицелом — очень жирный намёк на альта.
Отдельно логируется и EOS‑безопасность (`eos_tpm`, `eos_secureboot`, `eos_hvci`, `eos_iommu`). Это для риск‑скоринга: машина с вырубленным всем — более вероятная чит‑среда.
Кратко по экспозиции (F7 vs analytics)
- FOV (любые значения) — через F7 + через analytics (многократно, в нескольких полях).
- Все изменённые convar’ы — через analytics.
- Бинды — через F7.
- Железо (хэш) — через analytics.
- Позиция/ротейшн игрока — через F7.
- Командная строка (аргументы запуска) — через analytics.
- EOS‑безопасность — через analytics.
Что из этого логично вытекает
- Не жми F7 вообще, если у тебя клиент чем‑то грязно модифицирован — ты сам упаковываешь свой state и отдаёшь его Facepunch “с бантиком”.
- Если экстернал трогает convar’ы (особенно FOV и погоду), возвращай их к легитному значению **до** того, как может уйти телеметрия — или режь/хукай отправку аналитики.
- HWID‑спуф нужен не только против EAC, но и против телеметрии FP: `device_hash` в аналитике тоже используется для линковки.
- Не копируй один и тот же конфиг на пачку альтов — меняй хотя бы базовые вещи по типу прицела, сенсы, биндов.
- Помни, что heartbeat с аналитикой летит периодически (по ощущениям — раз в ~10 минут игрового времени). Если в момент отправки у тебя FOV 120, это таки залогируется.
С точки зрения этих двух эндпоинтов самые “тихие” читы — те, которые вообще не трогают convar’ы/графику/камеру, а работают только с объектными структурами: отдача, сайлент, кости, prediction и т.п. Всё, что связано с FOV/погодой/видимостью, через эту телеметрию ловится максимально очевидно.
В архив кинул сами эндпоинты с примерами payload’ов — дальше каждый уже сам решает, как с этим жить. Удачи.
Копался в HTTP-трафике клиента и наткнулся на занятную (и неприятную) штуку, которая касается вообще всех, кто бегает с модифицированным клиентом/экстерналами. Речь не про EAC, а про то, как сам игровой клиент Rust стучит на тебя на сервера Facepunch.
По факту нашлось два эндпоинта, которые должны заставить задуматься любого, кто трогает convar’ы, FOV, погоду и прочую графику.
Эндпоинт 1: F7-репорт
Когда ты жмёшь F7 и отправляешь репорт на игрока, вместе с текстом и категорией улетает **твой полный client state**. В том, что уходит в тело запроса, есть, помимо прочего:
- полный дамп конфига:
- все графические настройки;
- аудио;
- инпуты;
- конфиг прицела и т.д.;
- таблица всех биндов:
- каждая клавиша;
- все бинды на консольные команды;
- AppInfo:
- железо (GPU, CPU, RAM, ОС, архитектура);
- твой Steam UserID;
- текущий сервер;
- твоя позиция в мире и направление взгляда в момент репорта;
- build-инфа:
- Jenkins build tag;
- changeset ID;
- ветка;
- дата сборки.
Вся эта пачка улетает напрямую на Facepunch, а не в EAC.
Эндпоинт 2: аналитика клиента
Это отправляется периодически, пока ты коннектнут к серверу. И тут уже совсем весело:
- `modified_convars` — полный список всех convar’ов, отличающихся от дефолта;
- `device_hash` и `steam_id_hash` — захешированные железо + аккаунт для линковки альтов;
- `command_line` — полный список аргументов запуска;
- EOS‑статус безопасности:
- `eos_tpm`, `eos_secureboot`, `eos_hvci`, `eos_iommu` — включены/выключены TPM, Secure Boot, HVCI, IOMMU;
- поле `encryption` в графических настройках — версия шифрования, которую использует клиент;
- различные session ID, по которым это всё можно связать с серверными логами твоих действий.
Почему это важно для читов
Ключевое поле — `modified_convars`. Клиент честно сообщает Facepunch, какие convar’ы у тебя не дефолтные и какие у них значения. Отсюда сразу вылезает несколько типичных палевных сценариев.
FOV‑чит (external, запись в `ConVar_Graphics_Static._fov`)
Ты можешь сколько угодно писать FOV в “зашифрованное поле” извне, игра всё равно читает оттуда значение — и именно его шлёт в телеметрию. UI‑слайдер в Rust ограничен примерно 90.
Если в payload прилетает:
"graphics.fov": "120",
"field_of_view": "120"
— это физически недостижимо через обычные настройки. FOV > 90 сразу создаёт идеальную метку “юзер трогает FOV не через UI”.
Zoom‑чит (временное зум‑состояние через FOV)
Если телеметрия/репорт выстреливают в тот момент, когда ты зажатым хоткеем уводишь FOV сильно вниз, можно поймать, например:
"graphics.fov": "30"
Слайдер ниже ~60 в легитных условиях опустить нельзя. Значит, клиент сам только что сознался, что у него активен зум‑чит в момент отправки.
Всегда день / выкрутка яркости (через `TOD_Sky` и связанные convar’ы)
Когда сервер считает, что сейчас ночь (2:00), а твоя клиентская телеметрия говорит о дневных значениях освещения, получается несостыковка “серверная ночь — клиентский день”. Это уже повод сверять, что у тебя там творится с погодой и освещением.
Вырубание слоёв (terrain/trees/buildings) через culling mask камеры
Если ты режешь слои рендера (камера не рисует часть геометрии), сами маски могут и не светиться в convar’ах, но аномально низкие draw calls по определённым категориям могут всплывать в перф‑метриках (поля типа `draw_count` в аналитике).
Манипуляция погодой (популярно в интерналах)
Если внутренний чит тупо пишет в convar’ы:
"weather.clear_chance": "1",
"weather.fog_chance": "0",
"weather.rain_chance": "0",
"weather.storm_chance": "0"
— это уже совсем не похоже на нормальный конфиг. Легитный игрок может иметь `weather.clear_chance` около `0.8–0.9`, но все единицы и нули по ряду погодных параметров одновременно создают очень жирный маркер.
Трава / вода на нуле (по отдельности легит, в контексте — нет)
"grass.quality": "0",
"water.quality": "0",
"water.reflections": "0"
Это можно получить и через настройки, но в связке с FOV 120 + жёсткой погодой это уже не “низкие настройки ради FPS”, а профиль чита.
Что не светится через этот вектор
Отдельные хорошие новости:
- изменение отдачи/разброса/снаряда в большинстве случаев идёт через поля структур (`BaseProjectile`, `Projectile`), а не через convar’ы — значит, в `modified_convars` это не попадёт;
- silent aim (правка `PlayerEyes::bodyRotation` по нужному оффсету) тоже не трогает convar’ы, и через эти два эндпоинта не палится напрямую.
Но это не значит, что они не детектятся вообще — просто не через F7/analytics, а серверными проверками паттернов стрельбы/углов.
HWID / альты / конфиг‑фингерпринт
Оба эндпоинта шлют железо и идентификаторы в той или иной форме:
"device_hash": "...",
"steam_id_hash": "..."
Если ты ловишь бан на одном аккаунте, а потом создаёшь новый с тем же железом и через какое‑то время жмёшь F7 или просто отыгрываешь достаточно долго для очередного heartbeat — Facepunch спокойно линкует учётки между собой по `device_hash`.
Плюс:
- полный конфиг (прицел, чувствительность, бинды, звук, графика) создаёт довольно уникальный “отпечаток профиля”;
- два аккаунта с одинаковым сумасшедшим FOV, теми же биндами и прицелом — очень жирный намёк на альта.
Отдельно логируется и EOS‑безопасность (`eos_tpm`, `eos_secureboot`, `eos_hvci`, `eos_iommu`). Это для риск‑скоринга: машина с вырубленным всем — более вероятная чит‑среда.
Кратко по экспозиции (F7 vs analytics)
- FOV (любые значения) — через F7 + через analytics (многократно, в нескольких полях).
- Все изменённые convar’ы — через analytics.
- Бинды — через F7.
- Железо (хэш) — через analytics.
- Позиция/ротейшн игрока — через F7.
- Командная строка (аргументы запуска) — через analytics.
- EOS‑безопасность — через analytics.
Что из этого логично вытекает
- Не жми F7 вообще, если у тебя клиент чем‑то грязно модифицирован — ты сам упаковываешь свой state и отдаёшь его Facepunch “с бантиком”.
- Если экстернал трогает convar’ы (особенно FOV и погоду), возвращай их к легитному значению **до** того, как может уйти телеметрия — или режь/хукай отправку аналитики.
- HWID‑спуф нужен не только против EAC, но и против телеметрии FP: `device_hash` в аналитике тоже используется для линковки.
- Не копируй один и тот же конфиг на пачку альтов — меняй хотя бы базовые вещи по типу прицела, сенсы, биндов.
- Помни, что heartbeat с аналитикой летит периодически (по ощущениям — раз в ~10 минут игрового времени). Если в момент отправки у тебя FOV 120, это таки залогируется.
С точки зрения этих двух эндпоинтов самые “тихие” читы — те, которые вообще не трогают convar’ы/графику/камеру, а работают только с объектными структурами: отдача, сайлент, кости, prediction и т.п. Всё, что связано с FOV/погодой/видимостью, через эту телеметрию ловится максимально очевидно.
В архив кинул сами эндпоинты с примерами payload’ов — дальше каждый уже сам решает, как с этим жить. Удачи.