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

Вопрос Minecraft — OpenGL чамсы без JNI хуков

Sloppy
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
13 Фев 2026
Сообщения
682
Реакции
18
Суть проблемы:
Реально ли подменить текстуры игроков или энтити в Minecraft, используя исключительно OpenGL хуки, то есть без вмешательства в JNI и JVM?

Что уже было протестировано:
Пытались отловить аргументы и стэк вызовов в следующих функциях:
  1. glBegin / glEnd
  2. glTexImage2D
  3. glBindTexture
  4. glArrayElement
  5. glDrawArrays / glDrawElements
Проблема в том, что никакой вменяемой инфы, за которую можно зацепиться для идентификации текстур сущностей, найти не получается. Все летит общим потоком.

Техническая справка по рендерингу:
Майнкрафт (особенно свежие версии) работает через LWJGL и активно использует шейдеры. Если вы хукаете голый OpenGL, вам нужно учитывать несколько нюансов:
  1. Скорее всего, энтити отрисовываются через glDrawElements. Чтобы выделить игрока, нужно смотреть на количество индексов (count) — у моделей персонажей оно часто константное.
  2. Текстуры могут находиться в атласах. Вместо одной текстуры скина вы можете видеть огромный лист со всеми ресурсами.
  3. В версиях с Core Profile (1.17+) нужно смотреть в сторону glUseProgram. Можно подменять шейдер на свой, который будет заливать модельку цветом (делая чамсы) при определенных условиях.
  4. Для классических чамсов (сквозь стены) обычно достаточно хукнуть отрисовку и перед вызовом рисования модели прописать glDisable(GL_DEPTH_TEST), а после — вернуть обратно.
Кто пробовал копать рендеринг майна на уровне нативного кода, есть ли способ адекватно фильтровать энтити без костылей с проверкой количества вершин?

Интересно послушать мысли тех, кто реализовывал подобное именно через внешний/внутренний DLL инжект, обходя Java-слой.
 
Суть проблемы:
Реально ли подменить текстуры игроков или энтити в Minecraft, используя исключительно OpenGL хуки, то есть без вмешательства в JNI и JVM?

Что уже было протестировано:
Пытались отловить аргументы и стэк вызовов в следующих функциях:
  1. glBegin / glEnd
  2. glTexImage2D
  3. glBindTexture
  4. glArrayElement
  5. glDrawArrays / glDrawElements
Проблема в том, что никакой вменяемой инфы, за которую можно зацепиться для идентификации текстур сущностей, найти не получается. Все летит общим потоком.

Техническая справка по рендерингу:
Майнкрафт (особенно свежие версии) работает через LWJGL и активно использует шейдеры. Если вы хукаете голый OpenGL, вам нужно учитывать несколько нюансов:
  1. Скорее всего, энтити отрисовываются через glDrawElements. Чтобы выделить игрока, нужно смотреть на количество индексов (count) — у моделей персонажей оно часто константное.
  2. Текстуры могут находиться в атласах. Вместо одной текстуры скина вы можете видеть огромный лист со всеми ресурсами.
  3. В версиях с Core Profile (1.17+) нужно смотреть в сторону glUseProgram. Можно подменять шейдер на свой, который будет заливать модельку цветом (делая чамсы) при определенных условиях.
  4. Для классических чамсов (сквозь стены) обычно достаточно хукнуть отрисовку и перед вызовом рисования модели прописать glDisable(GL_DEPTH_TEST), а после — вернуть обратно.
Кто пробовал копать рендеринг майна на уровне нативного кода, есть ли способ адекватно фильтровать энтити без костылей с проверкой количества вершин?

Интересно послушать мысли тех, кто реализовывал подобное именно через внешний/внутренний DLL инжект, обходя Java-слой.
нашел решение?
 
Суть проблемы:
Реально ли подменить текстуры игроков или энтити в Minecraft, используя исключительно OpenGL хуки, то есть без вмешательства в JNI и JVM?

Что уже было протестировано:
Пытались отловить аргументы и стэк вызовов в следующих функциях:
  1. glBegin / glEnd
  2. glTexImage2D
  3. glBindTexture
  4. glArrayElement
  5. glDrawArrays / glDrawElements
Проблема в том, что никакой вменяемой инфы, за которую можно зацепиться для идентификации текстур сущностей, найти не получается. Все летит общим потоком.

Техническая справка по рендерингу:
Майнкрафт (особенно свежие версии) работает через LWJGL и активно использует шейдеры. Если вы хукаете голый OpenGL, вам нужно учитывать несколько нюансов:
  1. Скорее всего, энтити отрисовываются через glDrawElements. Чтобы выделить игрока, нужно смотреть на количество индексов (count) — у моделей персонажей оно часто константное.
  2. Текстуры могут находиться в атласах. Вместо одной текстуры скина вы можете видеть огромный лист со всеми ресурсами.
  3. В версиях с Core Profile (1.17+) нужно смотреть в сторону glUseProgram. Можно подменять шейдер на свой, который будет заливать модельку цветом (делая чамсы) при определенных условиях.
  4. Для классических чамсов (сквозь стены) обычно достаточно хукнуть отрисовку и перед вызовом рисования модели прописать glDisable(GL_DEPTH_TEST), а после — вернуть обратно.
Кто пробовал копать рендеринг майна на уровне нативного кода, есть ли способ адекватно фильтровать энтити без костылей с проверкой количества вершин?

Интересно послушать мысли тех, кто реализовывал подобное именно через внешний/внутренний DLL инжект, обходя Java-слой.
чо а зачем тебе если можно сделать шейдером?
 
Суть проблемы:
Реально ли подменить текстуры игроков или энтити в Minecraft, используя исключительно OpenGL хуки, то есть без вмешательства в JNI и JVM?

Что уже было протестировано:
Пытались отловить аргументы и стэк вызовов в следующих функциях:
  1. glBegin / glEnd
  2. glTexImage2D
  3. glBindTexture
  4. glArrayElement
  5. glDrawArrays / glDrawElements
Проблема в том, что никакой вменяемой инфы, за которую можно зацепиться для идентификации текстур сущностей, найти не получается. Все летит общим потоком.

Техническая справка по рендерингу:
Майнкрафт (особенно свежие версии) работает через LWJGL и активно использует шейдеры. Если вы хукаете голый OpenGL, вам нужно учитывать несколько нюансов:
  1. Скорее всего, энтити отрисовываются через glDrawElements. Чтобы выделить игрока, нужно смотреть на количество индексов (count) — у моделей персонажей оно часто константное.
  2. Текстуры могут находиться в атласах. Вместо одной текстуры скина вы можете видеть огромный лист со всеми ресурсами.
  3. В версиях с Core Profile (1.17+) нужно смотреть в сторону glUseProgram. Можно подменять шейдер на свой, который будет заливать модельку цветом (делая чамсы) при определенных условиях.
  4. Для классических чамсов (сквозь стены) обычно достаточно хукнуть отрисовку и перед вызовом рисования модели прописать glDisable(GL_DEPTH_TEST), а после — вернуть обратно.
Кто пробовал копать рендеринг майна на уровне нативного кода, есть ли способ адекватно фильтровать энтити без костылей с проверкой количества вершин?

Интересно послушать мысли тех, кто реализовывал подобное именно через внешний/внутренний DLL инжект, обходя Java-слой.
а как JNI хукает джава методы можешь объяснить пж я просто не улавливаю здесь никакой связи между хуками и JNI
 
Назад
Сверху Снизу