DLL Injection – przykładowy kod

Jest to przykładowy kod który łatwo można wykorzystać do napisania loadera cheatów do różnych gier.

Służy on do załadowania naszej biblioteki ( czyli tak naprawdę naszego kodu ) w kontekście innego wątku. Użyte jest do tego allokowanie i zapisanie pamięci oraz odpalanie nowych wątków.

Jest to dość łatwe podejście i też łatwe do wykrycia ale jednak można się dzięki temu dużo nauczyć.

Najważniejsza część kodu

#include <windows.h>
#include <stdio.h>

int
main(int argc, char **argv)
{
  if(argc != 2)
  {
    puts("usage: inject <PID>");
    return 1;
  }

  DWORD pid = (DWORD)atoi(argv[1]);

  HANDLE hproc = OpenProcess(
      PROCESS_ALL_ACCESS,
      FALSE,
      pid);
  // check

  printf("pid = %i\n", pid);

  PVOID addr = VirtualAllocEx(
      hproc,
      NULL,
      0x1000,
      MEM_COMMIT | MEM_RESERVE,
      PAGE_EXECUTE_READWRITE);
  //check
  printf("addr = %.8x\n", addr);

  WriteProcessMemory(hproc, addr, "hook.dll", 9, NULL);
  //check

  HANDLE hthread = CreateRemoteThread(
      hproc,
      NULL,
      0, 
      (LPTHREAD_START_ROUTINE)
      GetProcAddress(GetModuleHandle("kernel32"), "LoadLibraryA"),
      addr,
      0, 
      NULL);
  // check

  CloseHandle(hthread);
  CloseHandle(hproc);

  return 0;
}

code007.zip Download

Dodaj komentarz