본문 바로가기

Reversing

Dll Injector

 

 

Dll injector 순서

1. 대상 프로세스 핸들 구하기

hProcess = OpenProcess()

HANDLE WINAPI OpenProcess(
  _In_  DWORD dwDesiredAccess,
  _In_  BOOL bInheritHandle,
  _In_  DWORD dwProcessId
);

2. 대상 프로세스 메모리에 인젝션할 DLL 경로 쓰기

pRemoteBuf = VirtualAllocEx()

LPVOID WINAPI VirtualAllocEx(
  _In_      HANDLE hProcess,
  _In_opt_  LPVOID lpAddress,
  _In_      SIZE_T dwSize,
  _In_      DWORD flAllocationType,
  _In_      DWORD flProtect
);

 

WriteProcessMemory()

BOOL WINAPI WriteProcessMemory(
  _In_   HANDLE hProcess,
  _In_   LPVOID lpBaseAddress,
  _In_   LPCVOID lpBuffer,
  _In_   SIZE_T nSize,
  _Out_  SIZE_T *lpNumberOfBytesWritten
);

3. LoadLibraryA() API 주소 구하기

hMod = GetModuleHandle("kernel32.dll")

pThreadProc = (LPTHREAD_START_ROUTINE)GetProcAddress()

FARPROC WINAPI GetProcAddress(
  _In_  HMODULE hModule,
  _In_  LPCSTR lpProcName
);

=>kernel32.dll의 주소는 대상 프로세스가 아니라 Injector.exe의 kernel32.dll의 주소

   -> windows OS 특성상 OS 핵심 DLL은 고유한 주소가 있다.

4. 대상 프로세스에 원격 스레드 실행

hThread = CreateRemoteThread()

HANDLE WINAPI CreateRemoteThread(
  _In_   HANDLE hProcess,
  _In_   LPSECURITY_ATTRIBUTES lpThreadAttributes,
  _In_   SIZE_T dwStackSize,
  _In_   LPTHREAD_START_ROUTINE lpStartAddress,
  _In_   LPVOID lpParameter,
  _In_   DWORD dwCreationFlags,
  _Out_  LPDWORD lpThreadId
);

'Reversing' 카테고리의 다른 글

TEB  (0) 2012.11.13
TLS  (0) 2012.11.13
안티 디버거 기술  (0) 2012.11.12
Anti Reversing  (0) 2012.11.12
VS++ 2008 DLL 파일 생성 방법  (0) 2012.11.06