Начинающий
- Статус
- Оффлайн
- Регистрация
- 13 Фев 2026
- Сообщения
- 48
- Реакции
- 0
Кто-то уже копал эту тему с анпаком и маунтом паков в Валоранте? Наткнулся на интересный сурс, но, похоже, риоты эту дыру уже прикрыли в последних обновах.
Суть в том, что метод через `Mount` (из доки Epic Games) раньше работал как часы, а сейчас игра просто крашится или требует восстановления файлов, как будто ты пытаешься подсунуть кастомные паки напрямую в папку игры. Видимо, античит теперь чекает целостность на лету.
Ниже оставляю код, если кто хочет поресерчить офсеты или найти новый вектора для обхода, мб кому-то пригодится как база для экспериментов.
Код выглядит как типичный хук функций движка, но с текущим Вангардом такие приколы — прямой путь к бану. Юзайте только на виртуалках или на свой страх и риск, если вообще решите запускать.
Суть в том, что метод через `Mount` (из доки Epic Games) раньше работал как часы, а сейчас игра просто крашится или требует восстановления файлов, как будто ты пытаешься подсунуть кастомные паки напрямую в папку игры. Видимо, античит теперь чекает целостность на лету.
Ниже оставляю код, если кто хочет поресерчить офсеты или найти новый вектора для обхода, мб кому-то пригодится как база для экспериментов.
Код:
constexpr uintptr_t MOUNT_OFFSET = 0x283E150;
constexpr uintptr_t GET_PLATFORM_SLOT = 0x1710450;
constexpr uintptr_t FIND_PLATFORM_FILE = 0x1710080;
constexpr uintptr_t DELEGATE_OFFSET = 0xBF5A1D8;
constexpr const wchar_t* PAK_PATH_1 = L"C:\\Mods\\pakchunk1Custom-Windows_P.pak";
constexpr const wchar_t* PAK_PATH_2 = L"C:\\Mods\\pakchunk2Custom-Windows_P.pak";
constexpr const wchar_t* PAK_PATH_3 = L"C:\\Mods\\pakchunk3Custom-Windows_P.pak";
constexpr int PAK_ORDER = 100;
typedef bool(__fastcall* tMount)(
__int64 self,
const wchar_t* InPakFilename,
int PakOrder,
__int64 InPath,
char bLoadIndex,
char bEncrypted
);
typedef __int64* (__fastcall* tGetPlatformSlot)();
typedef __int64(__fastcall* tFindPlatformFile)(__int64* slot, const wchar_t* name);
void Mount()
{
uintptr_t base = VALORANT::Module;
tMount MountFn = (tMount)(base + MOUNT_OFFSET);
tGetPlatformSlot GetPlatformSlot = (tGetPlatformSlot)(base + GET_PLATFORM_SLOT);
tFindPlatformFile FindFile = (tFindPlatformFile)(base + FIND_PLATFORM_FILE);
__int64 pakFile = 0;
while (true)
{
__int64* slot = GetPlatformSlot();
if (slot && *slot)
{
__int64 pf = FindFile(slot, L"PakFile");
if (pf)
{
__int64 iostore = *(__int64*)(pf + 328);
if (iostore)
{
pakFile = pf;
break;
}
}
}
Sleep(1000);
}
const wchar_t* paths[] = { PAK_PATH_1, PAK_PATH_2, PAK_PATH_3 };
for (int i = 0; i < 3; i++)
{
FILE* f = _wfopen(paths[i], L"rb");
if (!f)
{
printf("[-] file %d not found: %ls\n", i + 1, paths[i]);
}
else
{
fseek(f, 0, SEEK_END);
long sz = ftell(f);
fseek(f, 0, SEEK_SET);
unsigned char magic[8] = {};
fread(magic, 1, 8, f);
fclose(f);
printf("[*] file %d size=%ld magic: %02X %02X %02X %02X %02X %02X %02X %02X\n",
i + 1, sz,
magic[0], magic[1], magic[2], magic[3],
magic[4], magic[5], magic[6], magic[7]);
}
}
__int64* delegateObj1 = (__int64*)(base + 0xBF5A100);
__int64 saved1Ptr = delegateObj1[0];
int saved1Count = *(int*)((char*)delegateObj1 + 8);
int saved1Cap = *(int*)((char*)delegateObj1 + 12);
delegateObj1[0] = 0;
*(int*)((char*)delegateObj1 + 8) = 0;
*(int*)((char*)delegateObj1 + 12) = 0;
__int64* delegateObj2 = (__int64*)(base + DELEGATE_OFFSET);
__int64 saved2Ptr = delegateObj2[0];
int saved2Count = *(int*)((char*)delegateObj2 + 8);
int saved2Cap = *(int*)((char*)delegateObj2 + 12);
delegateObj2[0] = 0;
*(int*)((char*)delegateObj2 + 8) = 0;
*(int*)((char*)delegateObj2 + 12) = 0;
bool r1 = MountFn(pakFile, PAK_PATH_1, PAK_ORDER, 0, 1, 0);
bool r2 = MountFn(pakFile, PAK_PATH_2, PAK_ORDER, 0, 1, 0);
bool r3 = MountFn(pakFile, PAK_PATH_3, PAK_ORDER, 0, 1, 0);
delegateObj1[0] = saved1Ptr;
*(int*)((char*)delegateObj1 + 8) = saved1Count;
*(int*)((char*)delegateObj1 + 12) = saved1Cap;
delegateObj2[0] = saved2Ptr;
*(int*)((char*)delegateObj2 + 8) = saved2Count;
*(int*)((char*)delegateObj2 + 12) = saved2Cap;
printf("[Mount] chunk1=%d chunk2=%d chunk3=%d\n", r1, r2, r3);
}
Код выглядит как типичный хук функций движка, но с текущим Вангардом такие приколы — прямой путь к бану. Юзайте только на виртуалках или на свой страх и риск, если вообще решите запускать.
Последнее редактирование модератором: