Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

Гайд Написание External чита с нуля. Часть 2 - BHOP и нормальный EntityList

  • Автор темы Автор темы xnxkzeu
  • Дата начала Дата начала
Эксперт
Эксперт
Статус
Оффлайн
Регистрация
31 Авг 2018
Сообщения
1,806
Реакции
1,074
Без лишних слов продолжаем писать код, набросал маленький план, что мы сегодня сделаем:
Сделаем класс для ClientState, классы для каждого игрока(ведь гораздо удобнее использовать всем привычные классы).
Итак, создаем файл engine.hpp и наполняем его следующей начинкой:

Код:
Expand Collapse Copy
#pragma once

#include "vector.hpp"

class Engine
{
public:
    int GetLocalPlayer(); // Нужно, чтобы получить индекс нашего игрока
    bool IsInGame(); // Проверка, находимся ли мы в игре

    Vector GetViewAngles(); // Зачатки аимбота: получаем углы нашего игрока
    void SetViewAngles(const Vector& viewangles); // Зачатки аимбота: устанавливаем углы нашего игрока
};

extern Engine* g_pEngine;

Вроде бы все хорошо, но ругается на отсутствие vector.hpp, создаем его и заполняем этим:
Код:
Expand Collapse Copy
#pragma once

#include <cmath.h>

class Vector
{
public:
    Vector() { x = y = z = NULL };

    Vector(float X, float Y, float Z)
    {
        x = X;
        y = Y;
        z = Z;
    }

    float Length() const // В будущем понадобится
    {
        return sqrt(x*x + y * y + z * z);
    }

    float LengthSqr() const // В будущем понадобится
    {
        return (x*x + y * y + z * z);
    }

    float DistTo(const Vector &vOther) const // В будущем понадобится
    {
        Vector delta;

        delta.x = x - vOther.x;
        delta.y = y - vOther.y;
        delta.z = z - vOther.z;

        return delta.Length();
    }

    float DistToSqr(const Vector &vOther) const // В будущем понадобится
    {
        Vector delta;

        delta.x = x - vOther.x;
        delta.y = y - vOther.y;
        delta.z = z - vOther.z;

        return delta.LengthSqr();
    }

    float x, y, z;
};

теперь можем вернуться к классу, создаем engine.cpp и наполняем его:
Код:
Expand Collapse Copy
#include "engine.hpp"

Engine* g_pEngine = new Engine();

bool Engine::IsInGame()
{
    if (!g_Offsets->ClientState)
        return false;
    return (process->Read<int>(g_Offsets->ClientState + 0x108) == (int)SIGNONSTATE_FULL);
}

int Engine::GetLocalPlayer()
{
    if (!g_Offsets->ClientState)
        return -1;
    return process->Read<int>(g_Offsets->ClientState + 0x180);
}

Vector Engine::GetViewAngles()
{
    if (!g_Offsets->ClientState)
        return Vector();
    return process->Read<Vector>(g_Offsets->ClientState + 0x4CE0);
}

void Engine::SetViewAngles(const Vector& viewangles)
{
    if (!g_Offsets->ClientState)
        return;
    process->Write<Vector>(g_Offsets->ClientState + 0x4CE0, viewangles);
}

итак теперь идем в globals.hpp и добавляем
Код:
Expand Collapse Copy
extern uintptr_t    clientstate;
в globals.cpp то же самое:
Код:
Expand Collapse Copy
uintptr_t    clientstate        = NULL;

итак теперь все что нужно мы добавили, идем в main.cpp и добавляем две строки
Код:
Expand Collapse Copy
globals::engineModule    = Mem->GetModule(globals::processID, L"engine.dll");
globals::clientstate    = Mem->Read<uintptr_t>(globals::engineModule + Offsets::dwClientState);
За что отвечают эти две функции(GetModule и Read) мы уже разобрали, так что не будем на них останавливаться идем дальше и удаляем строки отвечающие за получение localplayer'a, надеюсь с этим у вас проблем не будет
создадим наконец файл entity.hpp и пихаем следующее:

Код:
Expand Collapse Copy
#pragma once

#include <Windows.h>
#include <iostream>

class CPlayer
{
public:
    CPlayer();

    void Update(BYTE PlayerIndex); // Обновляем данные об игроке
    uintptr_t GetPointer(); // Получаем указатель на персонажа
    int GetTeam(); // Получаем команду персонажа
    int GetHealth(); // Получаем здоровье персонажа
    int GetGlowIndex(); // Получаем GlowIndex персонажа
    int GetFlags(); // Получаем флаги игрока

    bool IsValid(); // Проверка на валидность игрока
private:
    uintptr_t pointer; // Здесь хранится указатель на персонажа
    int health; // Здесь хранится здоровье
    int team; // Здесь хранится команда
    int glowIndex; // Здесь хранится GlowIndex
    int flags; // Здесь хранятся флаги игрока
};

extern CPlayer PlayerList[64]; // Список всех энтити
extern CPlayer LocalPlayer;

после этого создаем entity.cpp и заполняем следующим:

Код:
Expand Collapse Copy
#include "entity.hpp"

CPlayer PlayerList[65];
CPlayer LocalPlayer;

CPlayer::CPlayer()
{
    // Обнуляем все переменные
    pointer = NULL;
    health = NULL;
    team = NULL;
    glowIndex = NULL;
    flags = NULL;
}

void CPlayer::Update(BYTE PlayerIndex)
{
    // Обновляем данные об игроке
    pointer = Mem->Read<uintptr_t>(globals::clientModule + Offsets::dwEntityList + PlayerIndex * 0x10);

    if (!pointer)
        return;

    team = Mem->Read<int>(pointer + Netvars::m_iTeamNum); // Получаем команду игрока
    health = Mem->Read<int>(pointer + Netvars::m_iHealth); // Получаем здоровье игрока
    glowIndex = Mem->Read<int>(pointer + Netvars::m_iGlowIndex); // Получаем GlowIndex игрока
    flags = Mem->Read<int>(pointer + Netvars::m_fFlags); // Получаем флаги игрока
}

uintptr_t CPlayer::GetPointer()
{
    return pointer; // Возвращаем указатель
}

int CPlayer::GetTeam()
{
    return team; // Возвращаем команду
}

int CPlayer::GetHealth()
{
    return health; // Возвращаем здоровье
}

int CPlayer::GetGlowIndex()
{
    return glowIndex; // Возвращаем GlowIndex
}

int CPlayer::GetFlags()
{
    return flags; // Возвращаем флаги
}

bool CPlayer::IsValid()
{
    return pointer != NULL; // Проверка на валидность игрока
}

теперь у нас есть нормальный класс для энтити и мы можем отказаться от многой бесполезнейшей херни ибо у нас теперь класс.
Помните бесконечный цикл в функции main? Давайте видоизменим его и добавим обновление информации об игроках:
Код:
Expand Collapse Copy
    while (!GetAsyncKeyState(VK_DELETE))
    {
        LocalPlayer.Update(g_pEngine->GetLocalPlayer());
        for (BYTE PlayerIndex = 0; PlayerIndex < 64; PlayerIndex++)
        {
            PlayerList[PlayerIndex].Update(PlayerIndex);
        }
        std::this_thread::sleep_for(1ms);
    }
идем в функцию GlowThread и добавляем в самый верх бесконечного цикла
Код:
Expand Collapse Copy
if (!g_pEngine->IsInGame())
    continue;
в цикле на каждого игрока убираем все нахуй и пишем код заного(а хули вы хотите я только так и делаю)
Код:
Expand Collapse Copy
if (!PlayerList[i].IsValid()) // Проверяем игрока на валидность
    continue;

if (PlayerList[i].GetPointer() == LocalPlayer.GetPointer()) // Не применяем Glow на себя
    continue;

int glowIndex = PlayerList[i].GetGlowIndex(); // Получаем glowIndex

GlowStruct Glow;
Glow = Mem->Read<GlowStruct>(glowObject + (glowIndex * 0x38));

if (LocalPlayer.GetTeam() != PlayerList[i].GetTeam()) // Сравниваем команды
{
    Glow.red = 1.f;
    Glow.green = 0.f;
    Glow.blue = 0.f;
    Glow.alpha = 1.f;
}
else
{
    Glow.red = 0.f;
    Glow.green = 0.f;
    Glow.blue = 1.f;
    Glow.alpha = 1.f;
}
// Ну и здесь все как было так и остается!(стабильность залог успеха111!!1)

Glow.renderWhenOccluded = true;
Glow.renderWhenUnoccluded = false;
Mem->Write<GlowStruct>(glowObject + (glowIndex * 0x38), Glow);

Теперь создадим enums.hpp где будут храниться все перечисления и отправляем туда следующее:
Код:
Expand Collapse Copy
enum SIGNONSTATE // Перечисление всех состояний, нужно для проверки в игре мы или нет
{

    SIGNONSTATE_NONE = 0,
    SIGNONSTATE_CHALLENGE = 1,
    SIGNONSTATE_CONNECTED = 2,
    SIGNONSTATE_NEW = 3,
    SIGNONSTATE_PRESPAWN = 4,
    SIGNONSTATE_SPAWN = 5,
    SIGNONSTATE_FULL = 6,
    SIGNONSTATE_CHANGELEVEL = 7
};

enum FLAGS // Флаги ентити, нужно нам для проверки, на земле ли игрок
{
    FL_ONGROUND = (1 << 0),
    FL_DUCKING = (1 << 1),
    FL_WATERJUMP = (1 << 2),
    FL_ONTRAIN = (1 << 3),
    FL_INRAIN = (1 << 4),
    FL_FROZEN = (1 << 5),
    FL_ATCONTROLS = (1 << 6),
    FL_CLIENT = (1 << 7),
    FL_FAKECLIENT = (1 << 8),
    FL_INWATER = (1 << 9)
};

идем в main.cpp и создаем функцию BHopThread
Код:
Expand Collapse Copy
void BHopThread()
{
    while (!GetAsyncKeyState(VK_DELETE))
    {

        if (!g_pEngine->IsInGame()) // Проверяем в игре ли мы
            continue;

        if (GetAsyncKeyState(VK_SPACE)) // Проверяем нажатие пробела
        {
            if (LocalPlayer.GetFlags() & FL_ONGROUND) // Проверяем на земле ли мы
                Mem->Write<int>(globals::clientModule + Offsets::dwForceJump, 5); // Заставляем персонажа прыгнуть
            else // Если же не на земле
                Mem->Write<int>(globals::clientModule + Offsets::dwForceJump, 4); // Разрешаем персонажу не прыгать
        }
        std::this_thread::sleep_for(1ms); // Ждем 1 мс чтобы продолжить цикл
    }
}
и просто запускаем поток так же как и поток с GlowESP
Код:
Expand Collapse Copy
std::thread tBHop(BHopThread);
tBHop.detach();
На этом все, по итогу мы получили нормальный entity и clientstate(engine) класс, бхоп, следующий урок скорее всего будет по триггерботу, посмотрим.
Если есть какие-то вопросы - задавайте, постараюсь ответить
 
Последнее редактирование:
Не лучшая конструкция BHOP'a, но гайд заслуживает уважения. Если в воздухе при прыжке отпустить и обратно зажать пробел, то прыгать не будет) Это не принципиально, но все же.
Продолжай дальше пилить гайды)
 
Не лучшая конструкция BHOP'a, но гайд заслуживает уважения. Если в воздухе при прыжке отпустить и обратно зажать пробел, то прыгать не будет) Это не принципиально, но все же.
Продолжай дальше пилить гайды)
Позже проверю, если это так - пофикшу
 
Можно например триггер спастить из aaahbase, но он там вроде говно
Cимпу забыл
 
Последнее редактирование:
Не лучшая конструкция BHOP'a, но гайд заслуживает уважения. Если в воздухе при прыжке отпустить и обратно зажать пробел, то прыгать не будет) Это не принципиально, но все же.
Продолжай дальше пилить гайды)
Пофиксил
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Нихуя. Ща все тупа пиздец кодерами станут удали тему
 
Можно чисто код на бхоп и как за протектить или что то сделать что бы не банило + где искать новые офсеты именно для бхопа P.s хочу п росто как зухн сделать чит ,потому что если его юзают 100 человек то меньше шанс детекта? И для чего нужен Clientstate и что за классы для него. И где это всё вообще вписывать )
 
Последнее редактирование:
Можно чисто код на бхоп и как за протектить или что то сделать что бы не банило + где искать новые офсеты именно для бхопа P.s хочу п росто как зухн сделать чит ,потому что если его юзают 100 человек то меньше шанс детекта
нельзя, он сделал не для пастеров.
 
Стоит ли писать продолжение, не вижу никакого актива на теме и не знаю, стоит ли продолжать?
@ziho я считаю стоит! Так как, ты развиваешь форум, а в отдельности раздел "Создание читов для CS:GO" не спасченными и интересными темами) Делай конечно)))
 
так это типо гайд не? и где вообще всё это прописывать + что нужно сделать что бы не детект?
Для вас таких людей, есть 1 часть..... (https://yougame.biz/threads/65692/unread)
А чисто BHop:

Пожалуйста, зарегистрируйтесь или авторизуйтесь, чтобы увидеть содержимое.

 
Стоит ли писать продолжение, не вижу никакого актива на теме и не знаю, стоит ли продолжать?
Продолжай. Действительно хороший гайд, код понятен, грамотное оформление. Вообщем молодец.
 
Для вас таких людей, есть 1 часть..... (https://yougame.biz/threads/65692/unread)
А чисто BHop:
Скрытое содержимое
ты моришь да? там рил 60 дней или ты просто напаисал так?
 
ты моришь да? там рил 60 дней или ты просто напаисал так?
Реально 60 дней и там чисто код бхопа)
А про что там написано и куда это вставлять ссылка на первую часть....
 
Реально 60 дней и там чисто код бхопа)
А про что там написано и куда это вставлять ссылка на первую часть....
Что такое вообще EntityList ClientState и каковы шансы на отлёт?
 
у меня вылезает 90 ошибок что мне делать?
Учить Язык... learncpp.com в помощь, но английского ты не знаешь, значит не поможет....
Просто спастив с темы тебе это ничего не даст.. Если ты не понимаешь ничего, какая строчка за что отвечает, тебе рано этим заниматься(Наверное)
А вообще эта тема создана, чтобы люди научились не пастить, а хотябы на минимальном уровне кодить... Понимать на начальных этапах Game Hacking...
А по теме: ОТКУДА МЫ МОЖЕМ УЗНАТЬ КАКИЕ ОШИБКИ У ТЕБЯ И ЧТО ТЕБЕ ДЕЛАТЬ?????
 
Назад
Сверху Снизу