Всем ку,сегодня научу вас делать свой первый екстернал чит для кс го.Делать мы будем именно WallHack.Я постараюсь расписать все максимально понятно и по шагам, чтобы вы поняли как что работает. 1. Создаем простой C++ проект в Visual Studio. 2. Создаем файл main.cpp, здесь и будет весь наш код. 3. Пишем в начало файла следующий код: #include <iostream> #include <Windows.h> #include <TlHelp32.h> #include <thread> Code #include <iostream> #include <Windows.h> #include <TlHelp32.h> #include <thread> Здесь мы настроили нужные нам библиотеки для работы кода. 4.Теперь нам нужно сделать переменные с оффсетами: const DWORD dwLocalPlayer = 0xCBD6A4; const DWORD dwEntityList = 0x4CCDCBC; const DWORD m_iTeamNum = 0xF4; const DWORD m_iGlowIndex = 0xA3F8; const DWORD dwGlowObjectManager = 0x520DAE0; Code const DWORD dwLocalPlayer = 0xCBD6A4; const DWORD dwEntityList = 0x4CCDCBC; const DWORD m_iTeamNum = 0xF4; const DWORD m_iGlowIndex = 0xA3F8; const DWORD dwGlowObjectManager = 0x520DAE0; 5. Сейчас мы определим переменные, с которыми мы будем работать на протяжении всего написания чита. HANDLE process; // непосредственно сам процесс CSGO DWORD clientBase; // это короче для работы с client_panorama.dll DWORD engineBase; // это короче для работы с engine.dll Code HANDLE process; // непосредственно сам процесс CSGO DWORD clientBase; // это короче для работы с client_panorama.dll DWORD engineBase; // это короче для работы с engine.dll 6.Начинаем писать собственно наш чит: bool wh = false; Code bool wh = false; (bool) нам нужен для того что бы определить статус функций 7. Ну теперь нам нужно сделать так что бы наш чит читал память 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); } Code 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); } 8. Теперь создадим входную точку,а то есть int main 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_panorama.dll"); // ищем клиент кс го Sleep(50); } while (!clientBase); do { engineBase = getModuleBaseAddress(pid, "engine.dll"); // ищем движок кс го Sleep(50); } while (!engineBase); } Code 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_panorama.dll"); // ищем клиент кс го Sleep(50); } while (!clientBase); do { engineBase = getModuleBaseAddress(pid, "engine.dll"); // ищем движок кс го Sleep(50); } while (!engineBase); } 9. Теперь мы сделаем WallHack void wallhack() { while (true) // создаем бесконечный цикл { Sleep(10); // таймаут 10 мс, чтобы не грузить процессор под 100 if (!wallhack && !readMem<DWORD>(readMem<DWORD>(clientBase + dwLocalPlayer) + 0xED)) // если вх выключено или не удается прочитать память - выходим из цикла continue; DWORD glowObj = readMem<DWORD>(clientBase + dwGlowObjectManager); // создаем объект glowObj из модельки игрока DWORD myTeam = readMem<DWORD>(readMem<DWORD>(clientBase + dwLocalPlayer) + m_iTeamNum); // создаем объект тиммейтов for (int x = 0; x < 32; 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) // если игрок не тиммейт { // делаем его обводку красным writeMem<float>(glowObj + currentGlowIndex * 0x38 + 0x4, 255); // red writeMem<float>(glowObj + currentGlowIndex * 0x38 + 0x8, 0); // green writeMem<float>(glowObj + currentGlowIndex * 0x38 + 0xC, 0); // blue writeMem<float>(glowObj + currentGlowIndex * 0x38 + 0x10, 255); writeMem<bool>(glowObj + currentGlowIndex * 0x38 + 0x24, true); writeMem<bool>(glowObj + currentGlowIndex * 0x38 + 0x25, false); } else // если игрок тиммейт { // делаем его обводку синим writeMem<float>(glowObj + currentGlowIndex * 0x38 + 0x4, 0); // red writeMem<float>(glowObj + currentGlowIndex * 0x38 + 0x8, 0); // green writeMem<float>(glowObj + currentGlowIndex * 0x38 + 0xC, 255); // blue writeMem<float>(glowObj + currentGlowIndex * 0x38 + 0x10, 255); writeMem<bool>(glowObj + currentGlowIndex * 0x38 + 0x24, true); writeMem<bool>(glowObj + currentGlowIndex * 0x38 + 0x25, false); } } } } Code void wallhack() { while (true) // создаем бесконечный цикл { Sleep(10); // таймаут 10 мс, чтобы не грузить процессор под 100 if (!wallhack && !readMem<DWORD>(readMem<DWORD>(clientBase + dwLocalPlayer) + 0xED)) // если вх выключено или не удается прочитать память - выходим из цикла continue; DWORD glowObj = readMem<DWORD>(clientBase + dwGlowObjectManager); // создаем объект glowObj из модельки игрока DWORD myTeam = readMem<DWORD>(readMem<DWORD>(clientBase + dwLocalPlayer) + m_iTeamNum); // создаем объект тиммейтов for (int x = 0; x < 32; 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) // если игрок не тиммейт { // делаем его обводку красным writeMem<float>(glowObj + currentGlowIndex * 0x38 + 0x4, 255); // red writeMem<float>(glowObj + currentGlowIndex * 0x38 + 0x8, 0); // green writeMem<float>(glowObj + currentGlowIndex * 0x38 + 0xC, 0); // blue writeMem<float>(glowObj + currentGlowIndex * 0x38 + 0x10, 255); writeMem<bool>(glowObj + currentGlowIndex * 0x38 + 0x24, true); writeMem<bool>(glowObj + currentGlowIndex * 0x38 + 0x25, false); } else // если игрок тиммейт { // делаем его обводку синим writeMem<float>(glowObj + currentGlowIndex * 0x38 + 0x4, 0); // red writeMem<float>(glowObj + currentGlowIndex * 0x38 + 0x8, 0); // green writeMem<float>(glowObj + currentGlowIndex * 0x38 + 0xC, 255); // blue writeMem<float>(glowObj + currentGlowIndex * 0x38 + 0x10, 255); writeMem<bool>(glowObj + currentGlowIndex * 0x38 + 0x24, true); writeMem<bool>(glowObj + currentGlowIndex * 0x38 + 0x25, false); } } } } 10.Для того что бы вызывать наш метод нам нужно это: std::thread whThread(wallhack) Code std::thread whThread(wallhack) После чего создаём цикл: while(true) { if (GetAsyncKeyState(VK_F9)) // если нажали f9 { wh = !wh; // заменяем значение переменной на противоположное if (wh) std::cout("wh: on\n"); // если wallhack - true, то пишем, что вх включен else std::cout("wh: off\n"); // иначе пишем, что вх выключен Sleep(100); // таймаут, чтобы сбросить нагрузку } } Code while(true) { if (GetAsyncKeyState(VK_F9)) // если нажали f9 { wh = !wh; // заменяем значение переменной на противоположное if (wh) std::cout("wh: on\n"); // если wallhack - true, то пишем, что вх включен else std::cout("wh: off\n"); // иначе пишем, что вх выключен Sleep(100); // таймаут, чтобы сбросить нагрузку } } Поздравляю вы написали свой первый чит! Если будут вопросы пишите в лс! Хотите научу делать ваcBunnyHop?
нищийпосути, да потратил кучу времени на это The post was merged to previous Jan 23, 2020 Спасибо The post was merged to previous Jan 23, 2020 нищийпосути, обещаю что про бани хоп такого не будет
Лися_неактив209035, по крайне мере не должен The post was merged to previous Jan 23, 2020 Лися_неактив209035, детект будет только в том случае если он будет в базе Valve если я не ошибаюсь то это так работает.
Знаешь почему твоя тема ничему не учит? Потому что ты учишь людей пасткодингу. Мол вот это крч оффсет, его сюда ставишь и всё, ты написал чит. Говори людям теорию, как найти оффсет, что делать если он обфусифицирован, как работает аим, как найти разницу в углах, что такое паттерны, динамичесий поиск оффсетов. The post was merged to previous Jan 23, 2020 В базе валв?:peka: External то? Он тупо читает и пишет память игры. Ничего более
понимаю, а по факту, хуй что объяснил, учит пасте, и просто спиздил код из других мануалов, и это мне еще лень оффсеты чекать, не удивлюсь если они старые, тупо блять дебилы ради репы хуйню творят. The post was merged to previous Jan 23, 2020 2.4. Выпрашивание симпатий запрещено. Аналогично запрещены намёки на то, чтобы пользователь поставил симпатию (симпатия увеличивает шанс, ставите симпы - даю аккаунты и т.д.). даун блять
Есть парочка вопросов: 1. Статья спизженная? 2. Смысл статьи если ты ничего не объяснил, а просто загрузил код с минимальным количеством информации(надпись «теперь мы сделаем wallhack не помогает, ты не потрудился объяснить как это все работает) Статья на 6/10 максимум
ketch_inactive2790559, посмотрел твой оффтопик реально годно!И по поводу копипаста,смотри на этом форуме этого не было,а всё что за пределами этого форума это не копипаст:) Конечно извиняюсь за это но в следующий раз сделаю всё понятно и расскажу о каждой команде,что и зачем она нужна. The post was merged to previous Jan 23, 2020 KaByH_Alive, понимаю следущий гайд сделаю более понятный и расскажу о до всём.
То, что находится за пределами на форуме не копипаст? Желаю закончить тебе 1 класс без колов... Копипаст = скопированная тема откуда-либо, не имеет значения, была она на этом форуме или нет.
The post was merged to previous Mar 5, 2020 И прекольно было бы ролик на Youtube без исходного кода. В слух преятний и проще осазновать The post was merged to previous Mar 5, 2020 Ругается на mEntry