-
Автор темы
- #1
Всем привет, сегодня я покажу вам как сделать самый простой wallhack для cs:go!
Итак, что нам для начала нужно:
1) Visual Studio
2) Не буду банален, напишу не руки, а мозг.
1. Для начала создаем пустой проект в VS:
Нажимаем ОК.
2. Создаем заголовочный файл с названием Memory и расширением h (Memory.h)
3. Начать писать код! :)
3.1 Подключаем библиотеки.
3.2 Создаем структуру. (Даем dwBase!, dwSize)
3.3 BOOOM - Создаем основной класс.
Советую просто копипастить, если не шарите в плюсах. Тут на самом деле простецкий код, а обьяснять долго.
4. Создаем исходник (Исходний файл)
Итак, тут самое интересное, время подключать адреса.
Есть два выхода, 1 - csgo dumper(плохой выход)
2 -
Я советую юзать адреса на гитхаб, так как там есть все что нужно(в отличии от csgo dumper) + по кд обновляют.
4.1 Кодим :)
Подключаем библиотеки и наш файл.
Создаем идентификаторы и вставляем туда НОВЫЕ ЗНАЧЕНИЯ С ГИТХАБА!(т.к кс будет обновлятся после данного гайда)
Так же первые 12 строчек кода кс предоставила нам на подносе, чтобы нам было намного легче делать наше wh(glow esp), так же подключаем mem и bClient.
И основное действие.
Здесь все просто, в строчках
Мы сначала передаем процесс, а потом dll игры(кста dll лучше смотреть в csgo dumper, так как после панорамы client.dll сменилась на client_panorama.dll)
Ну а дальше все по "дефолту", как в обычном Wh.
Итак, что мы получаем? А мы получаем wh как в кс при наблюдателе, да и урон по человеку в подарок!
Все отлично работает :)!
Для ленивых вот код полностью:
Memory.h
Wh.cpp
И для самых ленивых ссылка на готовый чит:
Y.Disk -
VT -
Да и на последок - СПАСИБО ЗА ВНИМАНИЕ!
Итак, что нам для начала нужно:
1) Visual Studio
2) Не буду банален, напишу не руки, а мозг.
1. Для начала создаем пустой проект в VS:
Нажимаем ОК.
2. Создаем заголовочный файл с названием Memory и расширением h (Memory.h)
3. Начать писать код! :)
3.1 Подключаем библиотеки.
C++:
#include <Windows.h>
#include <TlHelp32.h>
#include <comdef.h>
C++:
struct PModule {
DWORD dwBase;
DWORD dwSize;
};
Код:
class memory {
public:
inline bool Attach(const char* pName, DWORD dwAccess) {
HANDLE handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
PROCESSENTRY32 entry;
entry.dwSize = sizeof(entry);
do
if (!strcmp(_bstr_t(entry.szExeFile), pName)) {
_pId = entry.th32ProcessID;
CloseHandle(handle);
_process = OpenProcess(dwAccess, false, _pId);
return true;
}
while (Process32Next(handle, &entry));
return false;
}
inline PModule GetModule(const char* pModule) {
HANDLE module = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, _pId);
MODULEENTRY32 entry;
entry.dwSize = sizeof(entry);
do
if (!strcmp(_bstr_t(entry.szModule), pModule)) {
CloseHandle(module);
return PModule{
reinterpret_cast<DWORD>(entry.hModule), entry.modBaseSize
};
}
while (Module32Next(module, &entry));
return PModule{ 0,0 };
}
template<class T>
T Read(const DWORD dwAddress) {
T _read;
ReadProcessMemory(_process, LPVOID(dwAddress), &_read, sizeof(T), NULL);
return _read;
}
template<class T>
void Write(const DWORD dwAddress, const T value) {
WriteProcessMemory(_process, LPVOID(dwAddress), &value, sizeof(T), NULL);
}
void Exit() {
CloseHandle(_process);
}
private:
HANDLE _process;
DWORD _pId;
};
4. Создаем исходник (Исходний файл)
Итак, тут самое интересное, время подключать адреса.
Есть два выхода, 1 - csgo dumper(плохой выход)
2 -
Пожалуйста, авторизуйтесь для просмотра ссылки.
(github)Я советую юзать адреса на гитхаб, так как там есть все что нужно(в отличии от csgo dumper) + по кд обновляют.
4.1 Кодим :)
Подключаем библиотеки и наш файл.
C++:
#define _CRT_SECURE_NO_WARNINGS
#include <cstdint>
#include <iostream>
#include "Memory.h"
using namespace std;
C++:
#define dwLocalPlayer 0xCD2764
#define dwEntityList 0x4CE34FC
#define dwGlowObject 0x5223740
#define m_iTeamNum 0xF4
#define m_iHealth 0x100
#define m_iGlowIndex 0xA3F8
C++:
typedef struct GlowObjectDefinition_t {
float r;
float g;
float b;
float a;
uint8_t unk1[16];
bool m_bRenderWhenOccluded;
bool m_bRenderWhenUnoccluded;
bool m_bFullBloom;
int GlowStyle;
uint8_t unk2[10];
} GlowObjectDefinition_t;
memory mem;
PModule bClient;
C++:
int main() {
while (!mem.Attach("csgo.exe", PROCESS_ALL_ACCESS)) {}
bClient = mem.GetModule("client_panorama.dll");
cout << "Glow started..." << endl;
while (1) {
DWORD playerBase = mem.Read<DWORD>(bClient.dwBase + dwLocalPlayer);
if (!playerBase)
continue;
int playerHp = mem.Read<int>(playerBase + m_iHealth);
if (!playerHp)
continue;
int playerTeam = mem.Read<int>(playerBase + m_iTeamNum);
int glowArray = mem.Read<int>(bClient.dwBase + dwGlowObject);
int glowCount = mem.Read<int>(bClient.dwBase + dwGlowObject + 0x4);
for (int i = 0; i < glowCount; i++) {
DWORD gEntity = mem.Read<DWORD>(glowArray + 0x38 * i);
if (!gEntity)
continue;
int entHp = mem.Read<int>(gEntity + m_iHealth);
if (!entHp)
continue;
int entTeam = mem.Read<int>(gEntity + m_iTeamNum);
if (entTeam == playerTeam)
continue;
static GlowObjectDefinition_t Glow = mem.Read<GlowObjectDefinition_t>(glowArray + (i * 0x38) + 0x4);
if (entTeam == 3) {
Glow.r = 0.447058827f;
Glow.g = 0.607843161f;
Glow.b = 0.866666667f;
Glow.a = 0.5f;
Glow.m_bRenderWhenOccluded = true;
Glow.m_bRenderWhenUnoccluded = false;
}
if (entTeam == 2) {
Glow.r = 0.8784314f;
Glow.g = 0.6862745f;
Glow.b = 0.3372549f;
Glow.a = 0.5f;
Glow.m_bRenderWhenOccluded = true;
Glow.m_bRenderWhenUnoccluded = false;
}
mem.Write<GlowObjectDefinition_t>(glowArray + (i * 0x38) + 0x4, Glow);
}
}
return 0;
}
C++:
while (!mem.Attach("csgo.exe", PROCESS_ALL_ACCESS)) {}
bClient = mem.GetModule("client_panorama.dll");
Ну а дальше все по "дефолту", как в обычном Wh.
Итак, что мы получаем? А мы получаем wh как в кс при наблюдателе, да и урон по человеку в подарок!
Все отлично работает :)!
Для ленивых вот код полностью:
Memory.h
C++:
#pragma once
#include <Windows.h>
#include <TlHelp32.h>
#include <comdef.h>
struct PModule {
DWORD dwBase;
DWORD dwSize;
};
class memory {
public:
inline bool Attach(const char* pName, DWORD dwAccess) {
HANDLE handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
PROCESSENTRY32 entry;
entry.dwSize = sizeof(entry);
do
if (!strcmp(_bstr_t(entry.szExeFile), pName)) {
_pId = entry.th32ProcessID;
CloseHandle(handle);
_process = OpenProcess(dwAccess, false, _pId);
return true;
}
while (Process32Next(handle, &entry));
return false;
}
inline PModule GetModule(const char* pModule) {
HANDLE module = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, _pId);
MODULEENTRY32 entry;
entry.dwSize = sizeof(entry);
do
if (!strcmp(_bstr_t(entry.szModule), pModule)) {
CloseHandle(module);
return PModule{
reinterpret_cast<DWORD>(entry.hModule), entry.modBaseSize
};
}
while (Module32Next(module, &entry));
return PModule{ 0,0 };
}
template<class T>
T Read(const DWORD dwAddress) {
T _read;
ReadProcessMemory(_process, LPVOID(dwAddress), &_read, sizeof(T), NULL);
return _read;
}
template<class T>
void Write(const DWORD dwAddress, const T value) {
WriteProcessMemory(_process, LPVOID(dwAddress), &value, sizeof(T), NULL);
}
void Exit() {
CloseHandle(_process);
}
private:
HANDLE _process;
DWORD _pId;
};
Wh.cpp
C++:
#define _CRT_SECURE_NO_WARNINGS
#include <cstdint>
#include <iostream>
#include "Memory.h"
using namespace std;
#define dwLocalPlayer 0xCD2764
#define dwEntityList 0x4CE34FC
#define dwGlowObject 0x5223740
#define m_iTeamNum 0xF4
#define m_iHealth 0x100
#define m_iGlowIndex 0xA3F8
typedef struct GlowObjectDefinition_t {
float r;
float g;
float b;
float a;
uint8_t unk1[16];
bool m_bRenderWhenOccluded;
bool m_bRenderWhenUnoccluded;
bool m_bFullBloom;
int GlowStyle;
uint8_t unk2[10];
} GlowObjectDefinition_t;
memory mem;
PModule bClient;
int main() {
while (!mem.Attach("csgo.exe", PROCESS_ALL_ACCESS)) {}
bClient = mem.GetModule("client_panorama.dll");
cout << "Glow started..." << endl;
while (1) {
DWORD playerBase = mem.Read<DWORD>(bClient.dwBase + dwLocalPlayer);
if (!playerBase)
continue;
int playerHp = mem.Read<int>(playerBase + m_iHealth);
if (!playerHp)
continue;
int playerTeam = mem.Read<int>(playerBase + m_iTeamNum);
int glowArray = mem.Read<int>(bClient.dwBase + dwGlowObject);
int glowCount = mem.Read<int>(bClient.dwBase + dwGlowObject + 0x4);
for (int i = 0; i < glowCount; i++) {
DWORD gEntity = mem.Read<DWORD>(glowArray + 0x38 * i);
if (!gEntity)
continue;
int entHp = mem.Read<int>(gEntity + m_iHealth);
if (!entHp)
continue;
int entTeam = mem.Read<int>(gEntity + m_iTeamNum);
if (entTeam == playerTeam)
continue;
static GlowObjectDefinition_t Glow = mem.Read<GlowObjectDefinition_t>(glowArray + (i * 0x38) + 0x4);
if (entTeam == 3) {
Glow.r = 0.447058827f;
Glow.g = 0.607843161f;
Glow.b = 0.866666667f;
Glow.a = 0.5f;
Glow.m_bRenderWhenOccluded = true;
Glow.m_bRenderWhenUnoccluded = false;
}
if (entTeam == 2) {
Glow.r = 0.8784314f;
Glow.g = 0.6862745f;
Glow.b = 0.3372549f;
Glow.a = 0.5f;
Glow.m_bRenderWhenOccluded = true;
Glow.m_bRenderWhenUnoccluded = false;
}
mem.Write<GlowObjectDefinition_t>(glowArray + (i * 0x38) + 0x4, Glow);
}
}
return 0;
}
Y.Disk -
Пожалуйста, авторизуйтесь для просмотра ссылки.
VT -
Пожалуйста, авторизуйтесь для просмотра ссылки.
(1/70)Да и на последок - СПАСИБО ЗА ВНИМАНИЕ!
Последнее редактирование: