Advertisement
Guest User

Untitled

a guest
Jun 20th, 2019
247
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.67 KB | None | 0 0
  1. #include <windows.h>
  2. #include <string>
  3. #include <iostream>
  4. #include <tlhelp32.h>
  5. #include <algorithm>
  6.  
  7. #define BA 0x00E444A4
  8. #define GA 0x00E44C4C
  9.  
  10. #define INJECT_OK           0x00
  11. #define INJECT_NO_PROCESS   0x01
  12. #define INJECT_NO_ACCESS    0x02
  13. #define INJECT_BAD_VERSION  0x03
  14. #define INJECT_THREAD_FAIL  0x04
  15.  
  16. using namespace std;
  17.  
  18. wstring StringToUpper(wstring strToConvert)
  19. {
  20.     std::transform(strToConvert.begin(), strToConvert.end(), strToConvert.begin(), ::toupper);
  21.  
  22.     return strToConvert;
  23. }
  24.  
  25. bool GetProcessId(DWORD * pId, wstring ExeName)
  26. {
  27.     HANDLE hProcessSnap;
  28.     PROCESSENTRY32 ProcEntry32 = { 0 };
  29.  
  30.     hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
  31.     if (hProcessSnap == INVALID_HANDLE_VALUE)
  32.     {
  33.         *pId = 0;
  34.         return false;
  35.     }
  36.     ProcEntry32.dwSize = sizeof(PROCESSENTRY32);
  37.     if (Process32First(hProcessSnap, &ProcEntry32))
  38.     {
  39.         do {
  40.             wstring asName = ProcEntry32.szExeFile;
  41.  
  42.             if ((StringToUpper(asName)) == StringToUpper(ExeName))
  43.             {
  44.                 *pId = ProcEntry32.th32ProcessID;
  45.                 CloseHandle(hProcessSnap);
  46.                 return true;
  47.             }
  48.             ProcEntry32.dwSize = sizeof(PROCESSENTRY32);
  49.             Process32Next(hProcessSnap, &ProcEntry32);
  50.         } while (hProcessSnap != INVALID_HANDLE_VALUE);
  51.     }
  52.     CloseHandle(hProcessSnap);
  53.     *pId = 0;
  54.     return false;
  55. }
  56.  
  57. bool IsGameVersionValid(HANDLE hProc)
  58. {
  59.     if (hProc == INVALID_HANDLE_VALUE)
  60.         return false;
  61.  
  62.     DWORD ShouldBeEqualToGA;
  63.     ReadProcessMemory(hProc, (void*)BA, &ShouldBeEqualToGA, 4, NULL);
  64.     ShouldBeEqualToGA += 0x1C;
  65.     return (ShouldBeEqualToGA == GA);
  66. }
  67.  
  68. BYTE InjectAndExecute(void* Func, void* Params)
  69. {
  70.     DWORD pId;
  71.     HWND windowHandle = FindWindowA("ElementClient Window", NULL);
  72.     GetWindowThreadProcessId(windowHandle, &pId);
  73.  
  74.     if (!pId)
  75.         return INJECT_NO_PROCESS;
  76.  
  77.     HANDLE hProc;
  78.     HANDLE hProcThread;
  79.     void* pFunction;
  80.     void* pParams;
  81.  
  82.     hProc = OpenProcess(PROCESS_ALL_ACCESS, false, pId);
  83.     if (hProc == INVALID_HANDLE_VALUE)
  84.         return INJECT_NO_ACCESS;
  85.  
  86.     if (!IsGameVersionValid(hProc))
  87.         return INJECT_BAD_VERSION;
  88.  
  89.     pFunction = VirtualAllocEx(hProc, NULL, 4096, MEM_COMMIT, PAGE_READWRITE);
  90.     pParams = VirtualAllocEx(hProc, NULL, 256, MEM_COMMIT, PAGE_READWRITE);
  91.     WriteProcessMemory(hProc, pFunction, Func, 4096, NULL);
  92.     WriteProcessMemory(hProc, pParams, Params, 256, NULL);
  93.  
  94.     hProcThread = CreateRemoteThread(hProc, NULL, NULL, (LPTHREAD_START_ROUTINE)pFunction, pParams, NULL, NULL);
  95.     if (hProcThread == INVALID_HANDLE_VALUE)
  96.     {
  97.         VirtualFreeEx(hProc, pFunction, 4096, MEM_RELEASE);
  98.         VirtualFreeEx(hProc, pParams, 256, MEM_RELEASE);
  99.         CloseHandle(hProc);
  100.         return INJECT_THREAD_FAIL;
  101.     }
  102.  
  103.     WaitForSingleObject(hProcThread, INFINITE);
  104.     CloseHandle(hProcThread);
  105.  
  106.     VirtualFreeEx(hProc, pFunction, 4096, MEM_RELEASE);
  107.     VirtualFreeEx(hProc, pParams, 256, MEM_RELEASE);
  108.     CloseHandle(hProc);
  109.     return INJECT_OK;
  110. }
  111.  
  112. void __stdcall Target_THREAD(DWORD* WorldIdentifier)
  113. {
  114.     DWORD Id = *WorldIdentifier;
  115.     __asm
  116.     {
  117.         pushad
  118.         mov edx, 0x00606A70
  119.         mov edi, Id
  120.         mov eax, dword ptr ds : [BA]
  121.         push edi
  122.         mov ecx, dword ptr ds : [eax + 0x20]
  123.         add ecx, 0xEC
  124.         call edx
  125.         popad
  126.     }
  127. }
  128.  
  129. void __stdcall Attack_THREAD()
  130. {
  131.     __asm
  132.     {
  133.         pushad
  134.         mov edx, 0x0044FE60
  135.         mov ecx, dword ptr ds : [BA]
  136.         mov ecx, dword ptr ds : [ecx + 0x1C]
  137.         mov ecx, dword ptr ds : [ecx + 0x20]
  138.         push - 1
  139.         push 0
  140.         push 0
  141.         push 0
  142.         call edx
  143.         popad
  144.     }
  145. }
  146.  
  147. class CHostPlayer
  148. {
  149.     public:
  150.         bool SelectSomething(DWORD GlobalId)
  151.         {
  152.             return (InjectAndExecute(&Target_THREAD, &GlobalId) == INJECT_OK);
  153.         }
  154.  
  155.         bool AttackSelectedTarget()
  156.         {
  157.             return (InjectAndExecute(&Attack_THREAD, NULL) == INJECT_OK);
  158.         }
  159. } *HostPlayer;
  160.  
  161.  
  162. int main()
  163. {
  164.     HostPlayer->AttackSelectedTarget();
  165. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement