Guest User

Untitled

a guest
Feb 27th, 2018
648
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.75 KB | None | 0 0
  1. #pragma comment(lib,"OpenGL32.lib")
  2. #pragma comment(lib,"GLu32.lib")
  3.  
  4. #include <windows.h>
  5. #include <gl\gl.h>
  6. #include <gl\glu.h>
  7. #include <string>
  8. #include <stdio.h>
  9. #include <tlhelp32.h>
  10. #include <iostream>
  11.  
  12.  
  13. typedef void (APIENTRY *glBeginType)(GLenum);
  14. typedef void (APIENTRY *glEndType)(void);
  15. typedef void (APIENTRY *glClearType)(GLbitfield);
  16. typedef void (APIENTRY *glVertex3fvType)(const GLfloat *vertex);
  17. typedef void (APIENTRY *glVertex3fType)(GLfloat xCoord, GLfloat yCoord, GLfloat zCoord);
  18. typedef void (APIENTRY *glEnableType)(GLenum);
  19.  
  20. glBeginType hookedglBegin = NULL;
  21. glEndType hookedglEnd = NULL;
  22. glClearType hookedglClear = NULL;
  23. glVertex3fvType hookedglVertex3fv = NULL;
  24. glVertex3fType hookedglVertex3f = NULL;
  25. glEnableType hookedGlEnable = NULL;
  26.  
  27. bool toggle = false;
  28.  
  29. void APIENTRY Hooked_glBegin(GLenum mode)
  30. {
  31.  
  32.     (*hookedglBegin)(mode);
  33. }
  34.  
  35. void APIENTRY Hooked_glEnd(void)
  36. {
  37.  
  38.     (*hookedglEnd)();
  39. }
  40.  
  41. void APIENTRY Hooked_glVertex3fv(GLfloat *v)
  42. {
  43.  
  44.     (*hookedglVertex3fv)(v);
  45. }
  46.  
  47.  
  48. void APIENTRY Hooked_glVertex3f(GLfloat x, GLfloat y, GLfloat z)
  49. {
  50.  
  51.     (*hookedglVertex3f)(x, y, z);
  52. }
  53.  
  54. void APIENTRY Hooked_glClear(GLbitfield mask)
  55. {
  56.  
  57.     (*hookedGlEnable)(mask);
  58. }
  59.  
  60. void APIENTRY Hooked_glEnable(GLenum cap)
  61. {
  62.  
  63.     (*hookedGlEnable)(cap);
  64. }
  65.  
  66. void *DetourFunc(BYTE *src, const BYTE *dst, const int len)
  67. {
  68.     BYTE *jmp = (BYTE*)malloc(len + 5);
  69.     DWORD dwback;
  70.     VirtualProtect(src, len, PAGE_READWRITE, &dwback);
  71.     memcpy(jmp, src, len);
  72.     jmp += len;
  73.     jmp[0] = 0xE9;
  74.     *(DWORD*)(jmp + 1) = (DWORD)(src + len - jmp) - 5;
  75.     src[0] = 0xE9;
  76.     *(DWORD*)(src + 1) = (DWORD)(dst - src) - 5;
  77.     VirtualProtect(src, len, dwback, &dwback);
  78.     return (jmp - len);
  79. }
  80.  
  81. void HookOpenGL()
  82. {
  83.     HMODULE openGLModule = GetModuleHandle("opengl32.dll");
  84.     hookedglVertex3fv = (glVertex3fvType)DetourFunc((LPBYTE)GetProcAddress(openGLModule, "glVertex3fv"), (LPBYTE)&Hooked_glVertex3fv, 6);
  85.     hookedglVertex3f = (glVertex3fType)DetourFunc((LPBYTE)GetProcAddress(openGLModule, "glVertex3f"), (LPBYTE)&Hooked_glVertex3f, 6);
  86.     hookedglBegin = (glBeginType)DetourFunc((LPBYTE)GetProcAddress(openGLModule, "glBegin"), (LPBYTE)&Hooked_glBegin, 6);
  87.     hookedglEnd = (glEndType)DetourFunc((LPBYTE)GetProcAddress(openGLModule, "glEnd"), (LPBYTE)&Hooked_glEnd, 6);
  88.     hookedglClear = (glClearType)DetourFunc((LPBYTE)GetProcAddress(openGLModule, "glClear"), (LPBYTE)&Hooked_glClear, 7);
  89.     hookedGlEnable = (glEnableType)DetourFunc((LPBYTE)GetProcAddress(openGLModule, "glEnable"), (LPBYTE)&Hooked_glEnable, 6);
  90. }
  91.  
  92. DWORD WINAPI HookThread(LPVOID)
  93. {
  94.     HookOpenGL();
  95.  
  96.     return TRUE;
  97. }
  98.  
  99. BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID lpReserved)
  100. {
  101.     if (reason == DLL_PROCESS_ATTACH)
  102.     {
  103.         CreateThread(0, 0, HookThread, 0, 0, 0);
  104.     }
  105.     return TRUE;
  106. }
Advertisement
Add Comment
Please, Sign In to add comment