#define _CRT_SECURE_NO_WARNINGS
#include <Windows.h>
#include <Psapi.h>
#include <stdio.h>
#pragma comment(lib, "Psapi.lib")
int main() {
HWND gameWnd = FindWindowA(NULL, "Counter-Strike");
if (!gameWnd) { MessageBoxA(0, "Окно не найдено", "Ошибка", 0); return 1; }
DWORD pid;
GetWindowThreadProcessId(gameWnd, &pid);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
HMODULE mods[1024];
DWORD needed;
EnumProcessModules(hProcess, mods, sizeof(mods), &needed);
DWORD clientBase = 0;
for (unsigned i = 0; i < needed / sizeof(HMODULE); i++) {
char name[256];
GetModuleBaseNameA(hProcess, mods[i], name, sizeof(name));
if (strcmp(name, "hw.dll") == 0) clientBase = (DWORD)mods[i];
}
char msg[256];
sprintf(msg, "clientBase: %p\nИщем LocalPlayer...", (void*)clientBase);
MessageBoxA(0, msg, "Поиск", 0);
// Поиск LocalPlayer по значению здоровья 100
for (int offset = 0; offset < 0x200000; offset += 4) {
DWORD addr = clientBase + offset;
DWORD value;
ReadProcessMemory(hProcess, (LPCVOID)addr, &value, 4, NULL);
if (value == 100) {
// Проверяем, что рядом есть команда (1 или 2)
DWORD team;
ReadProcessMemory(hProcess, (LPCVOID)(addr - 0x8), &team, 4, NULL);
if (team == 1 || team == 2) {
DWORD localPlayerAddr = addr - 0xF8;
sprintf(msg, "Найдено!\ndwLocalPlayer = 0x%X\nАбсолютный адрес: %p", offset - 0xF8, (void*)localPlayerAddr);
MessageBoxA(0, msg, "Успех!", 0);
return 0;
}
}
}
MessageBoxA(0, "Не найдено. Убедитесь, что вы живы и в катке.", "Ошибка", 0);
return 1;
}