Авторская статья. Сейчас будем учиться кодить самый простой External RadarHack С++.
Создаем пустой проект, и создаем там два элемента: Memory.h, Main.cpp
Заходим в Memory.h и вставляем туда код чтения и записи процесса (Объяснять не буду, никто не поймет))).
Далее заходим в Main.cpp и прописываем туда инклуды:
Дальше пишем оффсеты EntityList и dwSpotted. Если этот Radar Hack перестал работать, то вам стоит обновить эти два оффсета. Актуальные оффсеты - https://github.com/frk1/hazedumper/blob/master/csgo.cs
Определяем class process и struct PModule
Создаем функцию получения client_panorama.dll (Если на момент выхода темы ее изменили, то поставьте client.dll)
Создаем функцию main
Дальше создаем основные циклы:
Собственно, как работает этот Radar Hack? Он изменяет значение оффсета dwSpotted (замечен противник или нет) на true (1), и теперь радар показывает всех противников, хоть они и за стеной.
Полный код Main.cpp для
[LIKES=5]
[/LIKES]
Создаем пустой проект, и создаем там два элемента: Memory.h, Main.cpp
Заходим в Memory.h и вставляем туда код чтения и записи процесса (Объяснять не буду, никто не поймет))).
Код:
#pragma once
#include <windows.h>
#include <TlHelp32.h>
#include <iostream>
struct PModule
{
DWORD dwBase;
DWORD dwSize;
};
class process
{
public:
bool Attach(char* pName, DWORD rights)
{
HANDLE handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
PROCESSENTRY32 entry;
entry.dwSize = sizeof(entry);
do
if (!strcmp(entry.szExeFile, pName)) {
pID = entry.th32ProcessID;
CloseHandle(handle);
_process = OpenProcess(rights, false, pID);
return true;
}
while (Process32Next(handle, &entry));
return false;
}
PModule GetModule(char* moduleName) {
HANDLE module = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pID);
MODULEENTRY32 mEntry;
mEntry.dwSize = sizeof(mEntry);
do {
if (!strcmp(mEntry.szModule, (LPSTR)moduleName)) {
CloseHandle(module);
PModule mod = { (DWORD)mEntry.hModule, mEntry.modBaseSize };
return mod;
}
} while (Module32Next(module, &mEntry));
PModule mod = { (DWORD)false, (DWORD)false };
return mod;
}
template <class T>
T Read(DWORD addr) {
T _read;
ReadProcessMemory(_process, (LPVOID)addr, &_read, sizeof(T), NULL);
return _read;
}
template <class T>
void Write(DWORD addr, T val) {
WriteProcessMemory(_process, (LPVOID)addr, &val, sizeof(T), NULL);
}
DWORD FindPattern(DWORD start, DWORD size, const char* sig, const char* mask) {
BYTE* data = new BYTE[size];
unsigned long bytesRead;
if (!ReadProcessMemory(_process, (LPVOID)start, data, size, &bytesRead)) {
return NULL;
}
for (DWORD i = 0; i < size; i++) {
if (DataCompare((const BYTE*)(data + i), (const BYTE*)sig, mask)) {
return start + i;
}
}
return NULL;
}
DWORD FindPatternArray(DWORD start, DWORD size, const char* mask, int count, ...) {
char* sig = new char[count + 1];
va_list ap;
va_start(ap, count);
for (int i = 0; i < count; i++) {
char read = va_arg(ap, char);
sig[i] = read;
}
va_end(ap);
sig[count] = '\0';
return FindPattern(start, size, sig, mask);
}
private:
HANDLE _process;
DWORD pID;
bool DataCompare(const BYTE* pData, const BYTE* pMask, const char* pszMask) {
for (; *pszMask; ++pszMask, ++pData, ++pMask) {
if (*pszMask == 'x' && *pData != *pMask) {
return false;
}
}
return (*pszMask == NULL);
}
};
Далее заходим в Main.cpp и прописываем туда инклуды:
Код:
#include <iostream>
#include <Windows.h>
#include "memory.h"
Дальше пишем оффсеты EntityList и dwSpotted. Если этот Radar Hack перестал работать, то вам стоит обновить эти два оффсета. Актуальные оффсеты - https://github.com/frk1/hazedumper/blob/master/csgo.cs
Код:
DWORD dwEntityList = 0x4C3B384;
DWORD dwSpotted = 0x939;
Код:
process memory;
PModule modClient;
Создаем функцию получения client_panorama.dll (Если на момент выхода темы ее изменили, то поставьте client.dll)
Код:
PModule* GetClientModule() {
if (modClient.dwBase == 0 && modClient.dwSize == 0) {
modClient = memory.GetModule("client_panorama.dll");
}
return &modClient;
}
Создаем функцию main
Код:
int main()
{
return 0;
}
Дальше создаем основные циклы:
Код:
while (true)
{
memory.Attach("csgo.exe", PROCESS_ALL_ACCESS);
for (int i = 1; i <= 64; i++)
{
DWORD dwEnemy = memory.Read<DWORD>((GetClientModule()->dwBase + dwEntityList) + i * 0x10);
memory.Write<int>(dwEnemy + dwSpotted, 1);
Sleep(1);
}
Sleep(1);
}
Полный код Main.cpp для
[LIKES=5]
Код:
#include <iostream>
#include <Windows.h>
#include "memory.h"
DWORD dwEntityList = 0x4C3B384;
DWORD dwSpotted = 0x939;
process memory;
PModule modClient;
PModule* GetClientModule() {
if (modClient.dwBase == 0 && modClient.dwSize == 0) {
modClient = memory.GetModule("client_panorama.dll");
}
return &modClient;
}
int main()
{
while (true)
{
memory.Attach("csgo.exe", PROCESS_ALL_ACCESS);
for (int i = 1; i <= 64; i++)
{
DWORD dwEnemy = memory.Read<DWORD>((GetClientModule()->dwBase + dwEntityList) + i * 0x10);
memory.Write<int>(dwEnemy + dwSpotted, 1);
Sleep(1);
}
Sleep(1);
}
return 0;
}
Последнее редактирование: