• CSGO项目


    #include <Windows.h>
    #include <sstream>
    #include <iostream> 
    #include <math.h>  
    #include "HackProcess.h"
    #include <vector>
    #include <algorithm>   
    
    CHackProcess fProcess;  
    using namespace std;  
    
    #define F6_Key 0x75
    
    #define RIGHT_MOUSE 0x02
    
    int NumOfPlayers = 32;
    
    const DWORD dw_PlayerCountOffs = 0x7994E0;//Engine.dll
    
    
    //自己人物模块偏移
    const DWORD Player_Base = 0x4C5B3B4;//client_panorama.dll
    
    //阵营
    const DWORD dw_mTeamOffset = 0xE8;//client_panorama.dll
    //血量
    const DWORD dw_Health = 0xF4;//client_panorama.dll
    
    //人物坐标偏移
    const DWORD dw_Pos = 0x12C;//client_panorama.dll
    
    //敌人地址
    const DWORD EntityPlayer_Base = 0x4c5b3bc;//client_panorama.dll
    
    //敌人结构偏移
    const DWORD EntityLoopDistance = 0x8;
    
    //鼠标指针
    const DWORD dw_m_angRotation = 0x461A9C;
    RECT m_Rect; 
    
    HDC HDC_Desktop;
    
    HBRUSH EnemyBrush;
    HFONT Font; 
    
    //矩阵地址
    const DWORD dw_vMatrix = 0x4C2CD04 + 0xb0;
    const DWORD dw_antiFlick = 0x58C2B8;
    
    
    HWND TargetWnd;
    HWND Handle;
    DWORD DwProcId;
    
    COLORREF SnapLineCOLOR;
    COLORREF TextCOLOR; 
    
    typedef struct
    {
        float flMatrix [4][4];
    }WorldToScreenMatrix_t;
    
    float Get3dDistance(float * myCoords, float * enemyCoords)
    {
        return sqrt(
            pow(double(enemyCoords[0] - myCoords[0]), 2.0) +
            pow(double(enemyCoords[1] - myCoords[1]), 2.0) +
            pow(double(enemyCoords[2] - myCoords[2]), 2.0));
    
    }
    
    
    void SetupDrawing(HDC hDesktop, HWND handle)
    {
        HDC_Desktop =hDesktop;
        Handle = handle;
        EnemyBrush = CreateSolidBrush(RGB(255, 0, 0));
        //Color
        SnapLineCOLOR = RGB(0, 0, 255);
        TextCOLOR = RGB(0, 255, 0);
    }
    struct MyPlayer_t  
    { 
        DWORD CLocalPlayer; 
        int Team; 
        int Health; 
        WorldToScreenMatrix_t WorldToScreenMatrix;
        float Position[3]; 
        int flickerCheck;
        void ReadInformation() 
        {
            // 读自己地址
            ReadProcessMemory (fProcess.__HandleProcess, (PBYTE*)(fProcess.__dwordClient + Player_Base), &CLocalPlayer, sizeof(DWORD), 0);
            // 读阵营
            ReadProcessMemory (fProcess.__HandleProcess, (PBYTE*)(CLocalPlayer + dw_mTeamOffset), &Team, sizeof(int), 0);
            // 读血量   
            ReadProcessMemory (fProcess.__HandleProcess, (PBYTE*)(CLocalPlayer + dw_Health), &Health, sizeof(int), 0); 
            // 读坐标
            ReadProcessMemory (fProcess.__HandleProcess, (PBYTE*)(CLocalPlayer + dw_Pos), &Position, sizeof(float[3]), 0); 
    
            //读房间人数
            ReadProcessMemory (fProcess.__HandleProcess, (PBYTE*)(fProcess.__dwordEngine + dw_PlayerCountOffs), &NumOfPlayers, sizeof(int), 0); 
    
    
    
            //anti flicker
            //ReadProcessMemory (fProcess.__HandleProcess, (PBYTE*)(fProcess.__dwordEngine + dw_antiFlick), &flickerCheck, sizeof(int), 0); 
            //VMATRIX
            //if(flickerCheck == 0)
            //{
    
            //读矩阵
            ReadProcessMemory (fProcess.__HandleProcess, (PBYTE*)(fProcess.__dwordClient + dw_vMatrix), &WorldToScreenMatrix, sizeof(WorldToScreenMatrix), 0);
            //}
            //-1A4 = ANTI FLICKER
            //Engine.dll+0x58C45C
        }
    }MyPlayer;    
    
    
    
    
    
    
    //ENemy struct
    struct PlayerList_t 
    {
        DWORD CBaseEntity; 
        int Team; 
        int Health; 
        float Position[3]; 
        float AimbotAngle[3]; 
        char Name[39]; 
    
        void ReadInformation(int Player) 
        {
            // 读敌人地址
            ReadProcessMemory (fProcess.__HandleProcess, (PBYTE*)(fProcess.__dwordClient + EntityPlayer_Base  + (Player * EntityLoopDistance)),&CBaseEntity, sizeof(DWORD), 0);
            // 读阵营 
            ReadProcessMemory (fProcess.__HandleProcess, (PBYTE*)(CBaseEntity + dw_mTeamOffset), &Team, sizeof(int), 0);
            // 读血量    
            ReadProcessMemory (fProcess.__HandleProcess, (PBYTE*)(CBaseEntity + dw_Health), &Health, sizeof(int), 0); 
            // 读坐标
            ReadProcessMemory (fProcess.__HandleProcess, (PBYTE*)(CBaseEntity + dw_Pos), &Position, sizeof(float[3]), 0); 
         }
    }PlayerList[32];  
    
    
    bool WorldToScreen(float * from, float * to)
    {
        float w = 0.0f;
    
        to[0] = MyPlayer.WorldToScreenMatrix.flMatrix[0][0] * from[0] + MyPlayer.WorldToScreenMatrix.flMatrix[0][1] * from[1] + MyPlayer.WorldToScreenMatrix.flMatrix[0][2] * from[2] + MyPlayer.WorldToScreenMatrix.flMatrix[0][3];
        to[1] = MyPlayer.WorldToScreenMatrix.flMatrix[1][0] * from[0] + MyPlayer.WorldToScreenMatrix.flMatrix[1][1] * from[1] + MyPlayer.WorldToScreenMatrix.flMatrix[1][2] * from[2] + MyPlayer.WorldToScreenMatrix.flMatrix[1][3];
        w = MyPlayer.WorldToScreenMatrix.flMatrix[3][0] * from[0] + MyPlayer.WorldToScreenMatrix.flMatrix[3][1] * from[1] + MyPlayer.WorldToScreenMatrix.flMatrix[3][2] * from[2] + MyPlayer.WorldToScreenMatrix.flMatrix[3][3];
    
        if(w < 0.01f)
            return false;
    
        float invw = 1.0f / w;
        to[0] *= invw;
        to[1] *= invw;
    
        int width = (int)(m_Rect.right - m_Rect.left);
        int height = (int)(m_Rect.bottom - m_Rect.top);
    
        float x = width/2;
        float y = height/2;
    
        x += 0.5 * to[0] * width + 0.5;
        y -= 0.5 * to[1] * height + 0.5;
    
        to[0] = x+ m_Rect.left;
        to[1] = y+ m_Rect.top ;
    
        return true;
    }
    
    
    
    
    
    
    
    
    
    void DrawFilledRect(int x, int y, int w, int h)
    {
    
        RECT rect = { x, y, x + w, y + h }; 
    
        FillRect(HDC_Desktop, &rect, EnemyBrush);
    }
    
    
    void DrawBorderBox(int x, int y, int w, int h, int thickness)
    {
        //Top horiz line
        DrawFilledRect(x, y, w, thickness);
        //Left vertical line
        DrawFilledRect( x, y, thickness, h);
        //right vertical line
        DrawFilledRect((x + w), y, thickness, h);
        //bottom horiz line
        DrawFilledRect(x, y + h, w+thickness, thickness);
    }
    
    
    
    void DrawLine(float StartX, float StartY, float EndX, float EndY, COLORREF Pen)
    {
        int a,b=0;
        HPEN hOPen;
        HPEN hNPen = CreatePen(PS_SOLID, 2, Pen);
        hOPen = (HPEN)SelectObject(HDC_Desktop, hNPen);
        MoveToEx(HDC_Desktop, StartX, StartY, NULL);
        a = LineTo(HDC_Desktop, EndX, EndY);
        DeleteObject(SelectObject(HDC_Desktop, hOPen));
    }
    
    void DrawString(int x, int y, COLORREF color, const char* text)
    {    
        SetTextAlign(HDC_Desktop,TA_CENTER|TA_NOUPDATECP);
    
        SetBkColor(HDC_Desktop,RGB(0,0,0));
        SetBkMode(HDC_Desktop,TRANSPARENT);
    
        SetTextColor(HDC_Desktop,color);
    
        SelectObject(HDC_Desktop,Font);
    
        TextOutA(HDC_Desktop,x,y,text,strlen(text));
    
        DeleteObject(Font);
    }
    
    
    void DrawESP(int x, int y, float distance)
    {
        int width = 18100/distance;
        int height = 36000/distance;
        DrawBorderBox(x-(width/2), y-height, width, height, 1);
    
        DrawLine((m_Rect.right - m_Rect.left)/2,
                m_Rect.bottom - m_Rect.top, x, y, 
                SnapLineCOLOR);
    
    
        std::stringstream ss;
        ss << (int)distance;
    
        char * distanceInfo = new char[ss.str().size()+1];
        strcpy(distanceInfo, ss.str().c_str());
    
        DrawString(x, y, TextCOLOR, distanceInfo);
    
        delete [] distanceInfo;
    }
    
    void ESP()
    {
        GetWindowRect(FindWindow(NULL, "Counter-Strike: Global Offensive"), &m_Rect);
    
        for(int i = 0; i < NumOfPlayers; i ++)
        {
            PlayerList[i].ReadInformation(i);
    
            if(PlayerList[i].Health < 2)
                continue;
    
            if(PlayerList[i].Team == MyPlayer.Team)
                continue;
    
            float EnemyXY[3];
            if(WorldToScreen(PlayerList[i].Position, EnemyXY))
            {
                DrawESP(EnemyXY[0] - m_Rect.left, EnemyXY[1] - m_Rect.top, Get3dDistance(MyPlayer.Position, PlayerList[i].Position));
            }
    
        }
    
    
    
    
    }
    
    
    int main()
    {
        fProcess.RunProcess(); 
    
        ShowWindow(FindWindowA("ConsoleWindowClass", NULL), false);
        TargetWnd = FindWindow(0, "Counter-Strike: Global Offensive");
        HDC HDC_Desktop = GetDC(TargetWnd);
        SetupDrawing(HDC_Desktop, TargetWnd);
    
        for(;;)
        {
            MyPlayer.ReadInformation();
    
            ESP();
    
        }
    
    
        return 0;
    }
    main.cpp
    #pragma once
    
    #include <Windows.h>
    #include <TlHelp32.h>
    
    //THIS FILE SIMPLY DOES MOST OF THE BACKEND WORK FOR US, 
    //FROM FINDING THE PROCESS TO SETTING UP CORRECT ACCESS FOR US 
    //TO EDIT MEMORY 
    //IN MOST GAMES, A SIMPLER VERSION OF THIS CAN BE USED, or if you're injecting then its often not necessary
    //This file has been online for quite a while so credits should be shared but im using this from NubTIK
    //So Credits to him and thanks
    
    class CHackProcess
    {
    public:
    
        PROCESSENTRY32 __gameProcess;
        HANDLE __HandleProcess;
        HWND __HWNDCss; 
        DWORD __dwordClient;
        DWORD __dwordEngine;
        DWORD __dwordOverlay;
        DWORD __dwordVGui;
        DWORD __dwordLibCef;
        DWORD __dwordSteam; 
        DWORD FindProcessName(const char *__ProcessName, PROCESSENTRY32 *pEntry)
        {     
            PROCESSENTRY32 __ProcessEntry;
            __ProcessEntry.dwSize = sizeof(PROCESSENTRY32);
            HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
            if (hSnapshot == INVALID_HANDLE_VALUE) return 0;        if (!Process32First(hSnapshot, &__ProcessEntry))
            {
                CloseHandle(hSnapshot);
                return 0;
            }
            do{if (!_strcmpi(__ProcessEntry.szExeFile, __ProcessName))
            {
                memcpy((void *)pEntry, (void *)&__ProcessEntry, sizeof(PROCESSENTRY32));
                CloseHandle(hSnapshot);
                return __ProcessEntry.th32ProcessID;
            }} while (Process32Next(hSnapshot, &__ProcessEntry));
            CloseHandle(hSnapshot);
            return 0;
    }
    
    
    DWORD getThreadByProcess(DWORD __DwordProcess)
    {     
            THREADENTRY32 __ThreadEntry;
            __ThreadEntry.dwSize = sizeof(THREADENTRY32);
            HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
            if (hSnapshot == INVALID_HANDLE_VALUE) return 0;
    
            if (!Thread32First(hSnapshot, &__ThreadEntry)) {CloseHandle(hSnapshot); return 0; }
    
            do {if (__ThreadEntry.th32OwnerProcessID == __DwordProcess)
            {
                CloseHandle(hSnapshot);
                return __ThreadEntry.th32ThreadID;
            }} while (Thread32Next(hSnapshot, &__ThreadEntry)); 
            CloseHandle(hSnapshot);       
            return 0;
    }
    
    DWORD GetModuleNamePointer(LPSTR LPSTRModuleName, DWORD __DwordProcessId)
    { 
            MODULEENTRY32 lpModuleEntry = {0};
            HANDLE hSnapShot = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, __DwordProcessId);
            if(!hSnapShot)
                return NULL;  
            lpModuleEntry.dwSize = sizeof(lpModuleEntry);
            BOOL __RunModule = Module32First( hSnapShot, &lpModuleEntry );
            while(__RunModule)
            {
                if(!strcmp(lpModuleEntry.szModule, LPSTRModuleName ) )
                {CloseHandle( hSnapShot );
                return (DWORD)lpModuleEntry.modBaseAddr;
                }
                __RunModule = Module32Next( hSnapShot, &lpModuleEntry );
            }
            CloseHandle( hSnapShot );
            return NULL;
    }
    
    
    void runSetDebugPrivs() 
    {
        HANDLE __HandleProcess=GetCurrentProcess(), __HandleToken;
        TOKEN_PRIVILEGES priv;
        LUID __LUID; 
        OpenProcessToken(__HandleProcess, TOKEN_ADJUST_PRIVILEGES, &__HandleToken);
        LookupPrivilegeValue(0, "seDebugPrivilege", &__LUID);
        priv.PrivilegeCount = 1;
        priv.Privileges[0].Luid = __LUID;
        priv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
        AdjustTokenPrivileges(__HandleToken, false, &priv, 0, 0, 0);
        CloseHandle(__HandleToken);
        CloseHandle(__HandleProcess);
    }
        
        
        
    void RunProcess()
    {
        //commented lines are for non steam versions of the game
        runSetDebugPrivs();
        while (!FindProcessName("csgo.exe", &__gameProcess)) Sleep(12);
        while (!(getThreadByProcess(__gameProcess.th32ProcessID))) Sleep(12);
        __HandleProcess = OpenProcess(PROCESS_ALL_ACCESS, false, __gameProcess.th32ProcessID); 
    
        while(__dwordClient == 0x0) __dwordClient = GetModuleNamePointer("client_panorama.dll", __gameProcess.th32ProcessID);
    
        while(__dwordEngine == 0x0) __dwordEngine = GetModuleNamePointer("engine.dll", __gameProcess.th32ProcessID);
    
        //while(__dwordOverlay == 0x0) __dwordOverlay = GetModuleNamePointer("gameoverlayrenderer.dll", __gameProcess.th32ProcessID);
        //while(__dwordVGui == 0x0) __dwordVGui = GetModuleNamePointer("vguimatsurface.dll", __gameProcess.th32ProcessID);
        //while(__dwordLibCef == 0x0) __dwordLibCef = GetModuleNamePointer("libcef.dll", __gameProcess.th32ProcessID);
    //    while(__dwordSteam == 0x0) __dwordSteam = GetModuleNamePointer("steam.dll", __gameProcess.th32ProcessID); 
        __HWNDCss = FindWindow(NULL, "Counter-Strike: Global Offensive"); 
    }
    };
    
    extern CHackProcess fProcess;
    hackprocess.h
  • 相关阅读:
    Haskell语言学习笔记(76)Data.Tree
    C++17尝鲜:编译期 if 语句
    C++17尝鲜:variant
    Haskell语言学习笔记(75)Conduit
    C++17尝鲜:string_view
    Haskell语言学习笔记(74)GADTs
    Haskell语言学习笔记(73)Existentials
    Haskell语言学习笔记(72)Free Monad
    sum of powers
    「2017 山东一轮集训 Day7」逆序对
  • 原文地址:https://www.cnblogs.com/MiraculousB/p/12718946.html
Copyright © 2020-2023  润新知