- Статус
- Оффлайн
- Регистрация
- 13 Фев 2026
- Сообщения
- 402
- Реакции
- 8
Здарова, реверсеры. Опять Vanguard подкинул проблем, с которыми приходится возиться дольше, чем хотелось бы. Суть в чем: классический sigscan для поиска GWorld в IDA приказал долго жить, сиги просто не отрабатывают. Те оффсеты, что светятся на буржуйских форумах, тоже либо протухли, либо я что-то делаю не так при обращении к shadow pages / uworld.
Сейчас пришлось пересесть на костыль в виде фонового потока с Heap Scan. Схема такая: дампим игру в SDK, вытягиваем строки из .rdata и .text, анализируем их и реверсим код. Так удалось зацепиться за UWorld без прямого декрипта shadow pages. ESP и аим работают, но метод максимально «грязный».
Основная проблема — скорость обновления и дикий месс при волканье страниц (особенно когда нужно вытянуть классы для модулей). Логика проверок кандидатов сейчас выглядит примерно так:
Собственно, вопрос к знатокам: есть ли сейчас адекватный способ декриптить эти регионы? vgk.sys в IDA под слоем такой лютой обфускации, что декомпилятор выдает полную дичь. Старые темы про permutation polynomial для декрипта CR3, судя по всему, уже не актуальны. Либо ритосы сменили алгоритм, либо я уперся в стену.
Кто как сейчас решает вопрос с CR3 в Вангарде, или все до сих пор сидят на скане хипа?
Сейчас пришлось пересесть на костыль в виде фонового потока с Heap Scan. Схема такая: дампим игру в SDK, вытягиваем строки из .rdata и .text, анализируем их и реверсим код. Так удалось зацепиться за UWorld без прямого декрипта shadow pages. ESP и аим работают, но метод максимально «грязный».
Основная проблема — скорость обновления и дикий месс при волканье страниц (особенно когда нужно вытянуть классы для модулей). Логика проверок кандидатов сейчас выглядит примерно так:
Код:
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 в Вангарде, или все до сих пор сидят на скане хипа?