From 95b3b48178b5f64a60cb1bc25727d160717b954a Mon Sep 17 00:00:00 2001 From: ifBars <114284668+ifBars@users.noreply.github.com> Date: Wed, 8 Nov 2023 23:28:38 -0700 Subject: [PATCH] General Improvements **Head Tracker** - Makes head tracker distance based - Makes circle an outline of a circle rather than filled - Adjusted circle to be more oval shape to fit character heads - Added toggle feature to head tracker as requested by many **Handle Hijack** - Changed permissions for hijacked handle from all access to permissions of svchost.exe, which still allows read and write memory, but removes the all access permissions, looking more "legit" to VAC **Offsets** - Update offsets for game build 13968 --- memory-external/classes/config.cpp | 14 ++++------- memory-external/classes/config.hpp | 1 + memory-external/classes/render.hpp | 10 ++++---- memory-external/hacks/hack.hpp | 30 ++++++++++++++---------- memory-external/main.cpp | 6 +++-- memory-external/memory/handle_hijack.hpp | 2 +- offsets/offsets.json | 12 +++++----- 7 files changed, 38 insertions(+), 37 deletions(-) diff --git a/memory-external/classes/config.cpp b/memory-external/classes/config.cpp index a424e7b..b0946da 100644 --- a/memory-external/classes/config.cpp +++ b/memory-external/classes/config.cpp @@ -20,6 +20,8 @@ namespace config { if (data.empty()) return false; + if (data["show_head_tracker"].is_boolean()) + show_head_tracker = data["show_head_tracker"]; if (data["team_esp"].is_boolean()) team_esp = data["team_esp"]; if (data["automatic_update"].is_boolean()) @@ -63,23 +65,18 @@ namespace config { }; } - //if (data["show_distance"].is_boolean()) - // show_distance = data["show_distance"]; - //if (data["show_armor"].is_boolean()) - // show_armor = data["show_armor"]; //if (data["rainbow"].is_boolean()) // rainbow = data["rainbow"]; //if (data["rainbow_speed"].is_number()) // rainbow_speed = data["rainbow_speed"]; - //if (data["head_tracker"].is_boolean()) - // head_tracker = data["head_tracker"]; return true; } void save() { json data; - + + data["show_head_tracker"] = show_head_tracker; data["team_esp"] = team_esp; data["automatic_update"] = automatic_update; data["render_distance"] = render_distance; @@ -91,11 +88,8 @@ namespace config { data["esp_name_color"] = { esp_name_color.r, esp_name_color.g, esp_name_color.b }; data["esp_distance_color"] = { esp_distance_color.r, esp_distance_color.g, esp_distance_color.b }; - //data["show_distance"] = show_distance; - //data["show_armor"] = show_armor; //data["rainbow"] = rainbow; //data["rainbow_speed"] = rainbow_speed; - //data["head_tracker"] = head_tracker; std::ofstream output(file_path); output << std::setw(4) << data << std::endl; diff --git a/memory-external/classes/config.hpp b/memory-external/classes/config.hpp index cd8cb25..213527b 100644 --- a/memory-external/classes/config.hpp +++ b/memory-external/classes/config.hpp @@ -28,6 +28,7 @@ namespace config { inline float render_distance = -1.f; inline int flag_render_distance = 200; inline bool show_extra_flags = false; + inline bool show_head_tracker = false; inline RGB esp_box_color_team = { 75, 175, 75 }; inline RGB esp_box_color_enemy = { 175, 75, 75 }; diff --git a/memory-external/classes/render.hpp b/memory-external/classes/render.hpp index ec5ce9e..30aa640 100644 --- a/memory-external/classes/render.hpp +++ b/memory-external/classes/render.hpp @@ -5,13 +5,13 @@ namespace render { void DrawCircle(HDC hdc, int x, int y, int radius, COLORREF color) { - HBRUSH hBrush = CreateSolidBrush(color); - HBRUSH hOldBrush = (HBRUSH)SelectObject(hdc, hBrush); + HPEN hPen = CreatePen(PS_SOLID, 2, color); + HPEN hOldPen = (HPEN)SelectObject(hdc, hPen); - Ellipse(hdc, x - radius, y - radius, x + radius, y + radius); + Arc(hdc, x - radius, y - radius, x + radius, y + radius + 4, 0, 0, 0, 0); - SelectObject(hdc, hOldBrush); - DeleteObject(hBrush); + SelectObject(hdc, hOldPen); + DeleteObject(hPen); } void DrawBorderBox(HDC hdc, int x, int y, int w, int h, COLORREF borderColor) diff --git a/memory-external/hacks/hack.hpp b/memory-external/hacks/hack.hpp index 988a924..24e6a7d 100644 --- a/memory-external/hacks/hack.hpp +++ b/memory-external/hacks/hack.hpp @@ -128,9 +128,7 @@ namespace hack { if (origin.x == localOrigin.x && origin.y == localOrigin.y && origin.z == localOrigin.z) continue; - const uintptr_t gamescene = process->read(pCSPlayerPawn + 0x310); - const uintptr_t bonearray = process->read(gamescene + 0x160 + 0x80); - const Vector3 headPos = process->read(bonearray + 6 * 32); + if (config::render_distance != -1 && (localOrigin - origin).length2d() > config::render_distance) continue; @@ -140,24 +138,30 @@ namespace hack { const Vector3 screenPos = origin.world_to_screen(view_matrix); const Vector3 screenHead = head.world_to_screen(view_matrix); - const Vector3 screenHeadPos = headPos.world_to_screen(view_matrix); + if (screenPos.z >= 0.01f) { const float height = screenPos.y - screenHead.y; const float width = height / 2.4f; - const float head_height = (screenHeadPos.y - screenHeadPos.y) / 8; - const float head_width = (head_height / 2.4f) / 4; float distance = localOrigin.calculate_distance(origin); int roundedDistance = std::round(distance / 10.f); - render::DrawCircle( - g::hdcBuffer, - screenHeadPos.x, - screenHeadPos.y, - 5, - config::esp_box_color_enemy - ); + if (config::show_head_tracker) + { + const uintptr_t gamescene = process->read(pCSPlayerPawn + 0x310); + const uintptr_t bonearray = process->read(gamescene + 0x160 + 0x80); + const Vector3 headPos = process->read(bonearray + 6 * 32); + const Vector3 screenHeadPos = headPos.world_to_screen(view_matrix); + + render::DrawCircle( + g::hdcBuffer, + screenHeadPos.x, + screenHeadPos.y, + width / 5, + config::esp_box_color_enemy + ); + } render::DrawBorderBox( g::hdcBuffer, diff --git a/memory-external/main.cpp b/memory-external/main.cpp index 99d9bd7..c83fe0f 100644 --- a/memory-external/main.cpp +++ b/memory-external/main.cpp @@ -147,9 +147,9 @@ int main() { //SetActiveWindow(hack::process->hwnd_); #ifndef _UC - std::cout << "\n[settings] In Game keybinds:\n\t[F5] enable/disable Team ESP\n\t[F6] enable/disable automatic updates\n\t[F7] enable/disable extra flags\n\t[end] Unload esp.\n" << std::endl; + std::cout << "\n[settings] In Game keybinds:\n\t[F5] enable/disable Team ESP\n\t[F6] enable/disable automatic updates\n\t[F7] enable/disable extra flags\n\t[F8] enable/disable head tracker circle\n\t[end] Unload esp.\n" << std::endl; #else - std::cout << "\n[settings] In Game keybinds:\n\t[F5] enable/disable Team ESP\n\t[F7] enable/disable extra flags\n\t[end] Unload esp\n" << std::endl; + std::cout << "\n[settings] In Game keybinds:\n\t[F5] enable/disable Team ESP\n\t[F7] enable/disable extra flags[F8] enable/disable head tracker circle\n\t[end] Unload esp.\n" << std::endl; #endif std::cout << "[settings] Make sure you check the config for additional settings!" << std::endl; @@ -165,6 +165,8 @@ int main() { #endif if (GetAsyncKeyState(VK_F7) & 0x8000) { config::show_extra_flags = !config::show_extra_flags; config::save(); Beep(700, 100); }; + if (GetAsyncKeyState(VK_F8) & 0x8000) { config::show_head_tracker = !config::show_head_tracker; config::save(); Beep(700, 100); }; + TranslateMessage(&msg); DispatchMessage(&msg); diff --git a/memory-external/memory/handle_hijack.hpp b/memory-external/memory/handle_hijack.hpp index dbae527..b54cf07 100644 --- a/memory-external/memory/handle_hijack.hpp +++ b/memory-external/memory/handle_hijack.hpp @@ -259,7 +259,7 @@ namespace hj { //we duplicate the handle another process has to our target into our cheat with whatever permissions we want. I did all access. - NtRet = NtDuplicateObject(procHandle, (HANDLE)hInfo->Handles[i].Handle, NtCurrentProcess, &HijackedHandle, PROCESS_ALL_ACCESS, 0, 0); + NtRet = NtDuplicateObject(procHandle, (HANDLE)hInfo->Handles[i].Handle, NtCurrentProcess, &HijackedHandle, PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE | PROCESS_DUP_HANDLE, 0, 0); if (!IsHandleValid(HijackedHandle) || !NT_SUCCESS(NtRet))//check is the funcions succeeded and check the handle is valid { diff --git a/offsets/offsets.json b/offsets/offsets.json index 06969f6..42ee5e9 100644 --- a/offsets/offsets.json +++ b/offsets/offsets.json @@ -1,10 +1,10 @@ { - "build_number": 13967, - "dwLocalPlayer": 25144424, - "dwEntityList": 24820056, - "dwViewMatrix": 25206992, - "dwBuildNumber": 4752660, - "dwPlantedC4": 25226056, + "build_number": 13968, + "dwLocalPlayer": 25152968, + "dwEntityList": 24828656, + "dwViewMatrix": 25215216, + "dwBuildNumber": 4764964, + "dwPlantedC4": 25234648, "m_flC4Blow": 3760, "m_flNextBeep": 3756, "m_flTimerLength": 3768,