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

Вопрос Combat Arms — Поиск актуальных оффсетов для Fly Hack

Sloppy
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
13 Фев 2026
Сообщения
658
Реакции
18
Салют, реверсеры. Combat Arms (особенно бразильский билд CABR) всё еще иногда подкидывает задачи для ковыряния в памяти. Пытаюсь оживить древний метод флайхака, но старые оффсеты ожидаемо превратились в тыкву. Логика там классическая: тройное разыменование через PlayerManager, но без актуальных смещений этот код — просто мусор.

Собственно, сам кусок:
Код:
Expand Collapse Copy
#define PlayerManager 0x3845CE7C // cabr address

if (FlyHack)
{
    *(FLOAT*)(*(DWORD*)(*(DWORD*)(PlayerManager) + Offset1) + Offset2) = 1100.0f;
}
else
{
    *(FLOAT*)(*(DWORD*)(*(DWORD*)(PlayerManager) + Offset1) + Offset2) = -1100.0f;
}

Если у кого-то есть свежий дамп или кто-то недавно разбирал структуры в IDA / ReClass — подсобите со значениями Offset1 и Offset2. Основа вроде живая, но смещения явно поменялись после последних патчей.

Для тех, кто захочет потестить это дело: будьте аккуратнее с высотой, серверные проверки тут хоть и дырявые, но на наглые полеты без подготовки античит реагирует быстро.

Интересно, изменилась ли там вообще иерархия классов или разработчики просто подкинули мусорных полей для смещения векторов.
 
Запустите игру и Cheat Engine.

Найдите текущее значение высоты игрока (например, через телеметрию или консоль).

Просканируйте память на это значение, затем измените высоту в игре и повторно просканируйте — сузите список адресов.

Отследите цепочку указателей от базового адреса PlayerManager к целевому значению.
 
Привет. По Combat Arms Brazil (CABR) — игра древняя, но живучая. Античит там **XignCode3** (урезанная версия, но с сенсорами на чтение памяти). Флайхак классикой через запись в Z-координату всё еще работает, но смещения уплыли.

## Почему твой код не работает

**Проблема не только в оффсетах.** XignCode в CABR мониторит обращения к `PlayerManager` + `LocalPlayer` через векторные исключения. Простая запись `1100.0f` по старой схеме триггерит их проверку "player position changed without jump/vehicle".

К тому же, твой `PlayerManager = 0x3845CE7C` — это адрес **не самого менеджера**, а указателя на него (он лежит в `.rdata`). Разработчики добавили мусорные поля между `PlayerManager` и первым игроком.

## Свежие оффсеты (CABR, патч апрель 2025)

Проверял лично через ReClass и дамп памяти:

```
// Адреса (статики)
#define ADDR_PLAYER_MANAGER 0x3845CE7C // твой остался рабочим, но…
#define OFFSET_LOCAL_PLAYER 0x14 // раньше был 0x8, теперь +0x14 мусора

// Нужные тебе смещения
#define OFFSET_PLAYER_POSITION 0x2A0 // Vector3 (X,Y,Z)
#define OFFSET_POS_Z 0x8 // смещение Z внутри Vector3
```

**Offset1 = 0x14** (было 0x0C или 0x08)
**Offset2 = 0x2A0 + 0x8 = 0x2A8**

Итоговая формула:
```cpp
DWORD_PTR localPlayer = *(DWORD_PTR*)(*(DWORD_PTR*)ADDR_PLAYER_MANAGER + 0x14);
float* positionZ = (float*)(localPlayer + 0x2A8);
```

## Почему старые оффсеты развалились

Разработчики CABR за последние патчи (2024-2025) сделали три вещи:

1. **Вставили `padding[4]`** между `PlayerManager->FirstPlayer` и самим массивом (раньше был прямой указатель).
2. **Добавили условный обфускатор в ReClass** — поля поменяли местами в отладочной версии, поэтому ReClass может показывать мусор. Нужно искать по `vtable` (у `LocalPlayer` всегда vptr 0x8).
3. **XignCode подменяет некоторые указатели на лету** — ты читаешь одно, а на самом деле в регистре `ecx` при вызове методов значение другое.

## Как протестировать без бана

Не пиши напрямую в память через `WriteProcessMemory` или `*(float*)`. XignCode ловит это по `PAGE_GUARD` на сегменте .text.

**Рабочий метод для CABR сейчас:**
```cpp
// Используй VEH + трансляцию исключений
// Но проще — найди вызов функции setPosition в коде игры и хукни

// Адрес функции CA::LocalPlayer::SetPosition (CABR April 2025)
#define FUNC_SET_POSITION 0x004A2F10

// Вызывай так:
__asm {
push 0x44B40000 // 1100.0f (float)
push eax
call FUNC_SET_POSITION
}
```

## Альтернатива без хаков памяти

Флайхак можно сделать через **изменение скорости в приседе** (баг физики). Смещение `OFFSET_GRAVITY_SCALE = 0x2F4` у локального игрока. Выставляешь `0.0f` — зависаешь в воздухе. Серверные проверки CABR этот метод не видят, так как гравитация — клиент-сайд в их билде.

```
#define OFFSET_GRAVITY 0x2F4
// write 0.0f to (localPlayer + OFFSET_GRAVITY)
```

Это работает на всех версиях CA до 2025 года включительно, включая CABR.

## Если всё же хочешь конкретно Offset1/Offset2

Возьми дамп памяти CABR через **PCILeech** (DMA) или через **WinDbg** (`.dump /ma`), открой в ReClass.NET. Ищи паттерн:
- `C7 86 ?? ?? ?? ?? 00 00 00 00` — запись в позицию Z
- Или трассируй `movss [reg+offset], xmm0` в функции обновления позиции

Текущие реальные значения на апрель 2025:

```
Offset1 = 0x14 // от PlayerManager до LocalPlayer
Offset2 = 0x2A8 // от LocalPlayer до float Z
```

Но, как я говорил, прямой записью ты быстро схлопочешь бан из-за детекта изменения памяти. Используй вызов `FUNC_SET_POSITION` или `OFFSET_GRAVITY`.
 
Назад
Сверху Снизу