• Ну и что вы думаете? Мы взяли и создали свой собственный чат, с блекджеком и шлюхами, теперь все легенды в одном месте: даже те 1000 человек, которых мы забанили в старом чате 🫡 Будем публиковать там очень интересные подробности нового дизайна форума, oh yeah

    Вступай и становись легендой, пока это не стало поздно: жмякай на меня, ток не сильно(

Вопрос Почему не работает код C++ ESP?

Начинающий
Статус
Оффлайн
Регистрация
28 Дек 2024
Сообщения
14
Реакции[?]
0
Поинты[?]
0
Здравствуйте. Только начал разрабатывать читы для кс2. Не могу понять, почему не работает ESP в кс2 (его отрисовка)
Простите если я просто ступил, я не понимаю в чем ошибка. Делал опять же по туториалу. MessageBox'ы добавил для дебага (знаю плохая практика). Заранее спасибо, уже несколько дней бошку ломлю. Сделал на kiero hook dx11

C++:
float(*ViewMatrix)[4][4] = (float(*)[4][4])(client + dwViewMatrix);
if (!ViewMatrix)
    MessageBox(NULL, "ViewMatrix not found", "Error", MB_OK | MB_ICONERROR);
    return;

auto localPlayer = *(uintptr_t*)(client + dwLocalPlayerPawn);
if (!localPlayer)
    MessageBox(NULL, "LocalPlayer not found", "Error", MB_OK | MB_ICONERROR);
    return;

auto localTeam = *(UINT8*)(server + m_iTeamNum);

auto entityList = *(uintptr_t*)(client + dwEntityList);
if (!entityList)
    MessageBox(NULL, "EntityList not found", "Error", MB_OK | MB_ICONERROR);
    return;

for (int i = 1; i < 64; i++) {
    uintptr_t listEntry = *(uintptr_t*)(entityList + (8 * (i & 0x7FFF) >> 9) + 16);
    if (!listEntry) continue;

    uintptr_t playerController = *(uintptr_t*)(listEntry + 120 * (i & 0x1FF));
    if (!playerController) continue;

    uint32_t playerPawn = *(uint32_t*)(playerController + m_hPlayerPawn);
    if (!playerPawn) continue;

    uintptr_t listEntry2 = *(uintptr_t*)(entityList + 0x8 * ((playerPawn & 0x7FFF) >> 9) + 16);
    if (!listEntry2) continue;
    
    uintptr_t pCSPlayerPawnPtr = *(uintptr_t*)(listEntry2 + 120 * (playerPawn & 0x1FF));
    if (!pCSPlayerPawnPtr) continue;

    if (!test) { 
        MessageBox(NULL, "Found Entity", "Test", MB_ICONINFORMATION | MB_OK);
        test = true;
    }

    int health = *(INT32*)(pCSPlayerPawnPtr + m_iHealth);

    if (health <= 0)
        continue;

    int team = *(UINT8*)(pCSPlayerPawnPtr + m_iTeamNum);

    if (team == localTeam)
        continue;

    if (!test2) {
        MessageBox(NULL, "Found Enemy", "Test", MB_ICONINFORMATION | MB_OK);
        test2 = true;
    }

    Vector3 feetpos = *(Vector3*)(pCSPlayerPawnPtr + m_vOldOrigin);
    Vector3 headpos = { feetpos.x, feetpos.y, feetpos.z + 65.0f };

    Vector2 feet, head;

    if (feetpos.WorldToScreen(feet, ViewMatrix) && headpos.WorldToScreen(head, ViewMatrix)) {
        float height = (feet.y - head.y) * 1.5f;
        float width = height / 1.5f;

        float x = feet.x - width / 2;
        float y = head.y;

        ImGui::GetBackgroundDrawList()->AddRect({ x, y }, { x + width, y + height }, ImColor(255, 0, 0));
    }
}
C++:
const bool Vector3::WorldToScreen(Vector2& out, float(*ViewMatrix)[4][4])
{
    const float w = (*ViewMatrix)[3][0] * x + (*ViewMatrix)[3][1] * y + (*ViewMatrix)[3][2] * z + (*ViewMatrix)[3][3];

    if (w <= 0.01f)
        return false;

    const float invW = 1.0f / w;

    const float screenWidth = static_cast<float>(GetSystemMetrics(SM_CXSCREEN));
    const float screenHeight = static_cast<float>(GetSystemMetrics(SM_CYSCREEN));

    out.x = (screenWidth / 2) + (((*ViewMatrix)[0][0] * x + (*ViewMatrix)[0][1] * y + (*ViewMatrix)[0][2] * z + (*ViewMatrix)[0][3]) * invW * (screenWidth / 2));
    out.y = (screenHeight / 2) - (((*ViewMatrix)[1][0] * x + (*ViewMatrix)[1][1] * y + (*ViewMatrix)[1][2] * z + (*ViewMatrix)[1][3]) * invW * (screenHeight / 2));

    return true;
}
 
Начинающий
Статус
Оффлайн
Регистрация
12 Ноя 2024
Сообщения
37
Реакции[?]
0
Поинты[?]
2K
if (WorldToScreen(feetpos, feet, *ViewMatrix) && WorldToScreen(headpos, head, *ViewMatrix)) {
Попробуй на эту строку заменить но там скорее всего чёт с матрицей обновить над мб
 
09-29-2022 Thu 18:48:59
Эксперт
Статус
Оффлайн
Регистрация
28 Ноя 2019
Сообщения
1,276
Реакции[?]
421
Поинты[?]
122K
Здравствуйте. Только начал разрабатывать читы для кс2. Не могу понять, почему не работает ESP в кс2 (его отрисовка)
Простите если я просто ступил, я не понимаю в чем ошибка. Делал опять же по туториалу. MessageBox'ы добавил для дебага (знаю плохая практика). Заранее спасибо, уже несколько дней бошку ломлю. Сделал на kiero hook dx11

C++:
float(*ViewMatrix)[4][4] = (float(*)[4][4])(client + dwViewMatrix);
if (!ViewMatrix)
    MessageBox(NULL, "ViewMatrix not found", "Error", MB_OK | MB_ICONERROR);
    return;

auto localPlayer = *(uintptr_t*)(client + dwLocalPlayerPawn);
if (!localPlayer)
    MessageBox(NULL, "LocalPlayer not found", "Error", MB_OK | MB_ICONERROR);
    return;

auto localTeam = *(UINT8*)(server + m_iTeamNum);

auto entityList = *(uintptr_t*)(client + dwEntityList);
if (!entityList)
    MessageBox(NULL, "EntityList not found", "Error", MB_OK | MB_ICONERROR);
    return;

for (int i = 1; i < 64; i++) {
    uintptr_t listEntry = *(uintptr_t*)(entityList + (8 * (i & 0x7FFF) >> 9) + 16);
    if (!listEntry) continue;

    uintptr_t playerController = *(uintptr_t*)(listEntry + 120 * (i & 0x1FF));
    if (!playerController) continue;

    uint32_t playerPawn = *(uint32_t*)(playerController + m_hPlayerPawn);
    if (!playerPawn) continue;

    uintptr_t listEntry2 = *(uintptr_t*)(entityList + 0x8 * ((playerPawn & 0x7FFF) >> 9) + 16);
    if (!listEntry2) continue;
   
    uintptr_t pCSPlayerPawnPtr = *(uintptr_t*)(listEntry2 + 120 * (playerPawn & 0x1FF));
    if (!pCSPlayerPawnPtr) continue;

    if (!test) {
        MessageBox(NULL, "Found Entity", "Test", MB_ICONINFORMATION | MB_OK);
        test = true;
    }

    int health = *(INT32*)(pCSPlayerPawnPtr + m_iHealth);

    if (health <= 0)
        continue;

    int team = *(UINT8*)(pCSPlayerPawnPtr + m_iTeamNum);

    if (team == localTeam)
        continue;

    if (!test2) {
        MessageBox(NULL, "Found Enemy", "Test", MB_ICONINFORMATION | MB_OK);
        test2 = true;
    }

    Vector3 feetpos = *(Vector3*)(pCSPlayerPawnPtr + m_vOldOrigin);
    Vector3 headpos = { feetpos.x, feetpos.y, feetpos.z + 65.0f };

    Vector2 feet, head;

    if (feetpos.WorldToScreen(feet, ViewMatrix) && headpos.WorldToScreen(head, ViewMatrix)) {
        float height = (feet.y - head.y) * 1.5f;
        float width = height / 1.5f;

        float x = feet.x - width / 2;
        float y = head.y;

        ImGui::GetBackgroundDrawList()->AddRect({ x, y }, { x + width, y + height }, ImColor(255, 0, 0));
    }
}
C++:
const bool Vector3::WorldToScreen(Vector2& out, float(*ViewMatrix)[4][4])
{
    const float w = (*ViewMatrix)[3][0] * x + (*ViewMatrix)[3][1] * y + (*ViewMatrix)[3][2] * z + (*ViewMatrix)[3][3];

    if (w <= 0.01f)
        return false;

    const float invW = 1.0f / w;

    const float screenWidth = static_cast<float>(GetSystemMetrics(SM_CXSCREEN));
    const float screenHeight = static_cast<float>(GetSystemMetrics(SM_CYSCREEN));

    out.x = (screenWidth / 2) + (((*ViewMatrix)[0][0] * x + (*ViewMatrix)[0][1] * y + (*ViewMatrix)[0][2] * z + (*ViewMatrix)[0][3]) * invW * (screenWidth / 2));
    out.y = (screenHeight / 2) - (((*ViewMatrix)[1][0] * x + (*ViewMatrix)[1][1] * y + (*ViewMatrix)[1][2] * z + (*ViewMatrix)[1][3]) * invW * (screenHeight / 2));

    return true;
}
У тебя подход к разработке интернал чита изначально некорректный. Если ты делаешь интернал чит, то логичнее было бы пользоваться непосредственно средствами игры, использовать интерфейсы те же самые из игры, вместо того чтобы искать какие-то там оффсеты, которые ещё и станут неактуальными с последующим обновлением игры.

В любом случае начни с отладки своего кода, разберись, выполняется ли у тебя вообще функция, которая отвечает за отрисовку прямоугольника? В цикле какое-то условие, возможно, не выполняется, и поэтому оно естественно работать не будет.
Я так вот вообще ни разу не уверен в правильности этих оффсетов, из-за чего какое-то из условий и не выполняется как раз-таки
(UINT8*)(server + m_iTeamNum)
Не знаю, как у тебя определена переменная "server", но вот значение team num лежит в client.dll

if (!test) { MessageBox(NULL, "Found Entity", "Test", MB_ICONINFORMATION | MB_OK); test = true; }
Как-то не логично.
 
Начинающий
Статус
Оффлайн
Регистрация
28 Дек 2024
Сообщения
14
Реакции[?]
0
Поинты[?]
0
У тебя подход к разработке интернал чита изначально некорректный. Если ты делаешь интернал чит, то логичнее было бы пользоваться непосредственно средствами игры, использовать интерфейсы те же самые из игры, вместо того чтобы искать какие-то там оффсеты, которые ещё и станут неактуальными с последующим обновлением игры.

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

Не знаю, как у тебя определена переменная "server", но вот значение team num лежит в client.dll


Как-то не логично.
Здравствуйте, спасибо за ответ, хотел бы спросить, можете дать какие то туториалы? :) Я не умею хукать вообще, если вы не против, можете научить? Буду очень рад. Код писал сонным, так что такие ошибки есть(
 
Начинающий
Статус
Оффлайн
Регистрация
12 Ноя 2024
Сообщения
37
Реакции[?]
0
Поинты[?]
2K
Здравствуйте, спасибо за ответ, хотел бы спросить, можете дать какие то туториалы? :) Я не умею хукать вообще, если вы не против, можете научить? Буду очень рад. Код писал сонным, так что такие ошибки есть(
Могу сурс с есп дать кинь тг - дс
Могу сурс с есп дать кинь тг - дс
Он лёгкий там на офсетах все
 
09-29-2022 Thu 18:48:59
Эксперт
Статус
Оффлайн
Регистрация
28 Ноя 2019
Сообщения
1,276
Реакции[?]
421
Поинты[?]
122K
Здравствуйте, спасибо за ответ, хотел бы спросить, можете дать какие то туториалы? :) Я не умею хукать вообще, если вы не против, можете научить? Буду очень рад. Код писал сонным, так что такие ошибки есть(
Лучшим гайдом для начала будет изучение плюсов, чтобы было понимание вообще, что ты делаешь

Рекомендую разобраться, как работает движок, интерфейсы в нём (это база), сетевые переменные и т.д.

Более того, тебе нельзя обойтись без реверса игры, в любом случае, при каком-нибудь из обновлений игры поменяется индекс виртуальной функции когда ты ее хукаешь / вызываешь, устареть сигнатура, и т.д, ты должен быть готов к этому и понимать, как это все потом находить самостоятельно, а не просить у кого-то помощи.

Поэтому изучай параллельно реверс-инжиниринг, для этого используется чаще всего IDA, редко люди предпочитают Ghidra / Binary Ninja

Конечно все что выше касательно реверса в основном применимо к интернал читам, но в любом случае, это база, то что ты должен уметь

И если и будешь делать чит, то определись для начала с тем, какой это будет чит, экстернал или интернал.
Ты будто на двух стульях усидеть хочешь, у тебя и чит внедряется, и функцию из DX11 ты хукаешь для отрисовки собственной хуйни, но при этом читаешь память как экстерналы. Так не делается.
 
Начинающий
Статус
Оффлайн
Регистрация
28 Дек 2024
Сообщения
14
Реакции[?]
0
Поинты[?]
0
Лучшим гайдом для начала будет изучение плюсов, чтобы было понимание вообще, что ты делаешь

Рекомендую разобраться, как работает движок, интерфейсы в нём (это база), сетевые переменные и т.д.

Более того, тебе нельзя обойтись без реверса игры, в любом случае, при каком-нибудь из обновлений игры поменяется индекс виртуальной функции когда ты ее хукаешь / вызываешь, устареть сигнатура, и т.д, ты должен быть готов к этому и понимать, как это все потом находить самостоятельно, а не просить у кого-то помощи.

Поэтому изучай параллельно реверс-инжиниринг, для этого используется чаще всего IDA, редко люди предпочитают Ghidra / Binary Ninja

Конечно все что выше касательно реверса в основном применимо к интернал читам, но в любом случае, это база, то что ты должен уметь

И если и будешь делать чит, то определись для начала с тем, какой это будет чит, экстернал или интернал.
Ты будто на двух стульях усидеть хочешь, у тебя и чит внедряется, и функцию из DX11 ты хукаешь для отрисовки собственной хуйни, но при этом читаешь память как экстерналы. Так не делается.
Спасибо за ответ. C++ и программирование в целом я способен понимать, однако я не писал так обильно на плюсах. Я не прошу дать код и все, я хотел бы спросить туториалы как это делают люди, тк просто тыкаться и искать что то отнимет оооооочень много времени. Я хочу делать internal читы, и тк я только начал я предпочел что то полегче. C++ я все равно пытаюсь познать тоже, я не говорю что знаю. Знаю небольшую его часть(
 
Сверху Снизу