Advertisement
ya_makaron

samp-server hook

Aug 30th, 2018
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.84 KB | None | 0 0
  1. #include <Windows.h>
  2.  
  3. unsigned long hk_addr, jmp_to;
  4.  
  5. void __declspec(naked) hk()
  6. {
  7.     __asm
  8.     {
  9.         push ebx
  10.         push esi
  11.         push edi
  12.         mov eax, [ebp - 0x8]
  13.         pushad
  14.         pushfd
  15.     }
  16.  
  17.     // отсюда нужно сделать вызов нашей функи Functions_Handler
  18.  
  19.     MessageBoxA(0, "Я в функе еее", "алферов сосет", MB_OK);
  20.  
  21.     __asm
  22.     {
  23.         popfd
  24.         popad
  25.         jmp jmp_to
  26.     }
  27. }
  28.  
  29. void create_jmp_hook(unsigned long addr, unsigned long dwJumpTo, unsigned int size)
  30. {
  31.     unsigned long old_protect;
  32.     VirtualProtect((void*)addr, size, PAGE_EXECUTE_READWRITE, &old_protect);
  33.  
  34.     *reinterpret_cast<unsigned char*>(addr) = 0xE9;
  35.     *reinterpret_cast<unsigned long*>(addr + 0x1) = dwJumpTo - addr - 0x5;
  36.  
  37.     for (unsigned long i = 0x5; i < size; i++)
  38.         *reinterpret_cast<unsigned char*>(addr + i) = 0x90;
  39.  
  40.     VirtualProtect((void*)addr, size, old_protect, &old_protect);
  41. }
  42.  
  43. bool DataCompare(const unsigned char* pData, const unsigned char* pattern, const char* mask)
  44. {
  45.     for (; *mask; ++mask, ++pData, ++pattern)
  46.         if (*pData != *pattern)
  47.             return false;
  48.     return (*mask) == NULL;
  49. }
  50.  
  51. unsigned long FindPattern(unsigned long start_address, unsigned char* pattern, char *mask)
  52. {
  53.     for (unsigned long i = 0;; i++)
  54.         if (DataCompare((unsigned char*)(start_address + i), pattern, mask))
  55.             return (unsigned long)(start_address + i);
  56.     return NULL;
  57. }
  58.  
  59. BOOL APIENTRY DllMain(HMODULE hModule, unsigned long ReasonForCall, void* lpReserved)
  60. {
  61.     if (ReasonForCall == DLL_PROCESS_ATTACH)
  62.     {
  63.         char mask[] = "xxxxxxxxxxxxxxxxxxxxxxx";
  64.         hk_addr = FindPattern((unsigned long)GetModuleHandleA("samp-server.exe"), (unsigned char*)"\x53\x56\x57\x8B\x45\xF8\x89\x65\xE8\x50\x8B\x45\xFC\xC7\x45\xFC\xFF\xFF\xFF\xFF\x89\x45\xF8", mask);
  65.         jmp_to = hk_addr + 6;
  66.         if (hk_addr) create_jmp_hook(hk_addr, (unsigned long)hk, 6);
  67.     }
  68.     return TRUE;
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement