Всем привет,я решил сделать гайд по написанию BHOP чита для нашей любимой игры CS:GO(помойки) Ну для начала нам нужно: 1)Скачать Micrasoft Visual Studio 2019 (COMUNNITI) - https://visualstudio.microsoft.com/ru/vs/ (оф.сайт) 2)После чего мы открываем Micrasoft Visual Studio и создаём проект на языке C++ 3)Выбираем "Консольное приложение" После чего у вас будет такое окно 4)Тут вы вписываете название вашего проекта я напишу bhop1312 После этого окна у вас откроется рабочая среда C++ 5)После чего удаляем bhop1312.cpp (либо же другой файл это зависитт от названия проекта) После удаления создаём файл main.cpp в той же папке. 6)Там выбираем "Файл C++ .cpp" Потом в открытом окне начнём первые шаги к написанию читу: 7)В начале мы впишем этот код: #include <iostream> #include <Windows.h> #include "processAttach.h" Код #include <iostream> #include <Windows.h> #include "processAttach.h" Только что мы настроили библиотеки для работы кода 8)Вписываем эту часть кода что бы он за дышал. using namespace std; Код using namespace std; Ну и начинается самое интересное: #pragma region Offest DWORD Client; DWORD dwLocaclPlayer = 0x(тут впишите новые оффсеты,ифну по ним найдите в гугле думаю не проблема) DWORD FFlags = 0x100; #pragma endregion struct Player_t { DWORD LocalPlayer; int Flag; void Reading() Код #pragma region Offest DWORD Client; DWORD dwLocaclPlayer = 0x(тут впишите новые оффсеты,ифну по ним найдите в гугле думаю не проблема) DWORD FFlags = 0x100; #pragma endregion struct Player_t { DWORD LocalPlayer; int Flag; void Reading() Тут мы настроили Offset Команда DWORD - это ассемблер 9)Пишем ту часть кода который будет читать память void Reading() { ReadProcessMemory(pGame, (DWORD*)(Client + dwLocalPlayer), &LocalPlayer, sizeof(DWORD), 0); ReadProcessMemory(pGame, (DWORD*)(LocalPlayer + FFlags), &Flag, sizeof(int), 0); } }playeR; Код void Reading() { ReadProcessMemory(pGame, (DWORD*)(Client + dwLocalPlayer), &LocalPlayer, sizeof(DWORD), 0); ReadProcessMemory(pGame, (DWORD*)(LocalPlayer + FFlags), &Flag, sizeof(int), 0); } }playeR; Мне кажется тут даже объяснять не чего тут и так всё понятно. 10)Создание цикла для BHOPa void bHop() { if (GetAsyncKeyState(0x20)) { if (playeR.Flag == 257 || playeR.Flag == 263) { keybd_event(MapVirtualKey(0x20, 0), 0x39 KEYEVENTF_EXTENDEDKEY, 0); keybd_event(MapVirtualKey(0x20, 0), 0x39 KEYEVENTF_KEYUP, 0); Sleep(1); } } } int main () { GetProcess("csgo.exe"); Client = GetModule("client.dll"); while (true) { playeR.Reading(); bHop(); Sleep(1) } return 0; } Код void bHop() { if (GetAsyncKeyState(0x20)) { if (playeR.Flag == 257 || playeR.Flag == 263) { keybd_event(MapVirtualKey(0x20, 0), 0x39 KEYEVENTF_EXTENDEDKEY, 0); keybd_event(MapVirtualKey(0x20, 0), 0x39 KEYEVENTF_KEYUP, 0); Sleep(1); } } } int main () { GetProcess("csgo.exe"); Client = GetModule("client.dll"); while (true) { playeR.Reading(); bHop(); Sleep(1) } return 0; } Всё больше мы не трогаем файл main.cpp про него мы можем забыть Сейчас мы начнём писать вторую часть BHOPa 11)Заходим в раздел И по такому же плану создаём файл с названием processAttach.h И при создании выбираем пункт "Файл заголовка .h" 1)Мы опять начинаем настраивать библиотеки #include <Windows.h> #include <iostream> #include <TlHelp32.h> Код #include <Windows.h> #include <iostream> #include <TlHelp32.h> 2)После пишем не очень важную часть если хотите можете её пропустить using std::cout; using std::endl; Код using std::cout; using std::endl; using std::cout - вывод текста using std::endl - написание текста с новой строки 3)После вписываем идентификаторы DWORD __pId; HANDLE pGame; Код DWORD __pId; HANDLE pGame; 4)Не знаю как описать эту часть программы тут заполняются пропуски,получаем список запущенных приложений на вашем компьютере,управление пакетами и тд. void GetProcess(char* Process) { PROCESSENTRY32 EntryP; EntryP.dwSize = sizeof(PROCESSENTRY32); HANDLE pSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS); while (Process32Next(pSnap, &EntryP)) { if (lstrcmp(EntryP.szExeFile, Process)); { CloseHandle(pSnap); __pId = EntryP.th32ProcessID; pGame = OpenProcess(PROCESS_ALL_ACCESS, false, __pId); } } CloseHandle(pSnap); cout << "Process not found!" << endl; system("pause"); exit(1); } Код void GetProcess(char* Process) { PROCESSENTRY32 EntryP; EntryP.dwSize = sizeof(PROCESSENTRY32); HANDLE pSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS); while (Process32Next(pSnap, &EntryP)) { if (lstrcmp(EntryP.szExeFile, Process)); { CloseHandle(pSnap); __pId = EntryP.th32ProcessID; pGame = OpenProcess(PROCESS_ALL_ACCESS, false, __pId); } } CloseHandle(pSnap); cout << "Process not found!" << endl; system("pause"); exit(1); } 5)Тут тоже будет сложно объяснить на простом языке так что просто ctrl+c ctrl+v (кому интересно могут почитать в гугле инфу) DWORD GetModule(LPCSTR Module) { MODULEENTRY32 EntryM; EntryM.dwSize = sizeof(MODULEENTRY32); HANDLE pSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, __pId); while (Module32Next(pSnap, &EntryM)); { if (lstrcmp(EntryM.szModule, )); { CloseHandle(pSnap); return } } CloseHandle(pSnap); cout << "Module not found!" << endl; system("pause"); exit(2); } Код DWORD GetModule(LPCSTR Module) { MODULEENTRY32 EntryM; EntryM.dwSize = sizeof(MODULEENTRY32); HANDLE pSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, __pId); while (Module32Next(pSnap, &EntryM)); { if (lstrcmp(EntryM.szModule, )); { CloseHandle(pSnap); return } } CloseHandle(pSnap); cout << "Module not found!" << endl; system("pause"); exit(2); } Поздравляю вы написали свой BunnyHop , а теперь его нужно запустить и протестить Нажимайте на Локальный отладчик Windows Для тех кто нихера не понял и пришёл за исходниками Вот файл main.cpp #include <iostream> #include <Windows.h> #include "processAttach.h" using namespace std; #pragma region Offest DWORD Client; DWORD dwLocaclPlayer = 0xA31504 DWORD FFlags = 0x100; #pragma endregion struct Player_t { DWORD LocalPlayer; int Flag; void Reading() { ReadProcessMemory(pGame, (DWORD*)(Client + dwLocalPlayer), &LocalPlayer, sizeof(DWORD), 0); ReadProcessMemory(pGame, (DWORD*)(LocalPlayer + FFlags), &Flag, sizeof(int), 0); } }playeR; void bHop() { if (GetAsyncKeyState(0x20)) { if (playeR.Flag == 257 || playeR.Flag == 263) { keybd_event(MapVirtualKey(0x20, 0), 0x39 KEYEVENTF_EXTENDEDKEY, 0); keybd_event(MapVirtualKey(0x20, 0), 0x39 KEYEVENTF_KEYUP, 0); Sleep(1); } } } int main () { GetProcess("csgo.exe"); Client = GetModule("client.dll"); while (true) { playeR.Reading(); bHop(); Sleep(1) } return 0; } Код #include <iostream> #include <Windows.h> #include "processAttach.h" using namespace std; #pragma region Offest DWORD Client; DWORD dwLocaclPlayer = 0xA31504 DWORD FFlags = 0x100; #pragma endregion struct Player_t { DWORD LocalPlayer; int Flag; void Reading() { ReadProcessMemory(pGame, (DWORD*)(Client + dwLocalPlayer), &LocalPlayer, sizeof(DWORD), 0); ReadProcessMemory(pGame, (DWORD*)(LocalPlayer + FFlags), &Flag, sizeof(int), 0); } }playeR; void bHop() { if (GetAsyncKeyState(0x20)) { if (playeR.Flag == 257 || playeR.Flag == 263) { keybd_event(MapVirtualKey(0x20, 0), 0x39 KEYEVENTF_EXTENDEDKEY, 0); keybd_event(MapVirtualKey(0x20, 0), 0x39 KEYEVENTF_KEYUP, 0); Sleep(1); } } } int main () { GetProcess("csgo.exe"); Client = GetModule("client.dll"); while (true) { playeR.Reading(); bHop(); Sleep(1) } return 0; } А вот processAttach.h #include <Windows.h> #include <iostream> #include <TlHelp32.h> using std::cout; using std::endl; DWORD __pId; HANDLE pGame; void GetProcess(char* Process) { PROCESSENTRY32 EntryP; EntryP.dwSize = sizeof(PROCESSENTRY32); HANDLE pSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS); while (Process32Next(pSnap, &EntryP)) { if (lstrcmp(EntryP.szExeFile, Process)); { CloseHandle(pSnap); __pId = EntryP.th32ProcessID; pGame = OpenProcess(PROCESS_ALL_ACCESS, false, __pId); } } CloseHandle(pSnap); cout << "Process not found!" << endl; system("pause"); exit(1); } DWORD GetModule(LPCSTR Module) { MODULEENTRY32 EntryM; EntryM.dwSize = sizeof(MODULEENTRY32); HANDLE pSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, __pId); while (Module32Next(pSnap, &EntryM)); { if (lstrcmp(EntryM.szModule, )); { CloseHandle(pSnap); return } } CloseHandle(pSnap); cout << "Module not found!" << endl; system("pause"); exit(2); } Код #include <Windows.h> #include <iostream> #include <TlHelp32.h> using std::cout; using std::endl; DWORD __pId; HANDLE pGame; void GetProcess(char* Process) { PROCESSENTRY32 EntryP; EntryP.dwSize = sizeof(PROCESSENTRY32); HANDLE pSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS); while (Process32Next(pSnap, &EntryP)) { if (lstrcmp(EntryP.szExeFile, Process)); { CloseHandle(pSnap); __pId = EntryP.th32ProcessID; pGame = OpenProcess(PROCESS_ALL_ACCESS, false, __pId); } } CloseHandle(pSnap); cout << "Process not found!" << endl; system("pause"); exit(1); } DWORD GetModule(LPCSTR Module) { MODULEENTRY32 EntryM; EntryM.dwSize = sizeof(MODULEENTRY32); HANDLE pSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, __pId); while (Module32Next(pSnap, &EntryM)); { if (lstrcmp(EntryM.szModule, )); { CloseHandle(pSnap); return } } CloseHandle(pSnap); cout << "Module not found!" << endl; system("pause"); exit(2); } Спасибо за внимание! ДЛЯ ТЕХ У КОГО ОСТАЛИСЬ ВОПРОСЫ ПО КОДУ В ЛС ФОРУМА ПИШИТЕ!
Forgoten_Lucifer, *~$Space:: Sleep 100 Loop { GetKeyState, SpaceState, Space, P If SpaceState = U break Sleep 1 Send, {Blind}{Space} }
Код можно сократить, начнём с того что эта тема спасчена с другого борда, а так же при каждой обнове кс придётся обновлять смещения, когда бы ты мог сделать это намного проще, посредством парсинга оффсетов из того же гитхаба (hazedumper).
Парсинга оффсетов . Там через сканирование памяти оффсеты нужно обновлять. И то не факт, что будет работать.
Загуглил бхоп для каэс, скачал, готово. А тут, скачал прогу, ещё что-то сделал, скопировал, вставил, скопировал, вставил, не работает, закрыл всё к хуям собачим и всёравно скачал бхоп с гугла.