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

Гайд Zula — Настройка Blackbone, хук BitBlt и обход HWID бана

Sloppy
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
13 Фев 2026
Сообщения
395
Реакции
8
Народ, решил расписать базу по Zula для тех, кто еще ковыряет этот проект или хочет поднять свои знания в мануал-маппинге и защите от репортов. Игра специфичная, но на ее примере отлично разбирается работа с ядром и графическими хуками.

1. Настройка Blackbone (Kernel Side)

Многие новички спотыкаются на смещениях (offsets) под разные версии винды. В файле BlackBoneDrv.c нужно четко прописать соответствие версий. Вот актуальные структуры для последних билдов (10 и 11):

Код:
Expand Collapse Copy
WINVER_10_22H2 = 0x0A0C,
WINVER_11_21H2 = 0x0B00,
WINVER_11_22H2 = 0x0B01,
WINVER_11_23H2 = 0x0B02,

Если сидите на 21H2, то конфиг pData выглядит так:

Код:
Expand Collapse Copy
pData->ver                = 0x0A0B;
pData->KExecOpt           = 0x283;
pData->Protection         = 0x87A;
pData->EProcessFlags2     = 0x9D4;    // MitigationFlags
pData->ObjTable           = 0x570;
pData->VadRoot            = 0x7D8;
pData->PrevMode           = 0x232;
pData->ExitStatus         = 0x548;
pData->NtCreateThdExIndex = 0xC2;
pData->NtTermThdIndex     = 0x53;

2. Юзер-мод инжектор (Mmap)

После того как драйвер готов, пишем простенький аттач к zula.exe. Рекомендую использовать флаги KWipeHeader и KNoTLS, чтобы лишний раз не светить PE-хидерами в памяти.

Код:
Expand Collapse Copy
int main()
{
    NTSTATUS status = -1;
    while (!NT_SUCCESS(status))
    {
        status = process.Attach(xorstr_(L"zula.exe"));
        std::this_thread::sleep_for(std::chrono::milliseconds(100));
    }

    blackbone::Driver().EnsureLoaded();
    blackbone::Driver().MmapDll(
        process.pid(), xorstr_(L"your_cheat.dll"),
        KWipeHeader | KNoTLS
    );
    
    std::this_thread::sleep_for(std::chrono::seconds(5));
    blackbone::Driver().Unload();
    return 0;
}

3. Детект репортов и анти-скриншот (BitBlt Hook)

В Zula есть фишка: когда на вас кидают репорт, игра делает скриншот через BitBlt. Если в этот момент у вас отрисован ESP или чамсы — это инстабан при ручной проверке. Решение — вешать хук на BitBlt и вырубать визуалы на время вызова функции.

Код:
Expand Collapse Copy
typedef BOOL(WINAPI* iBitBlt)(HDC, int, int, int, int, HDC, int, int, DWORD);
iBitBlt oBitBlt = nullptr;

BOOL __stdcall hkBitBlt(HDC hdc, int x, int y, int cx, int cy, HDC hdcSrc, int x1, int y1, DWORD rop)
{
    // Гасим все визуалы перед тем, как игра заскринит экран
    utils::menu = false;
    utils::WallHack = false; 
    utils::EspBox = false;
    utils::Chams = false; 
    utils::EspLine = false;

    return oBitBlt(hdc, x, y, cx, cy, hdcSrc, x1, y1, rop);
}

// Установка через Detours
uintptr_t gdi32Base = (uintptr_t)GetModuleHandleA("gdi32.dll");
oBitBlt = (iBitBlt)(gdi32Base + 0x6DE0);
DetourAttach(&(PVOID&)oBitBlt, hkBitBlt);

4. Бан-система и HWID

Zula довольно примитивно чекает железо через autorun.exe. Если словили табличку "PC is blocked", не спешите покупать платные спуферы. Для начала пройдитесь по этим веткам реестра:

  1. Удалите UDID: HKEY_CURRENT_USER\SOFTWARE\Zula
  2. Смените MAC-адрес во всех сетевых адаптерах: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\...
  3. Подмените имя процессора: HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0

Методы старые, но в этой игре до сих пор работают. Кто уже тестил такой подход на актуальных патчах?

Кто пробовал более изощренные методы обхода их анти-скриншота, отпишитесь в треде.
 
Назад
Сверху Снизу