- Статус
- Оффлайн
- Регистрация
- 13 Фев 2026
- Сообщения
- 537
- Реакции
- 14
Короче, классическая стена: пытаюсь вытащить UWorld в Valorant при включенном HVCI, но на выходе стабильно получаю нули. База игры определяется корректно, драйвер на пинг отвечает, секции создаются, но как доходит до чтения оффсета — прилетает 0x0.
Юзаю стандартный подход через чтение памяти (RPM), но под защитой это не катит. Есть подозрение, что пора копать в сторону DTB (Directory Table Base) и правильной трансляции адресов через PML4, потому что обычный драйвер просто не видит валидные данные по этим адресам в контексте процесса под HVCI.
Вот кусок кода, который сейчас выдает пустоту:
Самое забавное, что многие кричат, мол «просто читай UWorld и всё будет», но по ходу дела они либо сидят с выключенным HVCI, либо жестко лукавят. В современных реалиях Вангарда такие фокусы без нормального хендлинга CR3 не проходят.
КТО реально сталкивался с этой проблемой под HVCI и смог пробиться через нулловые поинтеры без отключения защиты системы? Интересует именно логика получения валидного адреса, когда всё остальное кажется рабочим.
Кто копал трансляцию под HVCI в последнее время, есть подвижки по стабильному методу?
Юзаю стандартный подход через чтение памяти (RPM), но под защитой это не катит. Есть подозрение, что пора копать в сторону DTB (Directory Table Base) и правильной трансляции адресов через PML4, потому что обычный драйвер просто не видит валидные данные по этим адресам в контексте процесса под HVCI.
Вот кусок кода, который сейчас выдает пустоту:
Код:
void get_world() {
if (!game_base) {
game_base = g_mem.GetBase();
}
if (!game_base) {
std::cout << xorstr_("[-] Game base null") << "\n";
return;
}
uint64_t uw_slot = g_mem.Read<uint64_t>(game_base + offsets::Uworld);
uintptr_t uw = (uintptr_t)uw_slot;
uintptr_t uw_ptr = g_mem.Read<uintptr_t>(uw);
uintptr_t gi = g_mem.Read<uintptr_t>(uw_ptr + offsets::game_instance);
world_pointer = uw_ptr;
cached_game_instance = gi;
std::cout << xorstr_("[+] UWorld=0x") << std::hex << uw_ptr
<< xorstr_(" GI=0x") << gi << "\n";
}
Самое забавное, что многие кричат, мол «просто читай UWorld и всё будет», но по ходу дела они либо сидят с выключенным HVCI, либо жестко лукавят. В современных реалиях Вангарда такие фокусы без нормального хендлинга CR3 не проходят.
- Нужен корректный поиск Directory Table Base (DTB) для процесса.
- Возможно, стоит чекнуть, не зашифрован ли сам указатель на UWorld в текущем билде (хотя тогда был бы просто мусор, а не нули).
- HVCI требует специфической работы с физической памятью, обычный MmCopyVirtualMemory может лажать.
КТО реально сталкивался с этой проблемой под HVCI и смог пробиться через нулловые поинтеры без отключения защиты системы? Интересует именно логика получения валидного адреса, когда всё остальное кажется рабочим.
Кто копал трансляцию под HVCI в последнее время, есть подвижки по стабильному методу?