-
Постов
9 -
Зарегистрирован
-
Посещение
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные Around
-
-
Не могу обычный "плюс" поставить, поэтому оставлю комментом. ➕
-
6 минут назад, NubZilla сказал:
Сначала в обычную консоль выведи количество ботов вместе с тобой или игроков в обычную консоль винды. В консоль куда новички пишут Hello World ты выведи на экран количество игроков.
Желательно в цикле чтобы ты перезаходил с различными количествами ботов, и у тебя в консоли выводилось количество игроков. То есть постоянно считывалось и выводилось.
Если выведешь количество игроков значит что ты нашел правильный указатель(наверное многоуровневый) по которому показывается количество игроков.
Понял, спасибо! Пойду делать.
-
18 часов назад, NubZilla сказал:
Сначала выведи в консоль количество игроков и твои координаты, удостоверся что твои оффсеты правильные.
В консоли игры? Можно по подробнее?
-
Исходный код:
Спойлер#include "Offsets.h" #include <iostream> #include <Windows.h> #include <TlHelp32.h> /* SexOffenderSally helped code a lot/most of this with me, a long time friend! Give him a <3 on discord Make sure character set is 'Multi-Byte' in project settings! And game must be windowed fullscreen. Updated offsets: https://github.com/frk1/hazedumper/blob/master/csgo.cs */ #define EnemyPen 0x000000FF HBRUSH EnemyBrush = CreateSolidBrush(0x000000FF); int screenX = GetSystemMetrics(SM_CXSCREEN); int screenY = GetSystemMetrics(SM_CYSCREEN); DWORD GetProcId(const wchar_t* procName) { DWORD procId = 0; HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hSnap != INVALID_HANDLE_VALUE) { PROCESSENTRY32 procEntry; procEntry.dwSize = sizeof(procEntry); if (Process32First(hSnap, &procEntry)) { do { if (!_wcsicmp(procEntry.szExeFile, procName)) { procId = procEntry.th32ProcessID; break; } } while (Process32Next(hSnap, &procEntry)); } } CloseHandle(hSnap); return procId; } uintptr_t GetModuleBaseAddress(DWORD procId, const wchar_t* modName) { uintptr_t modBaseAddr = 0; HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32, procId); if (hSnap != INVALID_HANDLE_VALUE) { MODULEENTRY32 modEntry; modEntry.dwSize = sizeof(modEntry); if (Module32First(hSnap, &modEntry)) { do { if (!_wcsicmp(modEntry.szModule, modName)) { modBaseAddr = (uintptr_t)modEntry.modBaseAddr; break; } } while (Module32Next(hSnap, &modEntry)); } } CloseHandle(hSnap); return modBaseAddr; } uintptr_t moduleBase = GetModuleBaseAddress(GetProcId(L"csgo.exe"), L"client_panorama.dll"); HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, NULL, GetProcId(L"csgo.exe")); HDC hdc = GetDC(FindWindowA(NULL, "Counter-Strike: Global Offensive")); template<typename T> T RPM(SIZE_T address) { //The buffer for data that is going to be read from memory T buffer; //The actual RPM ReadProcessMemory(hProcess, (LPCVOID)address, &buffer, sizeof(T), NULL); //Return our buffer return buffer; } struct view_matrix_t { float* operator[ ](int index) { return matrix[index]; } float matrix[4][4]; }; struct Vector3 { float x, y, z; }; Vector3 WorldToScreen(const Vector3 pos, view_matrix_t matrix) { float _x = matrix[0][0] * pos.x + matrix[0][1] * pos.y + matrix[0][2] * pos.z + matrix[0][3]; float _y = matrix[1][0] * pos.x + matrix[1][1] * pos.y + matrix[1][2] * pos.z + matrix[1][3]; float w = matrix[3][0] * pos.x + matrix[3][1] * pos.y + matrix[3][2] * pos.z + matrix[3][3]; float inv_w = 1.f / w; _x *= inv_w; _y *= inv_w; float x = screenX * .5f; float y = screenY * .5f; x += 0.5f * _x * screenX + 0.5f; y -= 0.5f * _y * screenY + 0.5f; return { x,y,w }; } void DrawFilledRect(int x, int y, int w, int h) { RECT rect = { x, y, x + w, y + h }; FillRect(hdc, &rect, EnemyBrush); } void DrawBorderBox(int x, int y, int w, int h, int thickness) { DrawFilledRect(x, y, w, thickness); //Top horiz line DrawFilledRect(x, y, thickness, h); //Left vertical line DrawFilledRect((x + w), y, thickness, h); //right vertical line DrawFilledRect(x, y + h, w + thickness, thickness); //bottom horiz line } void DrawLine(float StartX, float StartY, float EndX, float EndY) { int a, b = 0; HPEN hOPen; HPEN hNPen = CreatePen(PS_SOLID, 2, EnemyPen);// penstyle, width, color hOPen = (HPEN)SelectObject(hdc, hNPen); MoveToEx(hdc, StartX, StartY, NULL); //start a = LineTo(hdc, EndX, EndY); //end DeleteObject(SelectObject(hdc, hOPen)); } int main() { while (true) { view_matrix_t vm = RPM<view_matrix_t>(moduleBase + dwViewMatrix); int localteam = RPM<int>(RPM<DWORD>(moduleBase + dwEntityList) + m_iTeamNum); for (int i = 1; i < 64; i++) { uintptr_t pEnt = RPM<DWORD>(moduleBase + dwEntityList + (i * 0x10)); int health = RPM<int>(pEnt + m_iHealth); int team = RPM<int>(pEnt + m_iTeamNum); Vector3 pos = RPM<Vector3>(pEnt + m_vecOrigin); Vector3 head; head.x = pos.x; head.y = pos.y; head.z = pos.z + 75.f; Vector3 screenpos = WorldToScreen(pos, vm); Vector3 screenhead = WorldToScreen(head, vm); float height = screenhead.y - screenpos.y; float width = height / 2.4f; if (screenpos.z >= 0.01f && team != localteam && health > 0 && health < 101) { DrawBorderBox(screenpos.x - (width / 2), screenpos.y, width, height, 1); DrawLine(screenX / 2, screenY, screenpos.x, screenpos.y); } } } }
Нетвары на данный момент для пиратки 1.37.7.8 (тестил и на лицензии с другими нетварами, итог тот же ?) :Спойлер#pragma once #define dwEntityList 0x4DA2E24 #define dwViewMatrix 0x4D94724 #define m_iTeamNum 0xF4 #define m_iHealth 0x100 #define m_vecOrigin 0x138
-
Всем привет!
Найдя на просторах YouTube очень годный гайд по ESP, попробовал сам скомпилировать проект. Но у меня ESP не заработал (хотя брал последние нетвары хоть с гита hazedumper, хоть сам через утилиту hazedumper). Грешу на нетвары.
Можно ли как-то заменить нетвары в ESP из гайда на оффсеты? Так как с Cheat Engine я вроде бы как разобрался, и давно уже нашел структуру игрока, ботов (соответственно их хп, координаты).
имхо: так же я не совсем понял, за что отвечают "dwEntityList" и "dwViewMatrix". Вот с остальным вроде как понятно: "m_iTeamNum" по идее считает количество ботов, "m_iHealth" количество ХП ботов, а "m_vecOrigin" отвечает за XYZ координаты. -
1 час назад, Xipho сказал:
Суть в том, что я рассказывал в одном видео. У тебя структура, а точнее массив, по сути, статичен (610В8994), а в eax лежит его индекс. Умножается он на 8, потому что размер элемента массива либо double, либо longint (long long). Оба эти типа занимают 8 байт в памяти.
Спасибо за информацию!
-
-
Пытаюсь написать телепорт для CS GO, и в одном из моментов нужно с отладчика найти инструкцию. Но суть в том, что все обращающиеся инструкции к указателю имеют очень странный регистр, а так же все инструкции работают с большим количеством адресов.
[CS:GO] Поиск видовой матрицы + сигнатура
in Статьи для новичков
Опубликовано
Вот видео с примером подобного способа для CSS.