Advertisement
Rapptz

functions.h

Dec 8th, 2012
667
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.70 KB | None | 0 0
  1. #include <Windows.h>
  2.  
  3. #define jmp(frm, to) (int)(((int)to - (int)frm) - 5)
  4.  
  5.  
  6.  
  7.  
  8. // don't do anything, it's not a functioni
  9.  
  10. DWORD ReadPointer1(CONST LPDWORD lpdwBase, CONST INT iOffset)
  11.  
  12. {
  13.  
  14.     __try { return *(LPDWORD)(*lpdwBase + iOffset); }
  15.  
  16.     __except (EXCEPTION_EXECUTE_HANDLER) { return NULL; }
  17.  
  18. }
  19.  
  20.  
  21. //Reads a Pointer
  22. unsigned long ReadPointer(unsigned long ulBase, int iOffset) //Now look at my read pointer.
  23. {
  24.    __try { return *(unsigned long*)(*(unsigned long*)ulBase + iOffset); }
  25.    __except (EXCEPTION_EXECUTE_HANDLER) { return 0; }
  26. }
  27.  
  28. //Reads Negative Pointers
  29. int ReadNegativePointer(int ulBase, int iOffset)
  30. {
  31.    __try { return *(int*)(*(int*)ulBase + iOffset); }
  32.    __except (EXCEPTION_EXECUTE_HANDLER) { return 0; }
  33. }
  34. //Writes a Pointer
  35. bool WritePointer(unsigned long ulBase, int iOffset, int iValue)
  36. {
  37.    __try { *(int*)(*(unsigned long*)ulBase + iOffset) = iValue; return true; }
  38.    __except (EXCEPTION_EXECUTE_HANDLER) { return false; }
  39. }
  40.  
  41. unsigned long GetPointedAddress(unsigned long ulBase, int iOffset)
  42. {
  43.     __try { return *(unsigned long*)ulBase + iOffset; }
  44.     __except (EXCEPTION_EXECUTE_HANDLER) { return 0; }
  45. }
  46.  
  47.  
  48. bool WriteValue(unsigned long ulBase, int iOffset, int iValue)
  49. {
  50.     __try { *(int*)(ulBase + iOffset) = iValue; return true; }
  51.     __except (EXCEPTION_EXECUTE_HANDLER) { return false; }
  52. }
  53. //WritePointer Function
  54. void Memory(PVOID address, void* val, int bytes)
  55. {
  56.     DWORD d, ds;
  57.     VirtualProtect(address, bytes, PAGE_EXECUTE_READWRITE, &d);
  58.     memcpy(address, val, bytes);
  59.     VirtualProtect(address,bytes,d,&ds);
  60. }
  61.  
  62. //waitn
  63. void MakePageWritable(unsigned long ulAddress, unsigned long ulSize)
  64. {
  65.         MEMORY_BASIC_INFORMATION* mbi = new MEMORY_BASIC_INFORMATION;
  66.         VirtualQuery((void*)ulAddress, mbi, ulSize);
  67.         if (mbi->Protect != PAGE_EXECUTE_READWRITE)
  68.         {
  69.                 unsigned long* ulProtect = new unsigned long;
  70.                 VirtualProtect((void*)ulAddress, ulSize, PAGE_EXECUTE_READWRITE, ulProtect);
  71.       delete ulProtect;
  72.         }
  73.  
  74.    delete mbi;
  75. }
  76.  
  77.  
  78.  
  79. //CALL Function
  80. bool Call(unsigned long ulAddress, void* Function, unsigned long ulNops)
  81.         {
  82.            __try
  83.            {  
  84.           *(unsigned char*)ulAddress = 0xE8;
  85.               *(unsigned long*)(ulAddress + 1) = jmp(ulAddress, Function);  
  86.           memset((void*)(ulAddress + 5), 0x90, ulNops);
  87.               return true;
  88.            }
  89.            __except (EXCEPTION_EXECUTE_HANDLER) { return false; }
  90.         }
  91. //JMPCALL Function
  92.         inline DWORD_PTR jmpcall(LPCVOID lpcvSrc, LPCVOID lpcvDest)
  93.         {
  94.            return reinterpret_cast<DWORD_PTR>(lpcvDest) - reinterpret_cast<DWORD_PTR>(lpcvSrc) - 5;
  95.         }
  96.  
  97.  
  98. //MakePageRWX Function
  99.         bool MakePageRWX(LPCVOID lpcvMemory)
  100.         {
  101.            MEMORY_BASIC_INFORMATION mbiInfo;
  102.            SecureZeroMemory(&mbiInfo, sizeof(MEMORY_BASIC_INFORMATION));
  103.  
  104.            if (VirtualQuery(lpcvMemory, &mbiInfo, sizeof(mbiInfo)) == 0)
  105.               return false;
  106.  
  107.            if (mbiInfo.Protect != PAGE_EXECUTE_READWRITE)
  108.            {
  109.               DWORD dwProtect = 0;
  110.               return (VirtualProtect(const_cast<LPVOID>(lpcvMemory), mbiInfo.RegionSize, PAGE_EXECUTE_READWRITE, &dwProtect) != FALSE);
  111.            }
  112.  
  113.            return true;
  114.         }
  115.  
  116.  
  117.  
  118.        
  119. //JUMPCALL Function
  120.         bool JumpCall(bool fJump, const LPBYTE lpbAddress, LPCVOID lpcvHook, const LPBYTE lpbBuffer, size_t cNops)
  121.         {
  122.            if (MakePageRWX(reinterpret_cast<LPCVOID>(lpbAddress)))
  123.            {
  124.               if (lpbBuffer != NULL)
  125.                  memcpy(reinterpret_cast<void*>(lpbBuffer), reinterpret_cast<const void*>(lpbAddress), cNops + 5);
  126.  
  127.               *lpbAddress = (fJump ? 0xE9 : 0xE8);
  128.               *reinterpret_cast<LPDWORD>(lpbAddress + 1) = jmpcall(lpbAddress, lpcvHook);
  129.  
  130.               if (cNops)
  131.                  memset(reinterpret_cast<void*>(lpbAddress + 5), 0x90, cNops);
  132.  
  133.               return true;
  134.            }
  135.  
  136.            return false;
  137.         }
  138.  
  139.  
  140.         void WriteMemory( unsigned long ulAddress, unsigned char ucAmount, ...)  
  141. {
  142.    //MakePageWritable(ulAddress, (unsigned long)ucAmount); //Make memory writable before any modifications are attempted
  143.      DWORD dwOldProtect;
  144.      VirtualProtect((void*)ulAddress, ucAmount, PAGE_EXECUTE_READWRITE, &dwOldProtect);//Unprotect memory
  145.  
  146.    va_list* va = new va_list;
  147.    va_start(*va, ucAmount);
  148.  
  149.    for (unsigned char ByteToWrite = va_arg(*va, unsigned char), ucIndex = 0; ucIndex < ucAmount; ucIndex++, ByteToWrite = va_arg(*va, unsigned char))
  150.    {
  151.       *(unsigned char*)(ulAddress + ucIndex) = ByteToWrite;
  152.    }
  153.  
  154.    va_end(*va);
  155.    delete va;
  156.  
  157.    VirtualProtect((void*)ulAddress, ucAmount, dwOldProtect, &dwOldProtect);//revert back to the original.
  158. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement