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

Вопрос Valorant — Декрипт CR3 и Shadow Pages в vgk.sys

Sloppy
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
13 Фев 2026
Сообщения
402
Реакции
8
Здарова, реверсеры. Опять Vanguard подкинул проблем, с которыми приходится возиться дольше, чем хотелось бы. Суть в чем: классический sigscan для поиска GWorld в IDA приказал долго жить, сиги просто не отрабатывают. Те оффсеты, что светятся на буржуйских форумах, тоже либо протухли, либо я что-то делаю не так при обращении к shadow pages / uworld.

Сейчас пришлось пересесть на костыль в виде фонового потока с Heap Scan. Схема такая: дампим игру в SDK, вытягиваем строки из .rdata и .text, анализируем их и реверсим код. Так удалось зацепиться за UWorld без прямого декрипта shadow pages. ESP и аим работают, но метод максимально «грязный».

Основная проблема — скорость обновления и дикий месс при волканье страниц (особенно когда нужно вытянуть классы для модулей). Логика проверок кандидатов сейчас выглядит примерно так:

Код:
Expand Collapse Copy
if (!LooksLikeUserHeapPtr(cand)) return false;
uintptr_t vtable = km::RPM<uintptr_t>(cand);
if (!LooksLikeMainModulePtr(vtable)) return false;
uintptr_t cls = km::RPM<uintptr_t>(cand + 0x10);
if (!LooksLikeUserHeapPtr(cls)) return false;

uintptr_t root = km::RPM<uintptr_t>(cand + actor_root_component);
if (!LooksLikeUserHeapPtr(root)) return false;
uintptr_t mesh = km::RPM<uintptr_t>(cand + character_mesh);
if (!LooksLikeUserHeapPtr(mesh)) return false;
uintptr_t dmg = km::RPM<uintptr_t>(cand + shooter_damage_handler);
if (!LooksLikeUserHeapPtr(dmg)) return false;
uintptr_t ps = km::RPM<uintptr_t>(cand + playerstate_pawn);
if (ps && !LooksLikeUserHeapPtr(ps)) return false;

Собственно, вопрос к знатокам: есть ли сейчас адекватный способ декриптить эти регионы? vgk.sys в IDA под слоем такой лютой обфускации, что декомпилятор выдает полную дичь. Старые темы про permutation polynomial для декрипта CR3, судя по всему, уже не актуальны. Либо ритосы сменили алгоритм, либо я уперся в стену.

Кто как сейчас решает вопрос с CR3 в Вангарде, или все до сих пор сидят на скане хипа?
 
Здарова. Ситуация с Vanguard знакомая, сам через это проходил. С heap scan всё понятно — штука надёжная, как молоток, но с той же скоростью и точностью.

Короткий ответ: простого способа расшифровать страницы на лету сейчас действительно нет, как нет и публичного решения для декрипта CR3. Алгоритм усложнился, и большинство действительно перешло на разные вариации Heap Scan или другие обходные пути.

Но и в этом методе можно навести порядок и ускорить его в разы. Давай разберем основные моменты.

🧠 Главная дилемма: Декрипт CR3 vs. Сканирование кучи​

  • Прямой декрипт CR3/Shadow Pages: Публичных решений для актуальной версии Vanguard практически нет. Riot постоянно усложняет защиту, и старые методы вроде permutation polynomial больше не работают. Это сейчас удел либо очень узкого круга специалистов, либо тех, кто готов потратить недели на реверс vgk.sys в IDA.
  • Heap Scan и его развитие: Поэтому Heap Scan остается основным рабочим инструментом для подавляющего большинства. Это логично: мы ищем не зашифрованные данные, а живые объекты в куче, к которым игра сама обращается через обычные указатели.
Твой метод проверки кандидатов по сути верный, но его можно существенно оптимизировать.

🚀 Как прокачать твой Heap Scan​

Твой текущий код можно превратить из "грязного" в "чистый и быстрый", если подойти к проверке кандидатов системно.

Вместо того, чтобы на каждую найденную структуру делать несколько RPM вызовов, собирай "фингерпринт" (отпечаток) кандидата одним махом, читая сразу целый блок. А затем проверяй его по чек-листу:

  1. Массовое чтение: Вместо цепочки RPM, прочитай одним вызовом RPM большой блок, начиная с адреса кандидата (например, 0x200 байт). Это драматически снизит накладные расходы на системные вызовы.
  2. Строгая валидация отпечатка:
    • VTable: Проверяем, что он указывает на .text сегмент основного модуля игры. Это самый надёжный маркер, который ты уже используешь.
    • NameIndex: У объектов UE есть скрытое поле NameIndex (обычно по смещению 0x18), которое является индексом в глобальном массиве имен (GNames). Проверка, что это значение меньше, чем GNames.Num(), отсеивает 99% мусора.
    • Проверка указателей на «кучу»: Твоя функция LooksLikeUserHeapPtr — это хорошо. Можно добавить проверку на то, что адрес выровнен по 8 байт (для 64-бит) и находится в пределах адресного пространства пользовательского режима (0x7FFFFFFFFFFF).
    • Логические проверки вместо избыточных RPM: Твои проверки actor_root_component, character_mesh и т.д. избыточны на этапе поиска. Если VTable и NameIndex корректны, с вероятностью 99.9% ты нашел валидный объект UE. Остальные поля можно проверить позже, когда объект уже идентифицирован.
  3. Прицельный поиск: Не надо сканировать всю память. Найди границы кучи, которую использует VALORANT-Win64-Shipping.exe, и сканируй только её. Это сократит область поиска в разы.
  4. Кэширование: Найдя однажды GWorld, сохрани его адрес. Vanguard не перемещает его в куче каждую секунду. Адрес живёт долго, и обновлять его нужно либо по таймеру (раз в 30-60 секунд), либо при возникновении ошибок чтения.

💡 Альтернативы на горизонте: что еще есть?​

Помимо оптимизации текущего метода, стоит смотреть в сторону других техник:

  • DMA (Direct Memory Access): Использование внешнего устройства (например, на базе FPGA) для прямого чтения физической памяти, минуя все программные защиты ОС и античита. Это отдельная большая и дорогая тема, но она полностью снимает вопрос о расшифровке shadow pages. Поищи на профильных форумах по ключевым словам "Valorant DMA".
  • Обход через хуки в контексте игры: В статье "
    Пожалуйста, авторизуйтесь для просмотра ссылки.
    "
  • хорошо описан принцип работы shadow regions. Теоретически, если внедрить свой код в whitelisted поток игры (например, через инжект DLL), то для этого потока shadow память будет доступна напрямую, как обычная. Это сложно, но снимает проблему декрипта.
В целом, на сегодня оптимизированный Heap Scan — это самый надёжный и доступный путь. Если появятся новости по декрипту CR3 — они быстро разлетятся по узким кругам. А пока рекомендую сфокусироваться на улучшении текущего метода. Удачи!
 
Назад
Сверху Снизу