-
Автор темы
- #1
Привет работягям еще раз, это мой второй гайд на тему "Создание читов CS:GO".
В первой части я разбирал, как же все таки сделать простое wh(glow esp) на CS:GO, сегодня же мы будем делать RadarHack!
Для начала, хочу дать вам ссылку на 1 часть, так как от туда нам понадобится заголовочный файл(Memory.h). https://yougame.biz/threads/72499/
Итак, что же нам нужно?
1) Visual Studio
2) Базовые знания с++ (Если их нет, то советую просто копипастить).
Давайте начнем!
1. Создаем пустой проект в Visual Studio.
2. Создаем заголовочный файл Memory.h(Я просто скину код, а его разбор был в предыдущем уроке)
3. Пишем туда код:
4. Создаем основной файл radarhack.cpp
Мы подошли к основному, как же реализовать наш взлом радара?
Начнем писать код в radarhack.cpp! :
1. Подключаем библиотеку, наш файл и пространство имен std.
2. Добавляем в нашу программу адреса:
ПРОШУ ЗАМЕТИТЬ, У нас есть выбор между тем, где брать адреса в память.
1 - CS:GO Dumper
2 - GitHub
Я советую вам гитхаб, так как там ВСЕ нужные адреса для создания читов и + адреса очень часто обновляют.
Нооо, CS:GO Dumper все же нужно будет скачать, так как в нем мы будем смотреть dll игры.
3. Основной метод:
В строчках
Мы сначала передаем процесс, а потом dll игры
Да и вот что, dll игры изменила название с "client.dll" на "client_panorama.dll" после выпуска панорамы.
Далее в цикле мы проверяем и оптимизируем наш чит, в коде
Мы даем положение игрока, а потом даем его hp.
И если хп нет (!localHp) ((! - не)) то он не будет отображатся на радаре (continue), в каком-то роде оптимизация.
Дальше в коде мы видим
Здесь у нас дается команда, а так же главный цикл, который проходится по игрокам которые уже замечены твоими тиммейтами(уже на радаре) и тех кого нет.
Так же видим здесь, если игрок уже обнаружен, то радархак его не отображает, т к он уже на радаре, так же что-то типо оптимизации.
И главное, мы видим i < 64. Что это? А это максимальное кол-во игроков на сервере. То есть программа проверяет всех 64х игроков.
Итак, давайте же запустим наш чит.
Ура! Все работает, всем спасибо за внимание!!!
Для ленивых вот код полностью:
Memory.h
radarhack.cpp
Для еще более ленивых, вот сурс на чит и вт
Y.Disk -
VT -
В первой части я разбирал, как же все таки сделать простое wh(glow esp) на CS:GO, сегодня же мы будем делать RadarHack!
Для начала, хочу дать вам ссылку на 1 часть, так как от туда нам понадобится заголовочный файл(Memory.h). https://yougame.biz/threads/72499/
Итак, что же нам нужно?
1) Visual Studio
2) Базовые знания с++ (Если их нет, то советую просто копипастить).
Давайте начнем!
1. Создаем пустой проект в Visual Studio.
2. Создаем заголовочный файл Memory.h(Я просто скину код, а его разбор был в предыдущем уроке)
3. Пишем туда код:
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;
};
Мы подошли к основному, как же реализовать наш взлом радара?
Начнем писать код в radarhack.cpp! :
1. Подключаем библиотеку, наш файл и пространство имен std.
C++:
#include <iostream>
#include "Memory.h"
using namespace std;
C++:
#define dwLocalPlayer 0xCD2764
#define dwEntityList 0x4CE34FC
#define m_bSpotted 0x93D
#define m_iHealth 0x100
#define m_iTeamNum 0xF4
memory mem;
PModule bClient;
1 - CS:GO Dumper
2 - GitHub
Я советую вам гитхаб, так как там ВСЕ нужные адреса для создания читов и + адреса очень часто обновляют.
Нооо, CS:GO Dumper все же нужно будет скачать, так как в нем мы будем смотреть dll игры.
3. Основной метод:
C++:
int main() {
while (!mem.Attach("csgo.exe", PROCESS_ALL_ACCESS)) {}
bClient = mem.GetModule("client_panorama.dll");
cout << "RadarHack is Started ! :)" << endl;
while (1) {
DWORD pLocal = mem.Read<DWORD>(bClient.dwBase + dwLocalPlayer);
DWORD localHp = mem.Read<DWORD>(pLocal + m_iHealth);
if (!localHp)
continue;
DWORD localTeam = mem.Read<DWORD>(pLocal + m_iTeamNum);
for (DWORD i = 0; i < 64; i++) {
DWORD pEnt = mem.Read<DWORD>(bClient.dwBase + dwEntityList + (i - 1) * 0x10);
DWORD entHp = mem.Read<DWORD>(pEnt + m_iHealth);
if (!entHp)
continue;
DWORD entTeam = mem.Read<DWORD>(pEnt + m_iTeamNum);
if (entTeam == localTeam)
continue;
BOOL entSpotted = mem.Read<DWORD>(pEnt + m_bSpotted);
if (entSpotted)
continue;
mem.Write(pEnt + m_bSpotted, TRUE);
}
}
return 0;
}
C++:
while (!mem.Attach("csgo.exe", PROCESS_ALL_ACCESS)) {}
bClient = mem.GetModule("client_panorama.dll");
Да и вот что, dll игры изменила название с "client.dll" на "client_panorama.dll" после выпуска панорамы.
Далее в цикле мы проверяем и оптимизируем наш чит, в коде
C++:
DWORD pLocal = mem.Read<DWORD>(bClient.dwBase + dwLocalPlayer);
DWORD localHp = mem.Read<DWORD>(pLocal + m_iHealth);
if (!localHp)
continue;
И если хп нет (!localHp) ((! - не)) то он не будет отображатся на радаре (continue), в каком-то роде оптимизация.
Дальше в коде мы видим
C++:
DWORD localTeam = mem.Read<DWORD>(pLocal + m_iTeamNum);
for (DWORD i = 0; i < 64; i++) {
DWORD pEnt = mem.Read<DWORD>(bClient.dwBase + dwEntityList + (i - 1) * 0x10);
DWORD entHp = mem.Read<DWORD>(pEnt + m_iHealth);
if (!entHp)
continue;
DWORD entTeam = mem.Read<DWORD>(pEnt + m_iTeamNum);
if (entTeam == localTeam)
continue;
BOOL entSpotted = mem.Read<DWORD>(pEnt + m_bSpotted);
if (entSpotted)
continue;
mem.Write(pEnt + m_bSpotted, TRUE);
}
Так же видим здесь, если игрок уже обнаружен, то радархак его не отображает, т к он уже на радаре, так же что-то типо оптимизации.
И главное, мы видим i < 64. Что это? А это максимальное кол-во игроков на сервере. То есть программа проверяет всех 64х игроков.
Итак, давайте же запустим наш чит.
Ура! Все работает, всем спасибо за внимание!!!
Для ленивых вот код полностью:
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;
};
C++:
#include <iostream>
#include "Memory.h"
using namespace std;
#define dwLocalPlayer 0xCD2764
#define dwEntityList 0x4CE34FC
#define m_bSpotted 0x93D
#define m_iHealth 0x100
#define m_iTeamNum 0xF4
memory mem;
PModule bClient;
int main() {
while (!mem.Attach("csgo.exe", PROCESS_ALL_ACCESS)) {}
bClient = mem.GetModule("client_panorama.dll");
cout << "RadarHack is Started ! :)" << endl;
while (1) {
DWORD pLocal = mem.Read<DWORD>(bClient.dwBase + dwLocalPlayer);
DWORD localHp = mem.Read<DWORD>(pLocal + m_iHealth);
if (!localHp)
continue;
DWORD localTeam = mem.Read<DWORD>(pLocal + m_iTeamNum);
for (DWORD i = 0; i < 64; i++) {
DWORD pEnt = mem.Read<DWORD>(bClient.dwBase + dwEntityList + (i - 1) * 0x10);
DWORD entHp = mem.Read<DWORD>(pEnt + m_iHealth);
if (!entHp)
continue;
DWORD entTeam = mem.Read<DWORD>(pEnt + m_iTeamNum);
if (entTeam == localTeam)
continue;
BOOL entSpotted = mem.Read<DWORD>(pEnt + m_bSpotted);
if (entSpotted)
continue;
mem.Write(pEnt + m_bSpotted, TRUE);
}
}
return 0;
}
Y.Disk -
Пожалуйста, авторизуйтесь для просмотра ссылки.
VT -
Пожалуйста, авторизуйтесь для просмотра ссылки.
(2/69)