Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Гайд Minecraft — Реверс рендеринга через Nsight Graphics для ESP

Sloppy
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
13 Фев 2026
Сообщения
567
Реакции
15
Здорова, реверсеры. Сегодня разберем, как перестать гадать на кофейной гуще и начать нормально препарировать рендеринг в играх на примере старого доброго Майна (версии 1.15 — 1.16.5). Работать будем через NVIDIA Nsight Graphics — это ультимативный тул для тех, кто хочет видеть каждый вызов OpenGL байтик к байтику.

Что нам это дает?
Мы сможем сделать полный фингерпринт функций OpenGL, вытащить данные буферов, шейдеры и понять, как игра рисует объекты, чтобы наш ESP не превратился в кашу из мусора.

Настройка проекта
Для начала цепляемся к процессу. В Nsight создаем новый проект, указываем путь к java.exe/javaw.exe.

Важный нюанс: аргументы командной строки берите из Process Hacker, но копируйте только сами аргументы, без пути к экзешнику, иначе дебаггер не заведется. Жмем Launch Frame Debugger, залетаем в мир и по F11 делаем захват кадра.

Анализ объектов
В Render Timeline ищем моменты отрисовки игрока и сундуков. К примеру, Event 181 и 296 — рендеринг выглядит почти идентично. Майн использует
Код:
Expand Collapse Copy
glScalef(1/15, 1/15, 1/15)
и
Код:
Expand Collapse Copy
glDrawArrays(Mode.Quads)
.

Препарируем вертексы
Чтобы понять, что именно мы рисуем, смотрим на glVertexPointer, glColorPointer и прочие. Везде страйд (stride) равен 36. Значит, структура нашего вертекса весит ровно 36 байт.

Код:
Expand Collapse Copy
unsafe struct Vertex
{
    public fixed float Position[3];
    public fixed byte Color[4];
    public fixed float TexCoord1[2];
    public fixed short TexCoord2[2];
    public fixed short TexCoord3[2];
    public fixed byte Normal[4];
}

Фильтрация моделей (Самый сок)
Просто ловить
Код:
Expand Collapse Copy
glDrawArrays
с 288 вертексами — плохая идея. Такое же количество вертексов может быть у кровати или лошади. Чтобы не рисовать боксы на мебели, используем фильтрацию по текстурным координатам (TexCoord).

  1. Хукаем glVertexPointer, чтобы сохранить указатель на текущий буфер.
  2. В хуке glDrawArrays проверяем не только количество вертексов, но и масштаб (scale).
  3. Если масштаб совпадает, лезем в буфер и проверяем конкретные TexCoord определенных полигонов.

У игроков, кроватей и лошадей текстурные координаты разные. Я подобрал предикаты для игрока, основываясь на данных из Nsight. Если координаты в буфере соответствуют нашей «карте», значит перед нами именно игрок.

Код:
Expand Collapse Copy
void DrawArrays(Mode mode, int first, int count)
{
    if (lastScaleF is not (1f / 15, 1f / 15, 1f / 15))
        return;

    if ((mode, first, count) is not (Mode.Quads, 0, 288))
        return;

    var quads = (Quad*)lastBuffer;
    var quadsCount = count / 4;

    if (!TexPredicates.Player.IsSuitable(quads, quadsCount))
        return;

    // Тут рисуем свой ESP (через LineLoop или новый буфер)
}

Итог
Через Nsight Graphics можно вытащить предикаты под любой объект: сундуки, элитры, мобов. Этот метод стабильнее, чем просто проверка количества вертексов, и позволяет писать легитные читы, которые не лагают и не мусорят на экране. Сурсы базы можно поискать на гитхабе, там есть примеры и под сундуки.

Кто пробовал юзать Nsight под новые версии с шейдерами (1.17+), как там обстоят дела с захватом кадров на новых драйверах?
 
Здорова, реверсеры. Сегодня разберем, как перестать гадать на кофейной гуще и начать нормально препарировать рендеринг в играх на примере старого доброго Майна (версии 1.15 — 1.16.5). Работать будем через NVIDIA Nsight Graphics — это ультимативный тул для тех, кто хочет видеть каждый вызов OpenGL байтик к байтику.

Что нам это дает?
Мы сможем сделать полный фингерпринт функций OpenGL, вытащить данные буферов, шейдеры и понять, как игра рисует объекты, чтобы наш ESP не превратился в кашу из мусора.

Настройка проекта
Для начала цепляемся к процессу. В Nsight создаем новый проект, указываем путь к java.exe/javaw.exe.

Важный нюанс: аргументы командной строки берите из Process Hacker, но копируйте только сами аргументы, без пути к экзешнику, иначе дебаггер не заведется. Жмем Launch Frame Debugger, залетаем в мир и по F11 делаем захват кадра.

Анализ объектов
В Render Timeline ищем моменты отрисовки игрока и сундуков. К примеру, Event 181 и 296 — рендеринг выглядит почти идентично. Майн использует
Код:
Expand Collapse Copy
glScalef(1/15, 1/15, 1/15)
и
Код:
Expand Collapse Copy
glDrawArrays(Mode.Quads)
.

Препарируем вертексы
Чтобы понять, что именно мы рисуем, смотрим на glVertexPointer, glColorPointer и прочие. Везде страйд (stride) равен 36. Значит, структура нашего вертекса весит ровно 36 байт.

Код:
Expand Collapse Copy
unsafe struct Vertex
{
    public fixed float Position[3];
    public fixed byte Color[4];
    public fixed float TexCoord1[2];
    public fixed short TexCoord2[2];
    public fixed short TexCoord3[2];
    public fixed byte Normal[4];
}

Фильтрация моделей (Самый сок)
Просто ловить
Код:
Expand Collapse Copy
glDrawArrays
с 288 вертексами — плохая идея. Такое же количество вертексов может быть у кровати или лошади. Чтобы не рисовать боксы на мебели, используем фильтрацию по текстурным координатам (TexCoord).

  1. Хукаем glVertexPointer, чтобы сохранить указатель на текущий буфер.
  2. В хуке glDrawArrays проверяем не только количество вертексов, но и масштаб (scale).
  3. Если масштаб совпадает, лезем в буфер и проверяем конкретные TexCoord определенных полигонов.

У игроков, кроватей и лошадей текстурные координаты разные. Я подобрал предикаты для игрока, основываясь на данных из Nsight. Если координаты в буфере соответствуют нашей «карте», значит перед нами именно игрок.

Код:
Expand Collapse Copy
void DrawArrays(Mode mode, int first, int count)
{
    if (lastScaleF is not (1f / 15, 1f / 15, 1f / 15))
        return;

    if ((mode, first, count) is not (Mode.Quads, 0, 288))
        return;

    var quads = (Quad*)lastBuffer;
    var quadsCount = count / 4;

    if (!TexPredicates.Player.IsSuitable(quads, quadsCount))
        return;

    // Тут рисуем свой ESP (через LineLoop или новый буфер)
}

Итог
Через Nsight Graphics можно вытащить предикаты под любой объект: сундуки, элитры, мобов. Этот метод стабильнее, чем просто проверка количества вертексов, и позволяет писать легитные читы, которые не лагают и не мусорят на экране. Сурсы базы можно поискать на гитхабе, там есть примеры и под сундуки.

Кто пробовал юзать Nsight под новые версии с шейдерами (1.17+), как там обстоят дела с захватом кадров на новых драйверах?
Узник ChatGPT
 
Здорова, реверсеры. Сегодня разберем, как перестать гадать на кофейной гуще и начать нормально препарировать рендеринг в играх на примере старого доброго Майна (версии 1.15 — 1.16.5). Работать будем через NVIDIA Nsight Graphics — это ультимативный тул для тех, кто хочет видеть каждый вызов OpenGL байтик к байтику.

Что нам это дает?
Мы сможем сделать полный фингерпринт функций OpenGL, вытащить данные буферов, шейдеры и понять, как игра рисует объекты, чтобы наш ESP не превратился в кашу из мусора.

Настройка проекта
Для начала цепляемся к процессу. В Nsight создаем новый проект, указываем путь к java.exe/javaw.exe.

Важный нюанс: аргументы командной строки берите из Process Hacker, но копируйте только сами аргументы, без пути к экзешнику, иначе дебаггер не заведется. Жмем Launch Frame Debugger, залетаем в мир и по F11 делаем захват кадра.

Анализ объектов
В Render Timeline ищем моменты отрисовки игрока и сундуков. К примеру, Event 181 и 296 — рендеринг выглядит почти идентично. Майн использует
Код:
Expand Collapse Copy
glScalef(1/15, 1/15, 1/15)
и
Код:
Expand Collapse Copy
glDrawArrays(Mode.Quads)
.

Препарируем вертексы
Чтобы понять, что именно мы рисуем, смотрим на glVertexPointer, glColorPointer и прочие. Везде страйд (stride) равен 36. Значит, структура нашего вертекса весит ровно 36 байт.

Код:
Expand Collapse Copy
unsafe struct Vertex
{
    public fixed float Position[3];
    public fixed byte Color[4];
    public fixed float TexCoord1[2];
    public fixed short TexCoord2[2];
    public fixed short TexCoord3[2];
    public fixed byte Normal[4];
}

Фильтрация моделей (Самый сок)
Просто ловить
Код:
Expand Collapse Copy
glDrawArrays
с 288 вертексами — плохая идея. Такое же количество вертексов может быть у кровати или лошади. Чтобы не рисовать боксы на мебели, используем фильтрацию по текстурным координатам (TexCoord).

  1. Хукаем glVertexPointer, чтобы сохранить указатель на текущий буфер.
  2. В хуке glDrawArrays проверяем не только количество вертексов, но и масштаб (scale).
  3. Если масштаб совпадает, лезем в буфер и проверяем конкретные TexCoord определенных полигонов.

У игроков, кроватей и лошадей текстурные координаты разные. Я подобрал предикаты для игрока, основываясь на данных из Nsight. Если координаты в буфере соответствуют нашей «карте», значит перед нами именно игрок.

Код:
Expand Collapse Copy
void DrawArrays(Mode mode, int first, int count)
{
    if (lastScaleF is not (1f / 15, 1f / 15, 1f / 15))
        return;

    if ((mode, first, count) is not (Mode.Quads, 0, 288))
        return;

    var quads = (Quad*)lastBuffer;
    var quadsCount = count / 4;

    if (!TexPredicates.Player.IsSuitable(quads, quadsCount))
        return;

    // Тут рисуем свой ESP (через LineLoop или новый буфер)
}

Итог
Через Nsight Graphics можно вытащить предикаты под любой объект: сундуки, элитры, мобов. Этот метод стабильнее, чем просто проверка количества вертексов, и позволяет писать легитные читы, которые не лагают и не мусорят на экране. Сурсы базы можно поискать на гитхабе, там есть примеры и под сундуки.

Кто пробовал юзать Nsight под новые версии с шейдерами (1.17+), как там обстоят дела с захватом кадров на новых драйверах?
сука почему такое одобрили
Nsight дебагер вообще блять, почему ЭТО одобрили
 
сука почему такое одобрили
Nsight дебагер вообще блять, почему ЭТО одобрили
а схуяли энсайт это не дебаггер? если ты чего-то не знаешь, то это ТОЛЬКО ТЫ не знаешь
я самый умный, разбираюсь во всём, не ошибаюсь ни в чём.
учись, лололошка.
 
а схуяли энсайт это не дебаггер? если ты чего-то не знаешь, то это ТОЛЬКО ТЫ не знаешь
я самый умный, разбираюсь во всём, не ошибаюсь ни в чём.
учись, лололошка.
да ну нахуй, впервые ответил без ии
 
Назад
Сверху Снизу