Привет форумчанам, у меня тут возникла проблема с компиляцией
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);
}
}
}
};
В третьей строчке ругается на недостающую точку с запятой, хотя ее там быть и не должно.
Код не я пишу. Я пытаюсь разобраться как работаться с потоками/записывать/читать память в процессе.
Вот весь полный код программы
#include <iostream> #include <Windows.h> #include <TlHelp32.h> #define BHOP_KEY 'C' // нажать, чтобы начать прыгать
// 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); } }
Привет форумчанам, у меня тут возникла проблема с компиляцией
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);
}
}
}
};
В третьей строчке ругается на недостающую точку с запятой, хотя ее там быть и не должно.
Код не я пишу. Я пытаюсь разобраться как работаться с потоками/записывать/читать память в процессе.
Вот весь полный код программы
#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);
}
}