공부해요/리버싱_핵심원리

25. PE 패치를 이용한 DLL 로딩

yenas0 2024. 11. 6. 09:26
반응형

대상 프로그램의 실행 파일을 직접 수정하여 DLL을 강제로 로딩하는 방법
: 한 번 적용해두면 별도의 인젝션 과정 없이 프로세스가 시작할 때마다 원하는 DLL을 로딩하게 만들 수 있음, 일종의 크랙

TextView.exe의 참조 DLL:

  • KERNEL32.dll, USER32.dll, GDI32.dll, SHELL32.dll 등의 주요 Windows DLL을 참조하며, 이들은 프로그램이 Windows API 기능을 사용하는 데 필요.
  • 이러한 DLL을 통해 파일 관리, 메모리 할당, 창 처리, 그래픽 렌더링 등 다양한 기본적인 운영 체제 기능을 호출 가능

 

 

IMPORT Directory Table의 구조:

  • IMAGE_IMPORT_DESCRIPTOR 구조체에 의해 구성되며, 각 DLL에 대한 정보를 포함.
  • OriginalFirstThunk: Import Name Table (INT)의 RVA를 가리키며, 각 DLL 내 함수의 이름을 저장.
  • FirstThunk: Import Address Table (IAT)의 RVA를 나타내며, 실행 시 함수의 주소로 대체됨.
  • DLL Name: DLL 파일명을 가리키는 RVA로, 예를 들어 KERNEL32.dll 등 필요한 외부 라이브러리를 로드하는 역할을 수행

 

IDT 내 주요 함수 호출:

  • KERNEL32.dll을 통해 파일 입출력, 프로세스 및 메모리 관리 기능 호출.
  • USER32.dll은 GUI 처리, GDI32.dll은 그래픽 관련 함수, SHELL32.dll은 파일 및 시스템 쉘 인터페이스에 접근하는 데 활용.
  • 주요 함수로는 CreateFileW, CloseHandle, ReadFile, WriteFile, GetMessageW, DispatchMessageW 등이 포함되어 있으며, 각 기능이 특정 API를 호출하여 윈도우 운영 체제와의 상호작용을 담당

 

TextView.exe와 myhack3.dll의 연관성:

  • TextView.exe 실행 시 myhack3.dll 파일을 참조하는 코드가 확인됨. 이 DLL은 TextView.exe에 로드되며 특정 기능 확장 및 기능 실행을 목적으로 포함된 것으로 분석됨.
  • myhack3.dll은 Drop 함수와 같은 기능을 구현하여 외부 파일을 다루는 기능을 지원. 이 함수는 파일 드래그 앤 드롭과 같은 기능을 통해 특정 파일을 메모리에 로드하고, 윈도우 메시지(WM_DROPFILES)를 통해 해당 파일의 처리를 시작​

 

DLL의 PE 구조 분석:

  • myhack3.dll의 Import Name Table(INT)과 Import Address Table(IAT)에서 확인되는 함수들을 통해, 윈도우 API와의 상호작용이 가능하도록 설계됨.
  • 주요 API는 PostMessage와 같이 메시지를 통한 상호작용을 지원하며, 이를 통해 TextView.exe가 사용자 명령을 DLL을 통해 확장된 기능으로 처리할 수 있도록 구현됨

 

구성 요소 및 동작 원리:

  • dummy()와 같은 내보내기 함수가 포함되어 있으며, 이 함수는 DLL 로딩 및 실행에 필요한 최소한의 초기화 과정을 포함. 또한, 외부 인터페이스와의 원활한 통신을 위해 사용됨.
  • 코드 내에서는 GlobalAlloc, GlobalLock 등의 메모리 할당 함수를 사용하여 파일을 메모리에 안전하게 로드하고 이를 윈도우 메시지로 처리하는 로직이 포함됨​

 

TextView.exe의 상세 분석: myhack3.dll의 역할

  • myhack3.cpp와 Drop 기능:
    • TextView.exe는 myhack3.dll을 로드하며, 이 DLL의 주요 기능 중 하나로 "Drop"이 확인됨. Drop 기능은 외부 파일을 처리하기 위한 함수로, 파일을 메모리에 로드하고 이를 프로그램 내에서 처리하는 역할을 수행.
    • 코드 흐름: DropFile 함수는 파일 경로를 인수로 받아 GlobalAlloc을 통해 메모리 공간을 확보하고, GlobalLock을 통해 접근 가능한 버퍼를 설정. 파일명은 ANSI 형식으로 변환 후 메모리 영역에 복사.
    • 메시지 전송: 이 함수는 PostMessage API를 사용하여 WM_DROPFILES 메시지를 전송하고, 윈도우 메시지 시스템을 통해 파일이 TextView.exe 내에서 처리되도록 유도​

 

추가적인 dummy() 함수:

  • dummy 함수는 myhack3.dll 내에서 단순히 존재 여부를 확인할 수 있도록 설계된 기본 함수. DLL이 정상적으로 로드되었는지 테스트하는 용도로 사용될 수 있음​

 

PEView로 분석한 TextView.exe의 PE 구조와 Import Directory Table (IDT)

PEView를 통한 TextView.exe 구조 분석:

  • TextView.exe 파일의 PE (Portable Executable) 구조는 여러 주요 Windows DLL에 대한 종속성을 포함하고 있으며, 이를 통해 외부 기능을 호출하고 윈도우 API와 상호작용.
  • IMAGE_OPTIONAL_HEADER에 위치한 Data Directory는 Import Directory Table (IDT)를 참조하는데, IDT는 다른 외부 DLL의 사용 여부와 호출되는 API 목록을 정의하여 실행 시 필요한 종속성 정보를 제공

 

Import Directory Table (IDT) 분석:

  • IDT는 TextView.exe가 로드하는 다양한 Windows 시스템 DLL의 목록을 포함하며, 대표적으로 KERNEL32.dll, USER32.dll, GDI32.dll, SHELL32.dll 등이 있음.
  • 각 DLL에 대한 IMAGE_IMPORT_DESCRIPTOR 구조체는 다음과 같은 필드를 포함:
    • OriginalFirstThunk: Import Name Table (INT)의 RVA(상대 가상 주소)를 가리켜 DLL 내에서 호출할 함수 이름을 확인.
    • FirstThunk: Import Address Table (IAT)의 RVA를 나타내며, 실행 시점에 실제 메모리 주소로 덮어씌워져 함수 호출에 사용됨.
    • Name: 로드할 DLL 이름의 RVA를 지정, 예를 들어 KERNEL32.dll과 같은 라이브러리 이름을 나타냄

 

IDT 및 기타 테이블 구조의 역할:

  • IDT는 각 DLL이 제공하는 함수 이름과 주소를 저장해두어 실행 시 API 호출을 효율적으로 처리함. IAT와 INT를 사용하여 DLL에 접근할 수 있는 구조를 제공하며, 이를 통해 CreateFileW, ReadFile, WriteFile과 같은 핵심 API가 호출됨.
  • RVA 값과 크기: IDT에서 각 참조된 DLL 및 함수의 위치는 RVA 값으로 정의되어 있어 메모리에서 함수 호출을 정확히 지정 가능. 이러한 정보는 PEView의 IMAGE_OPTIONAL_HEADER 내 Data Directory에서 참조 가능

 

IDT를 활용한 API 호출 흐름 추적:

  • TextView.exe가 실행될 때 IDT는 Import Name Table을 기반으로 필요한 DLL 함수를 메모리에 매핑하여 해당 함수를 호출할 수 있도록 함.
  • 주요 윈도우 API 예시는 파일 시스템 접근(CreateFileW), 그래픽 처리(GDI32.dll 함수), 사용자 인터페이스 관리(USER32.dll 함수) 등이 포함됨. 이를 통해 TextView.exe는 외부 파일 접근 및 처리 기능을 확장하며, 윈도우 시스템 리소스와 원활하게 상호작용 가능​
반응형

'공부해요 > 리버싱_핵심원리' 카테고리의 다른 글

27. Code 인젝션  (1) 2024.11.12
26. PE Tools  (0) 2024.11.06
24. DLL 이젝션  (0) 2024.11.04
23. DLL 인젝션  (1) 2024.11.04
22. 악의적인 목적으로 사용되는 키로거  (3) 2024.11.04