hoosier18

Untitled

Dec 28th, 2016
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.49 KB | None | 0 0
  1. //0155DC6D   8B08             MOV ECX,DWORD PTR DS:[EAX]
  2. //0155DC6F   FF91 A8000000    CALL DWORD PTR DS:[ECX+A8]
  3.  
  4.  
  5.  
  6.  
  7. #include <windows.h>
  8. #include <d3d9.h>
  9. #include <d3dx9.h>
  10.  
  11. #pragma comment(lib, "d3d9.lib")
  12. #pragma comment(lib, "d3dx9.lib")
  13.  
  14. #define EndSceneEngine 0x0155DC6D
  15. DWORD retEndSceneEngine = (EndSceneEngine + 0x8);
  16.  
  17. #define Red     D3DCOLOR_ARGB( 255, 255, 000, 000 )
  18. #define Green   D3DCOLOR_ARGB( 255, 000, 255, 000 )
  19. #define Blue    D3DCOLOR_ARGB( 255, 000, 000, 255 )
  20. #define Black   D3DCOLOR_ARGB( 255, 000, 000, 000 )
  21.  
  22. LPD3DXFONT Font;
  23.  
  24. VOID StartFont(LPDIRECT3DDEVICE9 pDevice)
  25. {
  26.     if (Font)
  27.     {
  28.         Font->Release();
  29.         Font = NULL;
  30.     }
  31.  
  32.     if (!Font)
  33.     {
  34.         D3DXCreateFont(pDevice,
  35.             14,
  36.             0,
  37.             FW_BOLD,
  38.             1,
  39.             0,
  40.             DEFAULT_CHARSET,
  41.             OUT_DEFAULT_PRECIS,
  42.             DEFAULT_QUALITY,
  43.             DEFAULT_PITCH | FF_DONTCARE,
  44.             "Arial",
  45.             &Font);
  46.     }
  47. }
  48.  
  49. VOID WriteText(LPDIRECT3DDEVICE9 pDevice, INT x, INT y, DWORD color, CHAR *text)
  50. {
  51.     RECT rect;
  52.     SetRect(&rect, x, y, x, y);
  53.     Font->DrawText(NULL, text, -1, &rect, DT_NOCLIP | DT_LEFT, color);
  54. }
  55.  
  56. __declspec(naked) HRESULT WINAPI EndSceneMidfunction()
  57. {
  58.     static LPDIRECT3DDEVICE9 pDevice;
  59.  
  60.     __asm
  61.     {
  62.             MOV ECX, DWORD PTR DS : [EAX]
  63.             CALL DWORD PTR DS : [ECX + 0xA8]
  64.             MOV DWORD PTR DS : [pDevice], EAX
  65.             PUSHAD
  66.     }
  67.  
  68.     StartFont(pDevice);
  69.  
  70.     if (Font)
  71.         WriteText(pDevice, 300, 300, Red, "Hook EndScene");
  72.  
  73.     __asm
  74.     {
  75.            
  76.             POPAD
  77.             JMP retEndSceneEngine
  78.     }
  79. }
  80.  
  81. VOID *DetourCreate(BYTE *src, CONST BYTE *dst, CONST INT len)
  82. {
  83.     BYTE *jmp = (BYTE *)malloc(len + 5);
  84.     DWORD dwBack;
  85.  
  86.     VirtualProtect(src, len, PAGE_READWRITE, &dwBack);
  87.     memcpy(jmp, src, len);
  88.     jmp += len;
  89.     jmp[0] = 0xE9;
  90.     *(DWORD *)(jmp + 1) = (DWORD)(src + len - jmp) - 5;
  91.  
  92.     src[0] = 0xE9;
  93.     *(DWORD *)(src + 1) = (DWORD)(dst - src) - 5;
  94.     for (INT i = 5; i < len; i++)
  95.         src[i] = 0x90;
  96.     VirtualProtect(src, len, dwBack, &dwBack);
  97.  
  98.     return(jmp - len);
  99. }
  100.  
  101. DWORD WINAPI StartRoutine(LPVOID)
  102. {
  103.     while (TRUE)
  104.     {
  105.         if (memcmp((VOID *)EndSceneEngine, (VOID *)(PBYTE)"\x8B\x08", 2) == 0)
  106.         {
  107.             Sleep(100);
  108.             DetourCreate((PBYTE)EndSceneEngine, (PBYTE)EndSceneMidfunction, 5);
  109.         }
  110.         Sleep(50);
  111.     }
  112.  
  113.     return 0;
  114. }
  115.  
  116. BOOL WINAPI DllMain(HMODULE hDll, DWORD dwReason, LPVOID lpReserved)
  117. {
  118.     if (dwReason == DLL_PROCESS_ATTACH)
  119.     {
  120.         DisableThreadLibraryCalls(hDll);
  121.         //MessageBox(0, "Hook EndScene Engine", "blr", 0);
  122.         CreateThread(0, 0, (LPTHREAD_START_ROUTINE)StartRoutine, 0, 0, 0);
  123.     }
  124.  
  125.     return TRUE;
  126. }
Add Comment
Please, Sign In to add comment