- Статус
- Оффлайн
- Регистрация
- 13 Фев 2026
- Сообщения
- 537
- Реакции
- 14
Сразу на берегу: пост технический, если вы не понимаете разницу между пайпами и сокетами — проходите мимо. Это НЕ обход античита для игры в ранкеде. Если попытаетесь зайти в Premier или обычный матч, получите VAN 5 быстрее, чем загрузится карта.
Копался в реверсе и декомпиле и наткнулся на интересную логику взаимодействия игр Riot с их античитом. В бинарнике живет так называемый LocalVanguardSDK. Он общается с процессом vgc, чтобы чекать статус, создавать сессии и стопать их. Выяснилось, что игру можно запустить вообще без установленного Вангарда. Достаточно создать «зомби-сервис» vgc, прописать его в службах и поднять Named Pipe с тем же именем, которое использует оригинал.
Вот основной кусок магии, который кочует из одного проекта Риотов в другой:
Техническая база:
Зачем это нужно?
Если поднять фейковый vgc.exe, который будет хостить пайпу и просто зеркалить (echo) третье входящее сообщение, игра подумает, что всё ок. Никаких ошибок VAN при запуске. Это маст-хэв для:
Дисклеймер: в League of Legends при такой схеме вас просто кикнет из выбора чемпионов с ошибкой 2266 (сервер не видит сессию античита). В Валоранте — инстант бан аккаунта при попытке поиска игры. Используйте голову.
Скоро допилю DLL для отключения SSL pinning в Valorant, чтобы митмить эндпоинты было еще проще.
Копался в реверсе и декомпиле и наткнулся на интересную логику взаимодействия игр Riot с их античитом. В бинарнике живет так называемый LocalVanguardSDK. Он общается с процессом vgc, чтобы чекать статус, создавать сессии и стопать их. Выяснилось, что игру можно запустить вообще без установленного Вангарда. Достаточно создать «зомби-сервис» vgc, прописать его в службах и поднять Named Pipe с тем же именем, которое использует оригинал.
Вот основной кусок магии, который кочует из одного проекта Риотов в другой:
Код:
void *v93;
_SERVICE_STATUS ServiceStatus;
v5 = a1;
sub_1415420A0();
if ( !*(_BYTE *)(v5 + 8) ) goto LABEL_31;
*a3 = 0;
v6 = OpenSCManagerW(0LL, 0LL, 1u);
// ... проверка состояния vgc ...
v11 = OpenServiceW(v6, L"vgc", 0x14u);
// ... коннект к пайпе ...
FileW = CreateFileW(L"\\\\.\\pipe\\933823D3-C77B-4BAE-89D7-A92B567236BC", 0xC0000000, 0, 0LL, 3u, 0, 0LL);
Техническая база:
- Игра через стандартные API винды (Service Control Manager) проверяет, жива ли служба vgc.
- Если службы нет, она пытается ее стартануть. Ошибки типа -81 или -83 — это как раз провал на этом этапе.
- После старта игра ломится в Named Pipe: 933823D3-C77B-4BAE-89D7-A92B567236BC. Пайпы юзаются для IPC — это быстрее и скрытнее, чем локалхост.
- В этот канал летят логин, ID и домен (vanguard.accessurl в конфигах). В ответ vgc присылает статус (бан по железу HWID 152, статус PCbang и прочее).
- Главное — это heartbeat. Постоянный обмен пакетами, подтверждающий, что линк не упал.
Зачем это нужно?
Если поднять фейковый vgc.exe, который будет хостить пайпу и просто зеркалить (echo) третье входящее сообщение, игра подумает, что всё ок. Никаких ошибок VAN при запуске. Это маст-хэв для:
- Дебага API через Fiddler или Charles (можно спокойно вешать прокси и смотреть трафик).
- Оффлайн-режимов (актуально для той же 2XKO, где Vanguard не должен мешать локальному файтингу).
- Реверса игровых механик без риска получить бан за аттач дебаггера к защищенному процессу.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Логика простая: пишем на C# или C++ загрузчик, который регистрирует бинарник «пустышку» как службу vgc, эмулирует протокол пайпы и запускает саму игру. Исходники такого добра часто светятся на гитхабе под именами FakeVgc и Launcher. Компилить строго в Visual Studio, никаких готовых экзешников не дам — берегите свои вирты и не ловите ратники.
Дисклеймер: в League of Legends при такой схеме вас просто кикнет из выбора чемпионов с ошибкой 2266 (сервер не видит сессию античита). В Валоранте — инстант бан аккаунта при попытке поиска игры. Используйте голову.
Скоро допилю DLL для отключения SSL pinning в Valorant, чтобы митмить эндпоинты было еще проще.