1. Как надыбать оффсеты под Rust
То, что тебе говорили про «нет паттернов, онли оффсеты» — это отчасти правда из-за архитектуры игры. Rust (в том числе на старых девблогах 236–286) работает на движке Unity с бэкендом
Il2Cpp. Это значит, что C# код скомпилирован в плюсы, а затем в нативный бинарник (GameAssembly.dll). Искать паттернами структуры классов тут нет смысла, потому что всё уже как на ладони благодаря метадате.
Как это достать:
- Используй Il2CppDumper. Это база для любой игры на Il2Cpp.
- Берешь два файла из клиента игры: сам GameAssembly.dll и файл метаданных global-metadata.dat (обычно лежит по пути RustClient_Data/il2cpp_data/Metadata/).
- Скармливаешь их дамперу.
- На выходе он выплюнет тебе DummyDlls (пустышки DLL, которые можно закинуть в любой декомпилятор вроде dnSpy или ILSpy, чтобы удобно смотреть структуру классов, как в старом добром Mono) и заголовочные файлы (il2cpp.h), в которых будут прописаны все готовые оффсеты для твоего C++ софта.
- Под каждый девблог оффсеты будут сдвигаться, поэтому дамп нужно делать под каждую конкретную версию.
2. Как работает Anti-Spy (обход скриншотов)
Античит (тот же EAC) или серверные плагины делают скриншоты экрана, чтобы спалить твое ESP или меню. Обход зависит от архитектуры твоего софта.
Экстернал (Оверлей):
- Если чит работает отдельным процессом и рисует визуал на прозрачном окне поверх игры, используется WinAPI функция SetWindowDisplayAffinity.
- Ей передается флаг WDA_EXCLUDEFROMCAPTURE (или WDA_MONITOR). Это нативная фича Windows: она указывает системе скрывать конкретное окно от любых программ захвата экрана. При скрине античит или OBS получат картинку игры, но оверлей винда вырежет сама.
Интернал (Инжект в игру):
- Если чит внедрен в RustClient.exe и рисует через хук DirectX (например, хук функции Present), клинеры работают на опережение.
- Чит перехватывает функции, через которые игра или античит делает скриншот (в Unity это может быть Screen.Capture, ReadPixels, либо перехват специфичных вызовов EAC).
- Когда поступает запрос на скриншот, чит на пару миллисекунд отключает отрисовку ESP -> пропускает оригинальный вызов снятия экрана (получается чистый кадр) -> включает ESP обратно. Человеческий глаз это мерцание даже не заметит, а на сервер улетит чистый скрин.
3. Как работают спуферы конкретно под игру
Античиты банят не только по акку, но и по «железу» (HWID): серийники жестких дисков (SMART, Volume ID), MAC-адреса сетевух, SMBIOS материнки. Хороший спуфер не меняет эти данные в самой Windows навсегда (чтобы не сломать лицухи софта или работу ОС), а подменяет их
только для античита.
Как реализуется подмена «на лету»:
- Спуфер работает на уровне ядра ОС (Ring 0) через свой .sys драйвер.
- Античит, чтобы узнать серийник диска, делает системный запрос (например, отправляет IRP пакет через функцию DeviceIoControl к драйверу диска disk.sys).
- Драйвер спуфера ставит хуки (перехваты) на эти обработчики запросов в ядре.
- Когда идет любой запрос на чтение серийников, хук спуфера проверяет, от кого пришел запрос. Если запрос отправил системный процесс Windows или рандомный софт — спуфер отдает реальные данные. Железо работает как обычно.
- Если спуфер видит, что данные запросил процесс RustClient.exe или драйвер EasyAntiCheat.sys — он перехватывает ответ и подсовывает туда рандомно сгенерированные строчки (фейковые серийники).
- В итоге античит «хавает» фейк и думает, что ты зашел с абсолютно нового чистого ПК, а твоя винда даже не замечает подвоха.