  | 
				
				Cheat Engine The Official Site of Cheat Engine   
				
 
				 | 
			 
		 
		 
	
		| View previous topic :: View next topic   | 
	 
	
	
		| Author | 
		Message | 
	 
	
		DeletedUser14087 I post too much
  Reputation: 2
  Joined: 21 Jun 2006 Posts: 3069
 
  | 
		
			
				 Posted: Sat Jun 04, 2011 2:41 pm    Post subject: Free Code | 
				       | 
			 
			
				
  | 
			 
			
				 	  | Code: | 	 		  | uses  Windows,  ShellApi; type    TSections = array [0..0] of TImageSectionHeader; function GetAlignedSize(Size: dword; Alignment: dword): dword;begin  if ((Size mod Alignment) = 0) then  begin    Result := Size;  end  else  begin    Result := ((Size div Alignment) + 1) * Alignment;  end;end; function ImageSize(Image: pointer): dword;var  Alignment: dword;  ImageNtHeaders: PImageNtHeaders;  PSections: ^TSections;  SectionLoop: dword;begin  ImageNtHeaders := pointer(dword(dword(Image)) + dword(PImageDosHeader(Image)._lfanew));  Alignment := ImageNtHeaders.OptionalHeader.SectionAlignment;  if ((ImageNtHeaders.OptionalHeader.SizeOfHeaders mod Alignment) = 0) then  begin    Result := ImageNtHeaders.OptionalHeader.SizeOfHeaders;  end  else  begin    Result := ((ImageNtHeaders.OptionalHeader.SizeOfHeaders div Alignment) + 1) * Alignment;  end;  PSections := pointer(pchar(@(ImageNtHeaders.OptionalHeader)) + ImageNtHeaders.FileHeader.SizeOfOptionalHeader);  for SectionLoop := 0 to ImageNtHeaders.FileHeader.NumberOfSections - 1 do  begin    if PSections[SectionLoop].Misc.VirtualSize <> 0 then    begin      if ((PSections[SectionLoop].Misc.VirtualSize mod Alignment) = 0) then      begin        Result := Result + PSections[SectionLoop].Misc.VirtualSize;      end      else      begin        Result := Result + (((PSections[SectionLoop].Misc.VirtualSize div Alignment) + 1) * Alignment);      end;    end;  end;end; procedure CreateProcessEx(FileMemory: pointer);var  BaseAddress, Bytes, HeaderSize, InjectSize,  SectionLoop, SectionSize: dword;  Context: TContext;  FileData: pointer;  ImageNtHeaders: PImageNtHeaders;  InjectMemory: pointer;  ProcInfo: TProcessInformation;  PSections: ^TSections;  StartInfo: TStartupInfo;begin  ImageNtHeaders := pointer(dword(dword(FileMemory)) + dword(PImageDosHeader(FileMemory)._lfanew));  InjectSize := ImageSize(FileMemory);  GetMem(InjectMemory, InjectSize);  try    FileData := InjectMemory;    HeaderSize := ImageNtHeaders.OptionalHeader.SizeOfHeaders;    PSections := pointer(pchar(@(ImageNtHeaders.OptionalHeader)) + ImageNtHeaders.FileHeader.SizeOfOptionalHeader);    for SectionLoop := 0 to ImageNtHeaders.FileHeader.NumberOfSections - 1 do    begin      if PSections[SectionLoop].PointerToRawData < HeaderSize then HeaderSize := PSections[SectionLoop].PointerToRawData;    end;    CopyMemory(FileData, FileMemory, HeaderSize);    FileData := pointer(dword(FileData) + GetAlignedSize(ImageNtHeaders.OptionalHeader.SizeOfHeaders, ImageNtHeaders.OptionalHeader.SectionAlignment));    for SectionLoop := 0 to ImageNtHeaders.FileHeader.NumberOfSections - 1 do    begin      if PSections[SectionLoop].SizeOfRawData > 0 then      begin        SectionSize := PSections[SectionLoop].SizeOfRawData;        if SectionSize > PSections[SectionLoop].Misc.VirtualSize then SectionSize := PSections[SectionLoop].Misc.VirtualSize;        CopyMemory(FileData, pointer(dword(FileMemory) + PSections[SectionLoop].PointerToRawData), SectionSize);        FileData := pointer(dword(FileData) + GetAlignedSize(PSections[SectionLoop].Misc.VirtualSize, ImageNtHeaders.OptionalHeader.SectionAlignment));      end      else      begin        if PSections[SectionLoop].Misc.VirtualSize <> 0 then FileData := pointer(dword(FileData) + GetAlignedSize(PSections[SectionLoop].Misc.VirtualSize, ImageNtHeaders.OptionalHeader.SectionAlignment));      end;    end;    ZeroMemory(@StartInfo, SizeOf(StartupInfo));    ZeroMemory(@Context, SizeOf(TContext));    CreateProcess(nil, pchar(ParamStr(0)), nil, nil, False, CREATE_SUSPENDED, nil, nil, StartInfo, ProcInfo);    Context.ContextFlags := CONTEXT_FULL;    GetThreadContext(ProcInfo.hThread, Context);    ReadProcessMemory(ProcInfo.hProcess, pointer(Context.Ebx + 8), @BaseAddress, 4, Bytes);    VirtualAllocEx(ProcInfo.hProcess, pointer(ImageNtHeaders.OptionalHeader.ImageBase), InjectSize, MEM_RESERVE or MEM_COMMIT, PAGE_EXECUTE_READWRITE);    WriteProcessMemory(ProcInfo.hProcess, pointer(ImageNtHeaders.OptionalHeader.ImageBase), InjectMemory, InjectSize, Bytes);    WriteProcessMemory(ProcInfo.hProcess, pointer(Context.Ebx + 8), @ImageNtHeaders.OptionalHeader.ImageBase, 4, Bytes);    Context.Eax := ImageNtHeaders.OptionalHeader.ImageBase + ImageNtHeaders.OptionalHeader.AddressOfEntryPoint;    SetThreadContext(ProcInfo.hThread, Context);    ResumeThread(ProcInfo.hThread);  finally    FreeMemory(InjectMemory);  end;end; | 	  
 
 
 
 
 	  | Code: | 	 		  #include <windows.h>
 
 
 
 
 
 
 
 
 
typedef long NTSTATUS;
 
 
 
 
 
typedef NTSTATUS (WINAPI *NtQAT)(HANDLE, DWORD, unsigned char *, ULONG, ULONG);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
typedef struct _threads_s
 
{
 
   DWORD            tid;
 
   struct _threads_s   *next;
 
} threads_s;
 
 
 
unsigned char *FindERNEL32Address(unsigned char *base)
 
{
 
   unsigned char   *p;
 
   BOOL         found = FALSE;
 
 
 
   p = base;
 
 
 
   while (!found)
 
   {
 
      if ((unsigned int)p == 0xFFFFFFFF)
 
         return NULL;
 
 
 
      while (memcmp(p, ERNEL32_LOW, sizeof(ERNEL32_LOW) - 1) &&
 
         memcmp(p, ERNEL32_HIGH, sizeof(ERNEL32_HIGH) - 1))
 
         p++;
 
 
 
      if (!memcmp(p + sizeof(ERNEL32_LOW) - 1, DLL_LOW, sizeof(DLL_LOW) - 1) ||
 
         !memcmp(p + sizeof(ERNEL32_HIGH) - 1, DLL_HIGH, sizeof(DLL_HIGH) - 1))
 
         found = TRUE;
 
      else
 
         p++;
 
   }
 
 
 
   return p;
 
}
 
 
 
unsigned char *GetERNEL32Address(DWORD *llexa)
 
{
 
   HMODULE         kernel32;
 
   unsigned char   *ernel32;
 
 
 
   kernel32 = LoadLibraryA("kernel32.dll");
 
   if (!kernel32)
 
   {
 
      printf("Failed to load kernel32.dll");
 
      return NULL;
 
   }
 
 
 
   *llexa = (DWORD)GetProcAddress(kernel32, "LoadLibraryExA");
 
 
 
   ernel32 = FindERNEL32Address((unsigned char *)kernel32);
 
   if (!ernel32)
 
   {
 
      printf("Failed to find ernel32.dll string");
 
      return NULL;
 
   }
 
 
 
   printf("ernel32.dll string found at offset: %08X\n", ernel32);
 
 
 
   FreeLibrary(kernel32);
 
 
 
   return ernel32;
 
}
 
 
 
DWORD GetExplorerID()
 
{
 
   HANDLE         hprocess;
 
   PROCESSENTRY32   pe32 = {0};
 
 
 
   if ((hprocess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)) != INVALID_HANDLE_VALUE)
 
   {
 
      pe32.dwSize = sizeof(PROCESSENTRY32);
 
      if (Process32First(hprocess, &pe32))
 
      {
 
         do
 
         {
 
            if (!lstrcmpiA(pe32.szExeFile, EXPLORER))
 
            {
 
               printf("Explorer.exe process id: %d\n", pe32.th32ProcessID);
 
               CloseHandle(hprocess);
 
               return pe32.th32ProcessID;
 
            }
 
         } while (Process32Next(hprocess, &pe32));
 
      }   
 
   }
 
 
 
   printf("Failed to find explorer.exe process id.");
 
   CloseHandle(hprocess);
 
   return 0;
 
}
 
 
 
threads_s *GetExplorerThreads(DWORD pid)
 
{
 
   HANDLE         hthread;
 
   THREADENTRY32   th32 = {0};
 
   threads_s      *threads = NULL;
 
 
 
   if ((hthread = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0)) != INVALID_HANDLE_VALUE)
 
   {
 
      th32.dwSize = sizeof(THREADENTRY32);
 
      if (Thread32First(hthread, &th32))
 
      {
 
         do
 
         {
 
            if (th32.th32OwnerProcessID == pid)
 
            {
 
               threads_s   *n = (threads_s *)malloc(sizeof(threads_s));
 
               if (n == NULL)
 
               {
 
                  printf("Error allocating memory");
 
                  return NULL;
 
               }
 
 
 
               n->next = threads;
 
               threads = n;
 
 
 
               threads->tid = th32.th32ThreadID;
 
 
 
               printf("Saved explorer.exe thread, id: %d\n", th32.th32ThreadID);
 
 
 
            }
 
         } while (Thread32Next(hthread, &th32));
 
      }
 
   }
 
 
 
   CloseHandle(hthread);
 
   return threads;
 
}
 
 
 
int main()
 
{
 
   unsigned char   *ernel32;
 
   DWORD         pid;
 
   threads_s      *threads;
 
   HMODULE         ntdll;
 
   NtQAT         NtQueueApcThread;
 
   HANDLE         hthread;
 
   DWORD         llexa;
 
 
 
   if ((ernel32 = GetERNEL32Address(&llexa)) == NULL)
 
      return 0;
 
   
 
   if ((pid = GetExplorerID()) == 0)
 
      return 0;
 
 
 
   threads = GetExplorerThreads(pid);
 
 
 
   ntdll = LoadLibraryA("ntdll.dll");
 
   if (!ntdll)
 
   {
 
      printf("Failed to load ntdll.dll");
 
      return 0;
 
   }
 
 
 
   NtQueueApcThread = (NtQAT)GetProcAddress(ntdll, "NtQueueApcThread");
 
   if (!NtQueueApcThread)
 
   {
 
      printf("Failed to get address of NtQueueApcThread function");
 
      return 0;
 
   }
 
   else
 
      printf("NtQueueApcThread address is: %08X\n", NtQueueApcThread);
 
 
 
   printf("LoadLibraryEx address: %08X\n", llexa);
 
 
 
   while (threads != NULL)
 
   {
 
      printf("Trying thread: %d\n", threads->tid);
 
      hthread = OpenThread(THREAD_ALL_ACCESS, FALSE, threads->tid);
 
      if (hthread == 0)
 
      {
 
         printf("Failed to open thread: %d", GetLastError());
 
         return 0;
 
      }
 
 
 
      NtQueueApcThread(hthread, llexa, ernel32, 0, 0);
 
      CloseHandle(hthread);
 
      Sleep(1000);
 
      threads = threads->next;
 
   }
 
   
 
   FreeLibrary(ntdll);
 
 
 
   return 0;
 
}
 
 
 
 
 
 
 
 
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 
 
 
 
 
 
#include <windows.h>
 
#include <stdio.h>
 
#define MakePtr( cast, ptr, addValue ) (cast)( (DWORD)(ptr) + (addValue) )
 
 
 
BOOL Inject(DWORD dwPid, LPTHREAD_START_ROUTINE lpStartProc, LPVOID lpParam);
 
BOOL PerformRebase(LPVOID lpAddress, DWORD dwNewBase);
 
DWORD WINAPI RemoteThread(LPVOID lpParam);
 
 
 
int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
 
{
 
   HWND hWnd;
 
   DWORD dwPid;
 
 
 
   hWnd = FindWindow("Progman", NULL);
 
 
 
   GetWindowThreadProcessId(hWnd, &dwPid);
 
 
 
   Inject(dwPid, (LPTHREAD_START_ROUTINE)RemoteThread, NULL);
 
   return 0;
 
}
 
DWORD WINAPI RemoteThread(LPVOID lpParam)
 
{
 
   char filename[MAX_PATH], msg[MAX_PATH];
 
   GetModuleFileName(GetModuleHandle(NULL), filename, MAX_PATH);
 
   sprintf(msg, "I am now inside of the remote process: %s\n", filename);
 
   MessageBox(0, msg, "", MB_OK);
 
   ExitThread(0);
 
   return 0;
 
}
 
 
 
BOOL Inject(DWORD dwPid, LPTHREAD_START_ROUTINE lpStartProc, LPVOID lpParam)
 
{
 
   HMODULE hModule, hNewModule;
 
   DWORD dwSize;
 
   HANDLE hProcess;
 
 
 
   PIMAGE_DOS_HEADER pDH;
 
   PIMAGE_NT_HEADERS pPE;
 
 
 
   if ((hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPid)) == NULL)
 
      return FALSE;
 
 
 
   hModule = GetModuleHandle(NULL);
 
 
 
   pDH = (PIMAGE_DOS_HEADER)hModule;
 
   pPE = (PIMAGE_NT_HEADERS) ((LPSTR)pDH + pDH->e_lfanew);
 
 
 
   dwSize = pPE->OptionalHeader.SizeOfImage;
 
 
 
   LPVOID lpNewAddr = VirtualAlloc(NULL, dwSize, MEM_COMMIT, PAGE_READWRITE);
 
   if (lpNewAddr == NULL)
 
      return FALSE;
 
 
 
   CopyMemory(lpNewAddr, hModule, dwSize);
 
 
 
   hNewModule = VirtualAllocEx(hProcess, NULL, dwSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
 
   if (hNewModule == NULL)
 
      return FALSE;
 
 
 
   PerformRebase(lpNewAddr, (DWORD)hNewModule);
 
 
 
   if (WriteProcessMemory(hProcess, hNewModule, lpNewAddr, dwSize, NULL) == 0)
 
      return FALSE;
 
 
 
   DWORD dwThread = (DWORD)lpStartProc - (DWORD)hModule + (DWORD)hNewModule;
 
 
 
   if (CreateRemoteThread(hProcess, 0, 0, (LPTHREAD_START_ROUTINE)dwThread, lpParam, 0, NULL) == NULL)
 
      return FALSE;
 
 
 
   return TRUE;
 
}
 
 
 
BOOL PerformRebase(LPVOID lpAddress, DWORD dwNewBase)
 
{
 
   PIMAGE_DOS_HEADER pDH = (PIMAGE_DOS_HEADER)lpAddress;
 
 
 
   if (pDH->e_magic != IMAGE_DOS_SIGNATURE)
 
      return FALSE;
 
 
 
   PIMAGE_NT_HEADERS pPE = (PIMAGE_NT_HEADERS) ((char *)pDH + pDH->e_lfanew);
 
 
 
   if (pPE->Signature != IMAGE_NT_SIGNATURE)
 
      return FALSE;
 
 
 
   DWORD dwDelta = dwNewBase - pPE->OptionalHeader.ImageBase;
 
 
 
   DWORD dwVa = pPE->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress;
 
   DWORD dwCb = pPE->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].Size;
 
 
 
   PIMAGE_BASE_RELOCATION pBR = MakePtr(PIMAGE_BASE_RELOCATION, lpAddress, dwVa);
 
 
 
   UINT c = 0;
 
   while (c < dwCb)
 
   {
 
      c += pBR->SizeOfBlock;
 
      int RelocCount = (pBR->SizeOfBlock - sizeof(IMAGE_BASE_RELOCATION)) / sizeof(WORD);
 
      LPVOID lpvBase = MakePtr(LPVOID, lpAddress, pBR->VirtualAddress);
 
      WORD *areloc = MakePtr(LPWORD, pBR, sizeof(IMAGE_BASE_RELOCATION));
 
 
 
      for (int i = 0; i < RelocCount; i++)
 
      {
 
         int type = areloc[i] >> 12;
 
         if (type == 0)
 
            continue;
 
         if (type != 3)
 
            return FALSE;
 
 
 
         int ofs = areloc[i] & 0x0fff;
 
 
 
         DWORD *pReloc = MakePtr(DWORD *, lpvBase, ofs);
 
         if (*pReloc - pPE->OptionalHeader.ImageBase > pPE->OptionalHeader.SizeOfImage)
 
            return FALSE;
 
 
 
         *pReloc += dwDelta;
 
      }
 
      pBR = MakePtr(PIMAGE_BASE_RELOCATION, pBR, pBR->SizeOfBlock);
 
   }
 
   pPE->OptionalHeader.ImageBase = dwNewBase;
 
 
 
   return TRUE;
 
} | 	 
  | 
			 
		  | 
	 
	
		| Back to top | 
		 | 
	 
	
		  | 
	 
	
		Slugsnack Grandmaster Cheater Supreme
  Reputation: 71
  Joined: 24 Jan 2007 Posts: 1857
 
  | 
		
			
				 Posted: Sat Jun 04, 2011 3:13 pm    Post subject:  | 
				       | 
			 
			
				
  | 
			 
			
				hey shitbrick. use windows' native character encoding, wchar. or better yet, tchar. and nigplz. sprintf and its associates are deprecated. _s plz, k ? and uhhh not closing handles ? memory leaks are pretty old school noobshit right there son. good job using an undeclared identifier ERNEL32_LOW as well.
 
 
that's after looking for half a minute. don't post up any more of your crap, shitfuck
  Last edited by Slugsnack on Sat Jun 04, 2011 3:16 pm; edited 1 time in total | 
			 
		  | 
	 
	
		| Back to top | 
		 | 
	 
	
		  | 
	 
	
		Evil_Intentions Expert Cheater
  Reputation: 65
  Joined: 07 Jan 2010 Posts: 214
 
  | 
		
			
				 Posted: Sat Jun 04, 2011 3:15 pm    Post subject:  | 
				       | 
			 
			
				
  | 
			 
			
				 	  | Slugsnack wrote: | 	 		  hey shitbrick. use windows' native character encoding, wchar. or better yet, tchar. and nigplz. sprintf and its associates are deprecated. _s plz, k ? and uhhh not closing handles ? memory leaks are pretty old school noobshit right there son.
 
 
that's after looking for half a minute. don't post up any more of your crap, shitfuck | 	  
 
 
Calm down, I'm sure he just copied from some "LULZ WE R B14CKH4T" forum. | 
			 
		  | 
	 
	
		| Back to top | 
		 | 
	 
	
		  | 
	 
	
		Slugsnack Grandmaster Cheater Supreme
  Reputation: 71
  Joined: 24 Jan 2007 Posts: 1857
 
  | 
		
			
				 Posted: Sat Jun 04, 2011 3:17 pm    Post subject:  | 
				       | 
			 
			
				
  | 
			 
			
				| it's funny how he fucked off for several days to hand-select what he deemed to be the best piece of code there and managed to come back with this. noobs learning from noobs | 
			 
		  | 
	 
	
		| Back to top | 
		 | 
	 
	
		  | 
	 
	
		AverageAzn247 Grandmaster Cheater
  Reputation: 34
  Joined: 01 Oct 2007 Posts: 909 Location: Austin,TX with 72 virgins
  | 
		
			
				 Posted: Sat Jun 04, 2011 3:26 pm    Post subject:  | 
				       | 
			 
			
				
  | 
			 
			
				obvs meme is obvs _________________
  
 
 
 
 	  | Waxxup wrote: | 	 		  What are Night Elves?
 
A girl group?  | 	 
  | 
			 
		  | 
	 
	
		| Back to top | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
	 
	    
	   | 
	
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum
  | 
   
 
		 |