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

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

Sloppy
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
13 Фев 2026
Сообщения
658
Реакции
18
Народ, решил расписать базу по 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

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

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