Гайд Как сделать ESP hack на движке Unity

ЗАЧЕМ ДУМАТЬ ЕСЛИ МОЖНО НЕ ДУМАТЬ
Пользователь
Статус
Оффлайн
Регистрация
25 Июл 2021
Сообщения
158
Реакции[?]
38
Поинты[?]
0
Будем брать простую игру
Пожалуйста, авторизуйтесь для просмотра ссылки.
. И так что нам надо
1)
Пожалуйста, авторизуйтесь для просмотра ссылки.
(и с++ яп)
2)Игра которую взламываем
3)
Пожалуйста, авторизуйтесь для просмотра ссылки.

4)В некоторых моментах
Пожалуйста, авторизуйтесь для просмотра ссылки.

5)Ну и последние умение читать и воспринимать информацию .
1 - 2 пункт я пропущу ( думаю вы сами знаете что делать ) .
3)
Пожалуйста, авторизуйтесь для просмотра ссылки.
- полезная вещь ( генератор SDK на Unity (ТОЛЬКО Il2cpp!!! )
И так скачиваем распаковываем и открываем видим это
1636059092900.png
Выбираем первый пункт
дальше выбираем global-metadata.dat
в моём случаи это D:\steam\steamapps\common\BLOCKPOST\BLOCKPOST_Data\il2cpp_data\Metadata
Дальше выбираем GameAssembly.dll
в моём случаи это D:\steam\steamapps\common\BLOCKPOST\

Дальше выбираем с++ , Export и выбираем путь сохранение

Видим SDK
1636058964059.png
на надо только 2 папки appdata & framework
Переносим их в папку с проектом где есть imgui
Пожалуйста, авторизуйтесь для просмотра ссылки.

И нам надо пофиксить SDK , для этого билдим проэкт и смотрим ошибки
и так видим ошибки
впринципи мы можем сразу переместить все файлы из appdata в framework и всё так и сделаем и удаляем в папке framework dllmain
и так билдим ещё раз
так заходим в helpers.cpp и удаляем эти две штуки
билдем.
И всё у нас готовый проект с миню и сдк .
Теперь переходим к написанию ESP (наконец то :d)
Создаём 2 новых файла ESP.cpp и ESP.h
в ESP.h пишем
C++:
class ESP
{
public:
    bool GetPlayerPos(int i, Vector2WH* posInScreenTrue);
    bool GetPlayerIsSpawnprotect(int i);
    app::PlayerData* GetPlayerData(int i);
    void Render();
    bool espActive;
    bool teamcheck;
    float colorWh[4] = { 0.780f, 0.031f, 0.756f,1.0f };
    float colorWhS[4] = { 0.007f, 0.152f, 0.788f,1.0f };
};
а в ESP.cpp пишем такой код

C++:
#include "ESP.h"
#include "framework/il2cpp-appdata.h"
#include <iostream>
#include "includes.h"
#include "Addrs.h"
app::PlayerData* ESP::GetPlayerData(int i) // Получает врага по номеру
{
    PlayerDataArray* pdataA = (PlayerDataArray*)(*app::PLH__TypeInfo)->static_fields->player;
    if(pdataA->Player[i] == nullptr) // проверка на существование врага
        return nullptr;
    if (pdataA->Player[i]->fields.currweapon == nullptr) // проверка на оружие
        return nullptr;
    if (pdataA->Player[i]->fields.bstate == 5) // проверка на смерть
        return nullptr;
    if (teamcheck == true) // проверка включин ли team check
    {
        if ((*app::Controll__TypeInfo)->static_fields->pl->fields.team == pdataA->Player[i]->fields.team) // если тима совпадает то return null
        {
            return nullptr;
        }
    }
    return pdataA->Player[i];
}
bool ESP::GetPlayerPos(int i, Vector2WH* posArray) // Получает позицию врага на экране
{   
    app::PlayerData* enemy = GetPlayerData(i); // получаем врага
    if (enemy == nullptr) // проверка на существование врага
        return false;
    app::Vector3 posHead = app::Transform_get_position(app::GameObject_get_transform(enemy->fields.goHead, nullptr), nullptr); // получаем голову в мире
    app::Vector3 WorldPosHead = app::Camera_WorldToScreenPoint((*app::Controll__TypeInfo)->static_fields->csCam, posHead, app::Camera_MonoOrStereoscopicEye__Enum::Mono, nullptr); // получаем голову на экране
    app::Vector3 WorldPosLeg = app::Camera_WorldToScreenPoint((*app::Controll__TypeInfo)->static_fields->csCam, { posHead.x,posHead.y - 2,posHead.z }, app::Camera_MonoOrStereoscopicEye__Enum::Mono, nullptr);  // получаем ноги  на экране
    if (WorldPosHead.z <= 1.0f) //  проверка чтоб не рисовало за экраном
        return false;
    if (WorldPosLeg.z <= 1.0f) //  проверка чтоб не рисовало за экраном
        return false;
    posArray->pos[0] = { WorldPosLeg.x,app::Screen_get_height(nullptr) - WorldPosLeg.y };
    posArray->pos[1] = { WorldPosHead.x,app::Screen_get_height(nullptr) - WorldPosHead.y };
    float width = abs(posArray->pos[0].y - posArray->pos[1].y) * 0.3f;
    posArray->pos[0] = { posArray->pos[0].x + width, posArray->pos[0].y };
    posArray->pos[1] = { posArray->pos[1].x - width, posArray->pos[1].y };
    return true;
}
bool ESP::GetPlayerIsSpawnprotect(int i) //Если в бессмертии
{
    app::PlayerData* enemy = GetPlayerData(i); //  получаем врага
    if (enemy == nullptr)   // проверка на существование врага
        return false;
    if (enemy->fields.spawnprotect) // Если в бессмертии вернуть правду
    {
        return true;
    }
    return false;
}

void ESP::Render()  // отрисовка вх
{
    for (int i = 0; i < 40; i++)
    {       
        Vector2WH pos;
        if (GetPlayerPos(i,&pos))
        {
            int SpawnProtectEnemy = GetPlayerIsSpawnprotect(i);
            if (SpawnProtectEnemy == 0)
                ImGui::GetBackgroundDrawList()->AddRect({ pos.pos[0].x,pos.pos[0].y }, { pos.pos[1].x,pos.pos[1].y }, ImColor{ colorWh[0],colorWh[1],colorWh[2],colorWh[3] }, 0, 15, 3);
            else
                ImGui::GetBackgroundDrawList()->AddRect({ pos.pos[0].x,pos.pos[0].y }, { pos.pos[1].x,pos.pos[1].y }, ImColor{ colorWhS[0],colorWhS[1],colorWhS[2],colorWhS[3] }, 0, 15, 3);
        }       
    }
}
далие заходим в main.cpp
и пишем такой код

C++:
// в самом вверху
#include "ESP.h"
ESP esp;

//в потоке меню
ImGui::Checkbox("ESP", &esp.espActive);
    ImGui::ColorEdit4("ESP COLOR", esp.colorWh);
    if (esp.espActive)
        esp.Render();
и всё у нас есть готовый wallHack 1636058927320.png


UPD :
Забил надо ещё в старте добавить init_il2cpp();

UPD: немного переделал код
 
Последнее редактирование:
Забаненный
Статус
Оффлайн
Регистрация
22 Апр 2020
Сообщения
731
Реакции[?]
752
Поинты[?]
1K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
(noad)
Пользователь
Статус
Оффлайн
Регистрация
21 Мар 2019
Сообщения
273
Реакции[?]
50
Поинты[?]
0
ЗАЧЕМ ДУМАТЬ ЕСЛИ МОЖНО НЕ ДУМАТЬ
Пользователь
Статус
Оффлайн
Регистрация
25 Июл 2021
Сообщения
158
Реакции[?]
38
Поинты[?]
0
Забаненный
Статус
Оффлайн
Регистрация
22 Апр 2020
Сообщения
731
Реакции[?]
752
Поинты[?]
1K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Мне это напоминает кое-что:
Объяснил бы поподробнее, новичок бы часть кода не понял)
Ну комментарии тут понятны довольно, да и в целом гайдов по юнити читам на C++ мало видел ( Ткните пальцем если есть, с удовольствием почитаю )
Код конечно оставляет желать лучшего
 
Пользователь
Статус
Оффлайн
Регистрация
4 Май 2021
Сообщения
431
Реакции[?]
89
Поинты[?]
17K
Ну комментарии тут понятны довольно, да и в целом гайдов по юнити читам на C++ мало видел ( Ткните пальцем если есть, с удовольствием почитаю )
Код конечно оставляет желать лучшего
там целая книга по геймхаккингу есть
 
Пользователь
Статус
Оффлайн
Регистрация
13 Мар 2018
Сообщения
306
Реакции[?]
52
Поинты[?]
1K
хороший гайд, мало сейчас такого, продолжай!
 
На самом деле я Zodiak
Участник
Статус
Оффлайн
Регистрация
22 Дек 2020
Сообщения
1,016
Реакции[?]
183
Поинты[?]
70K
Будем брать простую игру
Пожалуйста, авторизуйтесь для просмотра ссылки.
. И так что нам надо
1)
Пожалуйста, авторизуйтесь для просмотра ссылки.
(и с++ яп)
2)Игра которую взламываем
3)
Пожалуйста, авторизуйтесь для просмотра ссылки.

4)В некоторых моментах
Пожалуйста, авторизуйтесь для просмотра ссылки.

5)Ну и последние умение читать и воспринимать информацию .
1 - 2 пункт я пропущу ( думаю вы сами знаете что делать ) .
3)
Пожалуйста, авторизуйтесь для просмотра ссылки.
- полезная вещь ( генератор SDK на Unity (ТОЛЬКО Il2cpp!!! )
И так скачиваем распаковываем и открываем видим это
Посмотреть вложение 179018
Выбираем первый пункт
дальше выбираем global-metadata.dat
в моём случаи это D:\steam\steamapps\common\BLOCKPOST\BLOCKPOST_Data\il2cpp_data\Metadata
Дальше выбираем GameAssembly.dll
в моём случаи это D:\steam\steamapps\common\BLOCKPOST\

Дальше выбираем с++ , Export и выбираем путь сохранение

Видим SDK
Посмотреть вложение 179017
на надо только 2 папки appdata & framework
Переносим их в папку с проектом где есть imgui
Пожалуйста, авторизуйтесь для просмотра ссылки.

И нам надо пофиксить SDK , для этого билдим проэкт и смотрим ошибки
и так видим ошибки
впринципи мы можем сразу переместить все файлы из appdata в framework и всё так и сделаем и удаляем в папке framework dllmain
и так билдим ещё раз
так заходим в helpers.cpp и удаляем эти две штуки
билдем.
И всё у нас готовый проект с миню и сдк .
Теперь переходим к написанию ESP (наконец то :d)
Создаём 2 новых файла ESP.cpp и ESP.h
в ESP.h пишем
C++:
class ESP
{
public:
    bool GetPlayerPos(int i, Vector2WH* posInScreenTrue);
    bool GetPlayerIsSpawnprotect(int i);
    app::PlayerData* GetPlayerData(int i);
    void Render();
    bool espActive;
    bool teamcheck;
    float colorWh[4] = { 0.780f, 0.031f, 0.756f,1.0f };
    float colorWhS[4] = { 0.007f, 0.152f, 0.788f,1.0f };
};
а в ESP.cpp пишем такой код

C++:
#include "ESP.h"
#include "framework/il2cpp-appdata.h"
#include <iostream>
#include "includes.h"
#include "Addrs.h"
app::PlayerData* ESP::GetPlayerData(int i) // Получает врага по номеру
{
    PlayerDataArray* pdataA = (PlayerDataArray*)(*app::PLH__TypeInfo)->static_fields->player;
    if(pdataA->Player[i] == nullptr) // проверка на существование врага
        return nullptr;
    if (pdataA->Player[i]->fields.currweapon == nullptr) // проверка на оружие
        return nullptr;
    if (pdataA->Player[i]->fields.bstate == 5) // проверка на смерть
        return nullptr;
    if (teamcheck == true) // проверка включин ли team check
    {
        if ((*app::Controll__TypeInfo)->static_fields->pl->fields.team == pdataA->Player[i]->fields.team) // если тима совпадает то return null
        {
            return nullptr;
        }
    }
    return pdataA->Player[i];
}
bool ESP::GetPlayerPos(int i, Vector2WH* posArray) // Получает позицию врага на экране
{  
    app::PlayerData* enemy = GetPlayerData(i); // получаем врага
    if (enemy == nullptr) // проверка на существование врага
        return false;
    app::Vector3 posHead = app::Transform_get_position(app::GameObject_get_transform(enemy->fields.goHead, nullptr), nullptr); // получаем голову в мире
    app::Vector3 WorldPosHead = app::Camera_WorldToScreenPoint((*app::Controll__TypeInfo)->static_fields->csCam, posHead, app::Camera_MonoOrStereoscopicEye__Enum::Mono, nullptr); // получаем голову на экране
    app::Vector3 WorldPosLeg = app::Camera_WorldToScreenPoint((*app::Controll__TypeInfo)->static_fields->csCam, { posHead.x,posHead.y - 2,posHead.z }, app::Camera_MonoOrStereoscopicEye__Enum::Mono, nullptr);  // получаем ноги  на экране
    if (WorldPosHead.z <= 1.0f) //  проверка чтоб не рисовало за экраном
        return false;
    if (WorldPosLeg.z <= 1.0f) //  проверка чтоб не рисовало за экраном
        return false;
    posArray->pos[0] = { WorldPosLeg.x,app::Screen_get_height(nullptr) - WorldPosLeg.y };
    posArray->pos[1] = { WorldPosHead.x,app::Screen_get_height(nullptr) - WorldPosHead.y };
    float width = abs(posArray->pos[0].y - posArray->pos[1].y) * 0.3f;
    posArray->pos[0] = { posArray->pos[0].x + width, posArray->pos[0].y };
    posArray->pos[1] = { posArray->pos[1].x - width, posArray->pos[1].y };
    return true;
}
bool ESP::GetPlayerIsSpawnprotect(int i) //Если в бессмертии
{
    app::PlayerData* enemy = GetPlayerData(i); //  получаем врага
    if (enemy == nullptr)   // проверка на существование врага
        return false;
    if (enemy->fields.spawnprotect) // Если в бессмертии вернуть правду
    {
        return true;
    }
    return false;
}

void ESP::Render()  // отрисовка вх
{
    for (int i = 0; i < 40; i++)
    {      
        Vector2WH pos;
        if (GetPlayerPos(i,&pos))
        {
            int SpawnProtectEnemy = GetPlayerIsSpawnprotect(i);
            if (SpawnProtectEnemy == 0)
                ImGui::GetBackgroundDrawList()->AddRect({ pos.pos[0].x,pos.pos[0].y }, { pos.pos[1].x,pos.pos[1].y }, ImColor{ colorWh[0],colorWh[1],colorWh[2],colorWh[3] }, 0, 15, 3);
            else
                ImGui::GetBackgroundDrawList()->AddRect({ pos.pos[0].x,pos.pos[0].y }, { pos.pos[1].x,pos.pos[1].y }, ImColor{ colorWhS[0],colorWhS[1],colorWhS[2],colorWhS[3] }, 0, 15, 3);
        }      
    }
}
далие заходим в main.cpp
и пишем такой код

C++:
// в самом вверху
#include "ESP.h"
ESP esp;

//в потоке меню
ImGui::Checkbox("ESP", &esp.espActive);
    ImGui::ColorEdit4("ESP COLOR", esp.colorWh);
    if (esp.espActive)
        esp.Render();
и всё у нас есть готовый wallHack Посмотреть вложение 179016


UPD :
Забил надо ещё в старте добавить init_il2cpp();

UPD: немного переделал код
когда закидываю game-assembly ошибка
 
Олдфаг
Статус
Оффлайн
Регистрация
4 Янв 2020
Сообщения
2,995
Реакции[?]
1,275
Поинты[?]
5K
Ахуенный гайд, просто спасти и ничего не пойми
Если с классом есп хотя бы что-то понятно, то новичок не поймет как ты обращаешься к полям класса самой игры
 
Олдфаг
Статус
Оффлайн
Регистрация
4 Янв 2020
Сообщения
2,995
Реакции[?]
1,275
Поинты[?]
5K
Давай объективно и по правде.
3)
Пожалуйста, авторизуйтесь для просмотра ссылки.
- полезная вещь ( генератор SDK на Unity (ТОЛЬКО Il2cpp!!! )
И так скачиваем распаковываем и открываем видим это
Тут новичок вряд-ли поймет хоть что-то. Потому что вообще нигде не упомянул что такое il2cpp. Не упомянул для чего нам это SDK, скажем так сделал гайд для новичков, а на деле для тех кто уже имел опыт с читами и это SDK писал сам.
и так видим ошибки
впринципи мы можем сразу переместить все файлы из appdata в framework и всё так и сделаем и удаляем в папке framework dllmain
и так билдим ещё раз
так заходим в helpers.cpp и удаляем эти две штуки
билдем.
Тут извини, но даже я нихуя не понял, кроме того что где-то надо удалить точку входа. Формулируй мысль поточнее пожалуйста.
Итак, по всей видимости объяснять почему ты передаешь в функции именно эти аргументы не нужно. Ведь можно брать любые типы переменных?

bool GetPlayerPos(int i, Vector2WH* posInScreenTrue); bool GetPlayerIsSpawnprotect(int i); app::PlayerData* GetPlayerData(int i);
Откуда-то взялись адреса какие-то...
PlayerDataArray* pdataA = (PlayerDataArray*)(*app::PLH__TypeInfo)->static_fields->player;
Где объяснение того, что это вообще? Обращаешься к полю какого-то непонятного класса, мог бы хоть его в dnSpy показать, чтобы мы поняли почему именно он, а не десятки ему подобных?
Ты так формулируешь мысль, что кажется, будто ты сам не понимаешь что делаешь.
for (int i = 0; i < 40; i++)
Почему цикл листит именно до 40? Больше меньше религия новичку не позволит?
 
На самом деле я Zodiak
Участник
Статус
Оффлайн
Регистрация
22 Дек 2020
Сообщения
1,016
Реакции[?]
183
Поинты[?]
70K
Давай объективно и по правде.

Тут новичок вряд-ли поймет хоть что-то. Потому что вообще нигде не упомянул что такое il2cpp. Не упомянул для чего нам это SDK, скажем так сделал гайд для новичков, а на деле для тех кто уже имел опыт с читами и это SDK писал сам.

Тут извини, но даже я нихуя не понял, кроме того что где-то надо удалить точку входа. Формулируй мысль поточнее пожалуйста.
Итак, по всей видимости объяснять почему ты передаешь в функции именно эти аргументы не нужно. Ведь можно брать любые типы переменных?



Откуда-то взялись адреса какие-то...

Где объяснение того, что это вообще? Обращаешься к полю какого-то непонятного класса, мог бы хоть его в dnSpy показать, чтобы мы поняли почему именно он, а не десятки ему подобных?
Ты так формулируешь мысль, что кажется, будто ты сам не понимаешь что делаешь.

Почему цикл листит именно до 40? Больше меньше религия новичку не позволит?
глянь мою ошибку, если шаришь
 
Я люблю герои...
Забаненный
Статус
Оффлайн
Регистрация
13 Ноя 2019
Сообщения
1,067
Реакции[?]
202
Поинты[?]
2K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Будем брать простую игру
Пожалуйста, авторизуйтесь для просмотра ссылки.
. И так что нам надо
1)
Пожалуйста, авторизуйтесь для просмотра ссылки.
(и с++ яп)
2)Игра которую взламываем
3)
Пожалуйста, авторизуйтесь для просмотра ссылки.

4)В некоторых моментах
Пожалуйста, авторизуйтесь для просмотра ссылки.

5)Ну и последние умение читать и воспринимать информацию .
1 - 2 пункт я пропущу ( думаю вы сами знаете что делать ) .
3)
Пожалуйста, авторизуйтесь для просмотра ссылки.
- полезная вещь ( генератор SDK на Unity (ТОЛЬКО Il2cpp!!! )
И так скачиваем распаковываем и открываем видим это
Посмотреть вложение 179018
Выбираем первый пункт
дальше выбираем global-metadata.dat
в моём случаи это D:\steam\steamapps\common\BLOCKPOST\BLOCKPOST_Data\il2cpp_data\Metadata
Дальше выбираем GameAssembly.dll
в моём случаи это D:\steam\steamapps\common\BLOCKPOST\

Дальше выбираем с++ , Export и выбираем путь сохранение

Видим SDK
Посмотреть вложение 179017
на надо только 2 папки appdata & framework
Переносим их в папку с проектом где есть imgui
Пожалуйста, авторизуйтесь для просмотра ссылки.

И нам надо пофиксить SDK , для этого билдим проэкт и смотрим ошибки
и так видим ошибки
впринципи мы можем сразу переместить все файлы из appdata в framework и всё так и сделаем и удаляем в папке framework dllmain
и так билдим ещё раз
так заходим в helpers.cpp и удаляем эти две штуки
билдем.
И всё у нас готовый проект с миню и сдк .
Теперь переходим к написанию ESP (наконец то :d)
Создаём 2 новых файла ESP.cpp и ESP.h
в ESP.h пишем
C++:
class ESP
{
public:
    bool GetPlayerPos(int i, Vector2WH* posInScreenTrue);
    bool GetPlayerIsSpawnprotect(int i);
    app::PlayerData* GetPlayerData(int i);
    void Render();
    bool espActive;
    bool teamcheck;
    float colorWh[4] = { 0.780f, 0.031f, 0.756f,1.0f };
    float colorWhS[4] = { 0.007f, 0.152f, 0.788f,1.0f };
};
а в ESP.cpp пишем такой код

C++:
#include "ESP.h"
#include "framework/il2cpp-appdata.h"
#include <iostream>
#include "includes.h"
#include "Addrs.h"
app::PlayerData* ESP::GetPlayerData(int i) // Получает врага по номеру
{
    PlayerDataArray* pdataA = (PlayerDataArray*)(*app::PLH__TypeInfo)->static_fields->player;
    if(pdataA->Player[i] == nullptr) // проверка на существование врага
        return nullptr;
    if (pdataA->Player[i]->fields.currweapon == nullptr) // проверка на оружие
        return nullptr;
    if (pdataA->Player[i]->fields.bstate == 5) // проверка на смерть
        return nullptr;
    if (teamcheck == true) // проверка включин ли team check
    {
        if ((*app::Controll__TypeInfo)->static_fields->pl->fields.team == pdataA->Player[i]->fields.team) // если тима совпадает то return null
        {
            return nullptr;
        }
    }
    return pdataA->Player[i];
}
bool ESP::GetPlayerPos(int i, Vector2WH* posArray) // Получает позицию врага на экране
{  
    app::PlayerData* enemy = GetPlayerData(i); // получаем врага
    if (enemy == nullptr) // проверка на существование врага
        return false;
    app::Vector3 posHead = app::Transform_get_position(app::GameObject_get_transform(enemy->fields.goHead, nullptr), nullptr); // получаем голову в мире
    app::Vector3 WorldPosHead = app::Camera_WorldToScreenPoint((*app::Controll__TypeInfo)->static_fields->csCam, posHead, app::Camera_MonoOrStereoscopicEye__Enum::Mono, nullptr); // получаем голову на экране
    app::Vector3 WorldPosLeg = app::Camera_WorldToScreenPoint((*app::Controll__TypeInfo)->static_fields->csCam, { posHead.x,posHead.y - 2,posHead.z }, app::Camera_MonoOrStereoscopicEye__Enum::Mono, nullptr);  // получаем ноги  на экране
    if (WorldPosHead.z <= 1.0f) //  проверка чтоб не рисовало за экраном
        return false;
    if (WorldPosLeg.z <= 1.0f) //  проверка чтоб не рисовало за экраном
        return false;
    posArray->pos[0] = { WorldPosLeg.x,app::Screen_get_height(nullptr) - WorldPosLeg.y };
    posArray->pos[1] = { WorldPosHead.x,app::Screen_get_height(nullptr) - WorldPosHead.y };
    float width = abs(posArray->pos[0].y - posArray->pos[1].y) * 0.3f;
    posArray->pos[0] = { posArray->pos[0].x + width, posArray->pos[0].y };
    posArray->pos[1] = { posArray->pos[1].x - width, posArray->pos[1].y };
    return true;
}
bool ESP::GetPlayerIsSpawnprotect(int i) //Если в бессмертии
{
    app::PlayerData* enemy = GetPlayerData(i); //  получаем врага
    if (enemy == nullptr)   // проверка на существование врага
        return false;
    if (enemy->fields.spawnprotect) // Если в бессмертии вернуть правду
    {
        return true;
    }
    return false;
}

void ESP::Render()  // отрисовка вх
{
    for (int i = 0; i < 40; i++)
    {      
        Vector2WH pos;
        if (GetPlayerPos(i,&pos))
        {
            int SpawnProtectEnemy = GetPlayerIsSpawnprotect(i);
            if (SpawnProtectEnemy == 0)
                ImGui::GetBackgroundDrawList()->AddRect({ pos.pos[0].x,pos.pos[0].y }, { pos.pos[1].x,pos.pos[1].y }, ImColor{ colorWh[0],colorWh[1],colorWh[2],colorWh[3] }, 0, 15, 3);
            else
                ImGui::GetBackgroundDrawList()->AddRect({ pos.pos[0].x,pos.pos[0].y }, { pos.pos[1].x,pos.pos[1].y }, ImColor{ colorWhS[0],colorWhS[1],colorWhS[2],colorWhS[3] }, 0, 15, 3);
        }      
    }
}
далие заходим в main.cpp
и пишем такой код

C++:
// в самом вверху
#include "ESP.h"
ESP esp;

//в потоке меню
ImGui::Checkbox("ESP", &esp.espActive);
    ImGui::ColorEdit4("ESP COLOR", esp.colorWh);
    if (esp.espActive)
        esp.Render();
и всё у нас есть готовый wallHack Посмотреть вложение 179016


UPD :
Забил надо ещё в старте добавить init_il2cpp();

UPD: немного переделал код
Боксы бай aStonedPenguin для аимвара
 
ЗАЧЕМ ДУМАТЬ ЕСЛИ МОЖНО НЕ ДУМАТЬ
Пользователь
Статус
Оффлайн
Регистрация
25 Июл 2021
Сообщения
158
Реакции[?]
38
Поинты[?]
0
Давай объективно и по правде.

Тут новичок вряд-ли поймет хоть что-то. Потому что вообще нигде не упомянул что такое il2cpp. Не упомянул для чего нам это SDK, скажем так сделал гайд для новичков, а на деле для тех кто уже имел опыт с читами и это SDK писал сам.

Тут извини, но даже я нихуя не понял, кроме того что где-то надо удалить точку входа. Формулируй мысль поточнее пожалуйста.
Итак, по всей видимости объяснять почему ты передаешь в функции именно эти аргументы не нужно. Ведь можно брать любые типы переменных?



Откуда-то взялись адреса какие-то...

Где объяснение того, что это вообще? Обращаешься к полю какого-то непонятного класса, мог бы хоть его в dnSpy показать, чтобы мы поняли почему именно он, а не десятки ему подобных?
Ты так формулируешь мысль, что кажется, будто ты сам не понимаешь что делаешь.

Почему цикл листит именно до 40? Больше меньше религия новичку не позволит?
1) можно было и загуглить
1636697456208.png

2)да там скрины не давало загрузить вот и вышел скам
1636697500614.png
1636697510459.png
3)
это просто baseModule
C++:
class Addrs
{
public:
    static uintptr_t baseModule = reinterpret_cast<uintptr_t>(GetModuleHandle(TEXT("GameAssembly.dll")));
};
и что не понятно с
C++:
bool GetPlayerPos(int i, Vector2WH* posInScreenTrue); bool GetPlayerIsSpawnprotect(int i); app::PlayerData* GetPlayerData(int i);
?
4) Берём PlayerDataList из Static штуки
5) в игре максимум 40 человек на сервере
Обфускация
Ахуенный гайд, просто спасти и ничего не пойми
Если с классом есп хотя бы что-то понятно, то новичок не поймет как ты обращаешься к полям класса самой игры
+ я всё вроде в комментах объяснил :/
 
ЗАЧЕМ ДУМАТЬ ЕСЛИ МОЖНО НЕ ДУМАТЬ
Пользователь
Статус
Оффлайн
Регистрация
25 Июл 2021
Сообщения
158
Реакции[?]
38
Поинты[?]
0
дополнение до 2 1636697862716.png
Ахуенно объяснил, похлопаю
а что тебе не понятного ?
что есть в игре статическая память а есть динамическая или что?
хорошо вот подробно для тебя

PlayerDataArray* - это
C++:
class PlayerDataArray
{
public:
    char pad_0012[0xF]; //0x00c
    app::PlayerData* Player[40]; //0x0010   // смещение на дату
};
app::PLH__TypeInfo - это класс в котором есть статические штуки
player - это статическая штука (EntityList - для пастеров из ксго )
 
Сверху Снизу