Лучшие приватные читы
-
Автор темы
- #1
Буду писать все по порядку. Если понадобятся объяснения чего-либо, то пишите в комменты. Отмечу, что это основа. Это не полноценно готовый bhop, его нужно доработать под сегодняшние реалии.
1. Все начинается с подключения необходимых библиотек:
2. Добавляем "горячую клавишу":
3. Создаем необходимые модули и класс Дебаггер:
4. Пишем оффсеты(можно найти дампер или где-то на форуме):
5. Пишем модуль получения клиента(client.dll):
6. Создаем класс самого bhop'а:
7. Пишем главную функцию int main:
Вся программа:
1. Все начинается с подключения необходимых библиотек:
Код:
#include <iostream>
#include <Windows.h>
#include <TlHelp32.h>
[B]
Код:
#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;
Код:
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);
}
}
Код:
[/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);
}
}