Be myself :: DLL Injection

달력

42024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

DLL Injection

Reversing 2014. 5. 17. 14:13

1 개요

DLL인젝션하는 방법들을 간단히 개념적으로만 알아볼 예정이다. 다음에 많은 사람들이 인젝션 연습으로 많이 하는 '지뢰 찾기' 패치 등을 하면서 실습을 할 예정이다.

 

2 dll 인젝션

일단, DLL인젝션을 하는 방법들을 알아보자.

1. SetWindowsHookEx() 를 이용한 윈도우 메시지 후킹.

이 방식은 API후킹과 함께 대표적인 후킹방법 이기도 하다.
윈도우는 GUI방식을 제공하고, GUI방식으로 동작할 때, 키보드의 입력이나 마우스의 입력 등은 메시지방식(Event Driven)으로 처리된다. 이 때, 메시지를 잠시 보관하는 버퍼가 OS에도 존재하고, 어플리케이션 계층영역에서도 존재하게 되는데, SetWindowsHookEx()를 하면, 이 사이에서 메시지를 가로챌수 있다. 또 한 이 함수는 한번 적용해 훅을 설치하면 어떤 프로세스에서 해당 메시지가 발생했을 때 운영체제가 DLL을 강제로 인젝션 하고 hook procedure를 호출한다. 제일 편하고, 간단하긴 한데 아예 메시지 호출이 안되도록 하진 못해서 한계가 있다.

2. CreateRemoteThread() 함수를 통한 DLL Injection

이 방법도 DLL Injection을 한번이라도 공부 해 보았다면 알고 있을법한 API이다. 이 방법의 핵심은 상대 프로세스로 하여금, LoadLibrary()를 호출하게 만들어 DLL을 로딩시키는 것이다.

보통 OpenProcess로 DLL Injection을 수행할 프로세스의 핸들을 얻고, VirtualAllocEX함수와 WriteProcessMemory함수로 LoadLibrary의 인자에 해당하는 DLL의 경로를 쓴다. 그 다음 GetModuleHandle과 GetProcAddress로 LoadLibrary()의 주소 값을 얻은 다음 CreateRemoteThread()함수를 통해 목표 프로세스가 LoadLibrary함수를 호출하도록 한다.

3. Applnit_DLLs

레지스트리를 이용하는 방법이다. \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows 에서 Applint_DLLs의 값을 인젝션을 원하는 DLL경로 문자열을 쓰고 LoadApplint_DLLs 값을 1로 변경한 후 재부팅하면 실행되는 모든 프로세스에 해당 DLL이 인젝션 된다.

4. PE패치를 통한 인젝션

이 방법은 PE에서 IDT에 인젝션 하고자 하는 DLL을 추가시킴으로써 인젝션 하는 방법이다.

'Reversing' 카테고리의 다른 글

지뢰 찾기 핵  (1) 2014.07.29
치트엔진을 활용한 환세취호전 핵  (2) 2014.07.28
PEB를 활용한 안티디버깅  (0) 2014.05.16
WinDbg, xp 연동  (0) 2014.05.16
SEH를 이용한 안티디버깅  (1) 2014.05.15
Posted by flack3r
|