Вопрос Проблема с External WH C++

Начинающий
Статус
Оффлайн
Регистрация
22 Июл 2020
Сообщения
72
Реакции[?]
5
Поинты[?]
0
Компилирую код на Release x86 все оффсеты обновил. В игре ничего не происходит. Помогите найти причину!

C++:
#include <iostream>
#include <Windows.h>
#include <TlHelp32.h>
#include <thread>


const DWORD dwLocalPlayer = 0xD892CC;
const DWORD dwEntityList = 0x4DA21AC;
const DWORD m_iTeamNum = 0xF4;
const DWORD m_iGlowIndex = 0xA438;
const DWORD dwGlowObjectManager = 0x52EA640;


HANDLE process; // непосредственно сам процесс CSGO
DWORD clientBase; // этo для работы с client_panorama.dll
DWORD engineBase; // этo для работы с engine.dll



DWORD getModuleBaseAddress(DWORD pid, const char* name)
{
    HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pid);
    MODULEENTRY32 mEntry;
    mEntry.dwSize = sizeof(MODULEENTRY32);
    do
    {
        if (!strcmp(mEntry.szModule, name))
        {
            CloseHandle(snapshot);
            return (DWORD)mEntry.modBaseAddr;
        }
    } while (Module32Next(snapshot, &mEntry));
}

template <typename T>
T readMem(DWORD address)
{
    T buffer;
    ReadProcessMemory(process, (LPVOID)address, &buffer, sizeof(buffer), 0);
    return buffer;
}

template <typename T>
void writeMem(DWORD address, T value)
{
    WriteProcessMemory(process, (LPVOID)address, &value, sizeof(value), 0);
}

void wallhack()
{
    while (true) // создаем бесконечный цикл
    {
        Sleep(10); // таймаут 10 мс, чтобы не грузить процессор под 100

        DWORD glowObj = readMem<DWORD>(clientBase + dwGlowObjectManager); // создаем объект glowObj из модельки игрока
        DWORD myTeam = readMem<DWORD>(readMem<DWORD>(clientBase + dwLocalPlayer) + m_iTeamNum); // создаем объект тиммейтов

        for (int x = 0; x <= 64; x++) // сам вх
        {
            DWORD player = readMem<DWORD>(clientBase + dwEntityList + x * 0x10); // обычный игрок
            if (player == 0)
                continue;

            bool dormant = readMem<bool>(player + 0xED); // спектатор
            if (dormant)
                continue;

            DWORD team = readMem<DWORD>(player + m_iTeamNum); // тиммейт
            if (team != 2 && team != 3)
                continue;

            DWORD currentGlowIndex = readMem<DWORD>(player + m_iGlowIndex); // текущий индекс игрока

            if (team != myTeam) // если игрок не тиммейт
            {
                // делаем его обводку красным
                std::cout << 1;
                writeMem<float>(glowObj + currentGlowIndex * 0x38 + 0x4, 1.f); // red
                writeMem<float>(glowObj + currentGlowIndex * 0x38 + 0x8, 1.f); // green
                writeMem<float>(glowObj + currentGlowIndex * 0x38 + 0xC, 1.f); // blue
                writeMem<float>(glowObj + currentGlowIndex * 0x38 + 0x10, 1.f);
                writeMem<bool>(glowObj + currentGlowIndex * 0x38 + 0x24, true);
                writeMem<bool>(glowObj + currentGlowIndex * 0x38 + 0x25, false);
            }
            else // если игрок тиммейт
            {
                // делаем его обводку синим
                std::cout << 2;
                writeMem<float>(glowObj + currentGlowIndex * 0x38 + 0x4, 1.f); // red
                writeMem<float>(glowObj + currentGlowIndex * 0x38 + 0x8, 1.f); // green
                writeMem<float>(glowObj + currentGlowIndex * 0x38 + 0xC, 1.f); // blue
                writeMem<float>(glowObj + currentGlowIndex * 0x38 + 0x10, 1.f);
                writeMem<bool>(glowObj + currentGlowIndex * 0x38 + 0x24, true);
                writeMem<bool>(glowObj + currentGlowIndex * 0x38 + 0x25, false);
            }
        }
    }
}

int main() {

    SetConsoleTitle("Top non-pasted shit 1337"); // устанавливаем заголовок нашей консоли

    std::cout << "Open CS:GO\n"; // выводим в консоль сообщение о том, что надо открыть ксго

    HWND hwnd;

    do {
        hwnd = FindWindowA(0, "Counter-Strike: Global Offensive"); // ищем ксго, если находим - выходим из цикла
        Sleep(50); // таймаут (чтобы не грузить процессор)
    } while (!hwnd);

    DWORD pid;
    GetWindowThreadProcessId(hwnd, &pid); // получаем id приложения
    process = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid); // заходим в кс го его id

    std::cout << "Csgo started, pid " << pid << ".\n"; // выводим сообщение о том, что ксго запущена

    do {
        clientBase = getModuleBaseAddress(pid, "client.dll"); // ищем клиент кс го
        Sleep(50);
    } while (!clientBase);

    do {
        engineBase = getModuleBaseAddress(pid, "engine.dll"); // ищем движок кс го
        Sleep(50);
    } while (!engineBase);

    std::thread whThread(wallhack);


    while (true)
    {

        if (GetAsyncKeyState(VK_F9)) // если нажали f9
        {
            whThread.join();
            Sleep(100); // таймаут, чтобы сбросить нагрузку

        }

    }
}
 
Начинающий
Статус
Оффлайн
Регистрация
22 Июл 2020
Сообщения
72
Реакции[?]
5
Поинты[?]
0
0x8, 0xC, 0x10, 0x14, 0x28, 0x29
Сделал так, теперь крашит
C++:
if (team != myTeam) // если игрок не тиммейт
            {
                // делаем его обводку красным
                writeMem<float>(glowObj + currentGlowIndex * 0x38 + 0x8, 1.f); // red
                writeMem<float>(glowObj + currentGlowIndex * 0x38 + 0xC, 1.f); // green
                writeMem<float>(glowObj + currentGlowIndex * 0x38 + 0x10, 1.f); // blue
                writeMem<float>(glowObj + currentGlowIndex * 0x38 + 0x14, 1.f);
                writeMem<bool>(glowObj + currentGlowIndex * 0x38 + 0x28, true);
                writeMem<bool>(glowObj + currentGlowIndex * 0x38 + 0x29, false);
            }
            else // если игрок тиммейт
            {
                // делаем его обводку синим
                writeMem<float>(glowObj + currentGlowIndex * 0x38 + 0x8, 1.f); // red
                writeMem<float>(glowObj + currentGlowIndex * 0x38 + 0xC, 1.f); // green
                writeMem<float>(glowObj + currentGlowIndex * 0x38 + 0x10, 1.f); // blue
                writeMem<float>(glowObj + currentGlowIndex * 0x38 + 0x14, 1.f);
                writeMem<bool>(glowObj + currentGlowIndex * 0x38 + 0x28, true);
                writeMem<bool>(glowObj + currentGlowIndex * 0x38 + 0x29, false);
            }
0x8, 0xC, 0x10, 0x14, 0x28, 0x29
А нет все работает сорри, спасибо большое!
 
Начинающий
Статус
Оффлайн
Регистрация
10 Мар 2020
Сообщения
45
Реакции[?]
3
Поинты[?]
0
а если у вас структура то Meme.Write<GlowStryct>(glowArray + (GlowIndex * 0x38) + 0x8, Glow);
 
Сверху Снизу