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

Гайд BunnyHop для CS:GO

Лучшие приватные читы
Участник
Участник
Статус
Оффлайн
Регистрация
23 Фев 2018
Сообщения
633
Реакции
187
Буду писать все по порядку. Если понадобятся объяснения чего-либо, то пишите в комменты. Отмечу, что это основа. Это не полноценно готовый bhop, его нужно доработать под сегодняшние реалии.

1. Все начинается с подключения необходимых библиотек:
Код:
Expand Collapse Copy
#include <iostream>

#include <Windows.h>
#include <TlHelp32.h>
[B]
2. Добавляем "горячую клавишу":
Код:
Expand Collapse Copy
#define BHOP_KEY 'C'
3. Создаем необходимые модули и класс Дебаггер:
Код:
Expand Collapse Copy
struct module_t
{
    DWORD dwBase, dwSize;
};

// дебаггер

class CDebugger
{
private:
    DWORD dwPid;
    HANDLE hProcess;
public:
    bool attach(char* szProcess)
    {
        HANDLE handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
        PROCESSENTRY32 entry;
        entry.dwSize = sizeof(entry);
        do {
            if (!strcmp(entry.szExeFile, szProcess))
            {
                dwPid = entry.th32ProcessID;
                CloseHandle(handle);
                hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, dwPid);
                return true;
            }
        } while (Process32Next(handle, &entry));
        return false;
    }
    module_t GetModule(char* szModule)
    {
        HANDLE handle = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, NULL);
        MODULEENTRY32 entry;
        entry.dwSize = sizeof(entry);
        do {
            if (!strcmp(entry.szModule, szModule))
            {
                dwPid = entry.th32ProcessID;
                CloseHandle(handle);
                hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, dwPid);
                return { (DWORD)entry.hModule, entry.modBaseSize };
            }
        } while (Module32Next(handle, &entry));
        return{ (DWORD)false, false };
    }

    template<typename T>
    T ReadMemory(DWORD Address)
    {
        T read;
        ReadProcessMemory(hProcess, Address, &read, sizeof(T), 0);
    }
    template<typename T>
    void WriteMemory(DWORD Address, T value)
    {
        WriteProcessMemory(hProcess, Address, &val, sizeof(T), 0);
    }
};
4. Пишем оффсеты(можно найти дампер или где-то на форуме):
Код:
Expand Collapse Copy
// оффсеты

DWORD dwLocalPlayer = 0xA9948C;
DWORD dwJump = 0x4AD0374;
DWORD dwFlags = 0x100;

CDebugger debugger;
module_t moduleClient;
5. Пишем модуль получения клиента(client.dll):
Код:
Expand Collapse Copy
module_t* GetModuleClient()
{
    if (!moduleClient.dwBase && !moduleClient.dwSize) {
        moduleClient = debugger.GetModule("client.dll");
    }
    return &moduleClient;
}
6. Создаем класс самого bhop'а:
Код:
Expand Collapse Copy
class CBunnyhop
{
public:
    static unsigned long_stdcall ThreadRoutine(void*)
     {
        while (true)
        {
            DWORD dwMe = debugger.Readmemory<DWORD>(GetModuleClient()->dwBase + dwLocalPlayer);
            int CanJump = debugger.ReadMemory<DWORD>(dwMe + dwFlags);
            if ((GetAsyncKeyState(BHOP_KEY) & 0x8000) && (CanJump & 0x1 == true)) {
                debugger.WriteMemory<int>(GetModuleClient()->dwBase + dwJump, 5); // прыгаем в игре
                Sleep(50);
                debugger.WriteMemory<int>(GetModuleClient()->dwBase + dwJump, 4);
            }
        }
    }
};
7. Пишем главную функцию int main:

Код:
Expand Collapse Copy
int main()
{
    while (!debugger.attach("csgo.exe")) { // вливаемся в процесс csgo.exe
        Sleep(100);
    }
    CreateThread(0, 0, &CBunnyhop::ThreadRoutine, 0, 0, 0);
    while (1) {
        Sleep(100);
    }
}
Вся программа:
Код:
Expand Collapse Copy
[/B]
// библиотеки
#include <iostream>
#include <Windows.h>
#include <TlHelp32.h>

#define BHOP_KEY 'C' // нажать, чтобы начать прыгать

struct module_t
{
    DWORD dwBase, dwSize;
};

// дебаггер

class CDebugger
{
private:
    DWORD dwPid;
    HANDLE hProcess;
public:
    bool attach(char* szProcess)
    {
        HANDLE handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
        PROCESSENTRY32 entry;
        entry.dwSize = sizeof(entry);
        do {
            if (!strcmp(entry.szExeFile, szProcess))
            {
                dwPid = entry.th32ProcessID;
                CloseHandle(handle);
                hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, dwPid);
                return true;
            }
        } while (Process32Next(handle, &entry));
        return false;
    }
    module_t GetModule(char* szModule)
    {
        HANDLE handle = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, NULL);
        MODULEENTRY32 entry;
        entry.dwSize = sizeof(entry);
        do {
            if (!strcmp(entry.szModule, szModule))
            {
                dwPid = entry.th32ProcessID;
                CloseHandle(handle);
                hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, dwPid);
                return { (DWORD)entry.hModule, entry.modBaseSize };
            }
        } while (Module32Next(handle, &entry));
        return{ (DWORD)false, false };
    }

    template<typename T>
    T ReadMemory(DWORD Address)
    {
        T read;
        ReadProcessMemory(hProcess, Address, &read, sizeof(T), 0);
    }
    template<typename T>
    void WriteMemory(DWORD Address, T value)
    {
        WriteProcessMemory(hProcess, Address, &val, sizeof(T), 0);
    }
};

// оффсеты

DWORD dwLocalPlayer = 0xA9948C;
DWORD dwJump = 0x4AD0374;
DWORD dwFlags = 0x100;

CDebugger debugger;
module_t moduleClient;

// client.dll в памяти
module_t* GetModuleClient()
{
    if (!moduleClient.dwBase && !moduleClient.dwSize) {
        moduleClient = debugger.GetModule("client.dll");
    }
    return &moduleClient;
}

class CBunnyhop
{
public:
    static unsigned long_stdcall ThreadRoutine(void*)
     {
        while (true)
        {
            DWORD dwMe = debugger.Readmemory<DWORD>(GetModuleClient()->dwBase + dwLocalPlayer);
            int CanJump = debugger.ReadMemory<DWORD>(dwMe + dwFlags);
            if ((GetAsyncKeyState(BHOP_KEY) & 0x8000) && (CanJump & 0x1 == true)) {
                debugger.WriteMemory<int>(GetModuleClient()->dwBase + dwJump, 5); // прыгаем в игре
                Sleep(50);
                debugger.WriteMemory<int>(GetModuleClient()->dwBase + dwJump, 4);
            }
        }
    }
};

int main()
{
    while (!debugger.attach("csgo.exe")) { // вливаемся в процесс csgo.exe
        Sleep(100);
    }
    CreateThread(0, 0, &CBunnyhop::ThreadRoutine, 0, 0, 0);
    while (1) {
        Sleep(100);
    }
}
 
Мммм щас бы пастить внешние сурсы 2к13 года на впм и рпм.
Это не актуальный гайд. Зачем он? адреса то хоть обновленные?
 
Мммм щас бы пастить внешние сурсы 2к13 года на впм и рпм.
Это не актуальный гайд. Зачем он? адреса то хоть обновленные?
лол а может тебе еще ммап инжектор написать? это не 2к13 сурсы, а оффсеты, как сказано выше, идешь и дампишь.
 
а зачем так заморачиваться, не легче как спинер тупо обрезать функции в индиго ,оставив вкладку миск??
 
лол а может тебе еще ммап инжектор написать? это не 2к13 сурсы, а оффсеты, как сказано выше, идешь и дампишь.
Соре конечно за столь грубое высказывание. Но ты понял что ты щас высрал? По сути ты себя сам запалил что src не твой, а код на столько примитивный что явно кажется что делал его не ты, тем более что адреса не пашут если.
Зачем искать адреса в ручную если есть юц, а там специальный раздел с офсетами. Мы же находимся на форуме пастеров, тут мало кто делает что то сам.
И такой вопрос зачем мап инжектор для "твоего" сурса, если это внешнее приложение exe.....
 
Соре конечно за столь грубое высказывание. Но ты понял что ты щас высрал? По сути ты себя сам запалил что src не твой, а код на столько примитивный что явно кажется что делал его не ты, тем более что адреса не пашут если.
Зачем искать адреса в ручную если есть юц, а там специальный раздел с офсетами. Мы же находимся на форуме пастеров, тут мало кто делает что то сам.
И такой вопрос зачем мап инжектор для "твоего" сурса, если это внешнее приложение exe.....
я просто сказал насчет ммапа, а у нас и на югейме есть оффсеты.
 
Module32First, Process32First - уже не актуальны что ли? В функции с бхопом желательно установить задержку после итерации цикла (достаточно в 5 или меньше мс.).
Зачем каждый раз вызывать функцию GetModuleClient()?
module_t* client = GetModuleClient(); //религия не позволяет?)
Просто вызов функции жрет время, да мало, но когда вызываешь много (например, в бесконечном цикле), то и суммарное время вызова функции стремится к бесконечности. Модуль ни куда не денется.
 
Module32First, Process32First - уже не актуальны что ли? В функции с бхопом желательно установить задержку после итерации цикла (достаточно в 5 или меньше мс.).
Зачем каждый раз вызывать функцию GetModuleClient()?
module_t* client = GetModuleClient(); //религия не позволяет?)
Просто вызов функции жрет время, да мало, но когда вызываешь много (например, в бесконечном цикле), то и суммарное время вызова функции стремится к бесконечности. Модуль ни куда не денется.
можно, но переписывать лень)
 
Module32First, Process32First - уже не актуальны что ли? В функции с бхопом желательно установить задержку после итерации цикла (достаточно в 5 или меньше мс.).
Зачем каждый раз вызывать функцию GetModuleClient()?
module_t* client = GetModuleClient(); //религия не позволяет?)
Просто вызов функции жрет время, да мало, но когда вызываешь много (например, в бесконечном цикле), то и суммарное время вызова функции стремится к бесконечности. Модуль ни куда не денется.
можно, но переписывать лень)
Вообще не понятно зачем для обычного бх делать отдельный поток можно было прям в мэйне while сделать да и сё
Еще лучше исключить из бхопа запись и заменить на эмуляцию нажатия клавиши ибо приложения которые только читают более легитны
 
Кстати, код не сработает без одной строки в функции Readmemory, догадаетесь какой?)
Return?

Не проще сделать более нормальную систему чтения памяти?

Я сижу на интерналах мне то пихуй, но когда я сидел на экстерналах то у меня был совершенно другой код, типа чтение памяти я пастанул с другого экстернала ибо сделано оно было с умом.
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Код:
Expand Collapse Copy
typedef struct _OFFSETS{
DWORD dLocal;
DWORD flags;
DWORD flags;
DWORD Client;
} OFFSETS, *POFFSETS;
OFFSETS g_Offset;
void Setup(POFFSETS o){
o->dLocal = ;
o->flags = ;
o->jump = ;
o->Client = (DWORD)GetModuleHandleA("client.dll");
}

Setup(&g_Offset);
 
Назад
Сверху Снизу