-
Автор темы
- #1
Компилирую код на 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); // таймаут, чтобы сбросить нагрузку
}
}
}