Вопрос Замена нетваров (оффсетов) на сигнатуры

Начинающий
Статус
Оффлайн
Регистрация
27 Янв 2021
Сообщения
17
Реакции[?]
2
Поинты[?]
0
Всем привет!
Найдя на просторах YouTube очень годный
Пожалуйста, авторизуйтесь для просмотра ссылки.
, попробовал сам скомпилировать проект. Но у меня ESP
Пожалуйста, авторизуйтесь для просмотра ссылки.
(хотя брал последние нетвары хоть с гита
Пожалуйста, авторизуйтесь для просмотра ссылки.
, хоть сам через утилиту hazedumper).
Пожалуйста, авторизуйтесь для просмотра ссылки.
.

Можно ли как-то заменить нетвары в
Пожалуйста, авторизуйтесь для просмотра ссылки.
на оффсеты?
Так как с Cheat Engine я вроде бы как разобрался, и давно уже нашел структуру игрока, ботов (соответственно их хп, координаты).

имхо: так же я не совсем понял, за что отвечают "dwEntityList" и "dwViewMatrix". Вот с остальным вроде как понятно: "m_iTeamNum" по идее считает количество ботов, "m_iHealth" количество ХП ботов, а "m_vecOrigin" отвечает за XYZ координаты.

UPD: Теперь работает. Если кому нужно, можете скачать
Пожалуйста, авторизуйтесь для просмотра ссылки.
.

C++:
#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);
            }
        }
    }
}
C++:
#pragma once
#define dwEntityList 0x4DA2E24
#define dwViewMatrix 0x4D94724
#define m_iTeamNum 0xF4
#define m_iHealth 0x100
#define m_vecOrigin 0x138
 
Последнее редактирование:
Пользователь
Статус
Оффлайн
Регистрация
26 Окт 2017
Сообщения
520
Реакции[?]
95
Поинты[?]
2K
Вот с остальным вроде как понятно: "m_iTeamNum" по идее считает количество ботов, "m_iHealth" количество ХП ботов
Как так можно было смотреть чтобы так понять?
 
Начинающий
Статус
Оффлайн
Регистрация
27 Янв 2021
Сообщения
17
Реакции[?]
2
Поинты[?]
0
Участник
Статус
Оффлайн
Регистрация
2 Фев 2020
Сообщения
818
Реакции[?]
378
Поинты[?]
0
dwEntityList - лист всех ентити, по нему находят игроков и далее
m_iHealth - хп игрока
m_iTeamNum - номер команды (кт 2 вродь и т 3)
dwViewMatrix - кости игрока в матрице
и нахуй юзать пиратку ксго в 2021 году?
оффсеты в хейздампере всегда под ласт апдейт
и оно не работает тк тут "client_panorama.dll", теперь просто "client.dll"
 
Начинающий
Статус
Оффлайн
Регистрация
27 Янв 2021
Сообщения
17
Реакции[?]
2
Поинты[?]
0
dwEntityList - лист всех ентити, по нему находят игроков и далее
m_iHealth - хп игрока
m_iTeamNum - номер команды (кт 2 вродь и т 3)
dwViewMatrix - кости игрока в матрице
и нахуй юзать пиратку ксго в 2021 году?
оффсеты в хейздампере всегда под ласт апдейт
и оно не работает тк тут "client_panorama.dll", теперь просто "client.dll"
Спасибо! А через Cheat Engine я получается могу найти эти оффсеты? По идее кто-то из "dwEntityList" или "dwViewMatrix" является статическим, и я должен его обнаруживать. Или с помощью какой программы я могу найти эти оффсеты?
 
Последнее редактирование:
Участник
Статус
Оффлайн
Регистрация
2 Фев 2020
Сообщения
818
Реакции[?]
378
Поинты[?]
0
Спасибо! А через Cheat Engine я получается могу найти эти оффсеты? По идее кто-то из "dwEntityList" или "dwViewMatrix" является статическим, и я должен его обнаруживать.
через cheat engine сомневаюсь тк ксго от него защищена да смысла нет, dwEntityList является статическим, а dwViewMatrix часть класса игрока
 
Нестандартное звание
Пользователь
Статус
Оффлайн
Регистрация
7 Мар 2020
Сообщения
436
Реакции[?]
51
Поинты[?]
1K
Спасибо! А через Cheat Engine я получается могу найти эти оффсеты? По идее кто-то из "dwEntityList" или "dwViewMatrix" является статическим, и я должен его обнаруживать. Или с помощью какой программы я могу найти эти оффсеты?
Зачем тебе их искать? Всё есть на гитхабе hazedumper..
 
Начинающий
Статус
Оффлайн
Регистрация
27 Янв 2021
Сообщения
17
Реакции[?]
2
Поинты[?]
0
Зачем тебе их искать? Всё есть на гитхабе hazedumper..
Помимо CS GO есть ещё игры, на которые нет оффсетов в открытом доступе, и приходиться их искать самому.
через cheat engine сомневаюсь тк ксго от него защищена
Я так полагаю, даже запуск игры с "-insecure" тоже не поможет.
dwEntityList - лист всех ентити, по нему находят игроков и далее
m_iHealth - хп игрока
m_iTeamNum - номер команды (кт 2 вродь и т 3)
dwViewMatrix - кости игрока в матрице
и нахуй юзать пиратку ксго в 2021 году?
оффсеты в хейздампере всегда под ласт апдейт
и оно не работает тк тут "client_panorama.dll", теперь просто "client.dll"
В целом, то что оно заработало - уже хорошо.
Безымянный.png
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
27 Янв 2021
Сообщения
17
Реакции[?]
2
Поинты[?]
0
В целом, то что оно заработало - уже хорошо.
Безымянный.png
Зашебумба, теперь оно нормально работает (на hazedumper были старые оффсеты). Осталось разобраться, с помощью какой программы вручную можно найти "dwEntityList" и "dwViewMatrix". Cheat Engine не находит даже статический "dwEntityList".
Screenshot_1.png
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
27 Янв 2021
Сообщения
17
Реакции[?]
2
Поинты[?]
0
Всё работает исправно?
Да, но я не понял с помощью какой проги (в ручную) искать "dwEntityList" и "dwViewMatrix", которые выкладываются на hazedumper. Через Cheat Engine я всё это нашёл, но там вообще другое.
 
Начинающий
Статус
Оффлайн
Регистрация
27 Янв 2021
Сообщения
17
Реакции[?]
2
Поинты[?]
0
Я разобрался что за что отвечает. Если объяснять, то на это 30 минут видео не хватит.
Все эти указателя и смещения можно найти через Cheat Engine. В "client.dll" лежат указателя (dwEntityList) на игроков (соответственно в них смещения на здоровье, координаты и номер команды). dwViewMatrix - видовая матрица, отвечает за то как будет выглядеть 3D объект (в нашем случае игрок) на нашем 2D мониторе. В
Пожалуйста, авторизуйтесь для просмотра ссылки.
подробнее рассказывает чел о ней.

p.s. Надеюсь наследникам пригодиться тема :3
 
Сверху Снизу