srg91

OGLHook [Плагин для использования OpenGL]

4 сообщения в этой теме

OGLHook v0.0.1

 

Добавляет возможность использовать функции библиотеки OPENG32.DLL и рисовать на экране игры (например как в этой теме).

Игра должна иметь подключенную библиотеку OPENG32.DLL.

 

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

 

Ссылка на скачивание: 

 

Проект будет не слишком активно допиливаться, приветствует пулл-реквесты и замечания вплоть до "ты конечно молодец, но вообще-то такое уже есть вот тут" (собственно велосипед ради велосипеда).

 

Небольшое описание:

Spoiler

Дабы копирайты были соблюдены (да и мне было не слишком париться), код прикрепления и вывод glOrtho был взят со stackoverflow.

Разрабатывался для Cheat Engine 6.6.

 

Плагин умеет:

  • Вызывать функции подключенной OPENGL32.DLL, такие как OPENGL32.glColor3f(1.0, 0, 0) и т. д.;
  • Использовать константы OpenGL по типу OPENGL32.GL_MODELVIEW;
  • Автоматически встраивает glOrtho поверх игры и позволяет быстро рисовать.

 

Не умеет:

  • Поддержка неопределенного количества функций (проверял на нескольких всего);
  • Содержит мало констант (возможно их можно выдирать из памяти, но если я правильно помню компилятором они заменяются на адреса памяти);
  • Не умеет получать размер окна, чтобы передавать в glOrtho;
  • Наверное много чего не умеет, напишите здесь свой вариант.

 

Будем развиваться (или найденные баги):

  • собственно весь код (не знаток Lua от слова совсем, будем развивать направление);
  • нужно больше констант;
  • думаю подключать GLU32.DLL;
  • вынести glOrtho в опционал, чтобы можно было инициализировать как хочешь;
  • вылетает на мелких программах, по типу KnowHowToDrawWithOpenGLLesson1.exe (но в играх или wglgears.exe)
    • собственно обсудив со SnedS91 думаем, что правильно ставить бряк и после инжектиться;
  • очень плохо взаимодействую с символами и памятью, нужно будет вкрячить правильные деструкторы и корректно перегружаться;
  • очень топорно затираю старые инструкции, нужно будет переиспользовать старый код (сейчас, например, счетчик FPS от Steam отваливается);
  • собственно тут тоже можете добавить свои варианты :).

 

Скриншоты:

  • TrainMe от Xipho  (спасибо посту и самому Xipho)
  • Spoiler

    DGftmUX.png

     

  • игра PapersPlease от Lucase Pope (спасибо Lucase Pope)
  • Spoiler

    bgMQJme.png

     

Пример вызова функции и использования констант:

OPENGL32.glColor3f(1.0, 0, 0)
OPENGL32.glMatrixMode(OPENGL32.GL_PROJECTION)

"Быстрый" пример использования в полевых условиях:

Spoiler

Вставляем код ниже в любой плагин (соответственно можно даже и в этот), загружаем CE, открываем игру.

Должны увидеть красный квадрат как на скриншотах :)


function TestDraw()
	OPENGL32.glColor3f(1.0, 0, 0)
	OPENGL32.glBegin(OPENGL32.GL_QUADS)
		OPENGL32.glVertex2f(0, 190)
		OPENGL32.glVertex2f(100, 190)
		OPENGL32.glVertex2f(100, 290)
		OPENGL32.glVertex2f(0, 290)
	OPENGL32.glEnd()
end

function onHotKey(pid)
	if process == nil or process == '' then
		openProcess(getForegroundProcess())
	end

	glHook = OGLHook_Create({0, 0, 640, 480})

	if type(glHook) == 'table' then
		glHook:registerUpdateFunc(TestDraw)
		glHook.update()
	end
end

 

 

Огромное спасибо SnedS91 за напоминание о том, что кодить на досуге можно и нужно, подсказки "не в бровь, а в глаз" по LUA и CE, main.lua, да и вообще хороший парень.

Собственно для его проекта я надеюсь и будет использована библиотека.

 

 

Изменено пользователем srg91
3

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ребят, сколько  пост перечитывал, ошибок не заметил.

Но они конечно же есть.  Пост поправить не получается. поэтому напишу отдельным комментом.

 

В быстром примере не скопирался хоткей, полный код ниже.

Собственно и не указал как использовать: зайти в игру и нажать Ctrl+Insert.
Код аттачится к игре и рисует красный прямоугольник:

Spoiler

function TestDraw()
	OPENGL32.glColor3f(1.0, 0, 0)
	OPENGL32.glBegin(OPENGL32.GL_QUADS)
		OPENGL32.glVertex2f(0, 190)
		OPENGL32.glVertex2f(100, 190)
		OPENGL32.glVertex2f(100, 290)
		OPENGL32.glVertex2f(0, 290)
	OPENGL32.glEnd()
end

function onHotKey(pid)
	if process == nil or process == '' then
		openProcess(getForegroundProcess())
	end

	glHook = OGLHook_Create({0, 0, 640, 480})

	if type(glHook) == 'table' then
		glHook:registerUpdateFunc(TestDraw)
		glHook.update()
	end
end

createHotkey(onHotKey,VK_INSERT,VK_CONTROL)

 

 

И совсем забыл упомянуть про возвращаемые значения.

Если, например, нужно выполнить функцию и получить результат её работы, то можно указать просто передать регистр.

Функция запишет в него значение, после выполнения.

 

Указывается как аргумент вызываемой функции, после текстового аргумента ->.

Пример (записываем результат wglCreateContext в регистр oglh_context:

OPENGL32.wglCreateContext('[oglh_window_hdc]', '->', 'oglh_context')

Регистр соответственно должен быть аллоцирован и зарегистрирован как символ ранее.

Изменено пользователем srg91
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

OGLHook v0.0.2

 

Ссылка на скачивание: 

Список изменений:

Spoiler
  • Добавлена возможность хука на лету или через breakpoint:
    • в OGLHook:init() добавлен параметр hot_attach (default = false);
    • при инициализации с hot_attach = true идет мгновенное встраивание в игру на лету, что не всегда стабильно, но не использует дебаггер;
    • при инициализации с hot_attach = false идет установка бряка на wglSwapBuffers и при его срабатывании выполняется инициализация. Это повышает стабильность, но требует подключение дебаггера.
  • Добавил небольшой деструктор - метод OGLHook:destory(), который очищает используемые регистры и символы:
    • вызывается в методе OGLHook:init() при пересоздании (если OGLHook уже создавался).
  • Сохраняются оригинальные опкоды:
    • теперь при запуске Steam игры, Cheat Engine и Fraps все три хука работают корректно
    Spoiler

    lbSVyDV.png

  • Размер области отрисовки растянут на всю игру

  • Добавлено больше констант OPENGL32 и константы GLU32

  • Небольшие фиксы

 

Пока изменения минимальны, поэтому почти без скриншотов.

 

1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Небольшой анонс версии v0.0.3:

Spoiler

 

Вывел через Cheat Engine 3D куб из Lesson 06 Nehe поверх интерфейса в Counter-Strike 1.6.

Изменено пользователем srg91
3

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас