본문 바로가기

Information Security/Hacking

Windows PE file

반응형

PE File Structure

* Executable File (실행 파일) : 명령에 따라 지시된 작업을 수행하는 파일

- Windows (PE) / Unix 계열 (ELF) / IOS (Mach-O) / Android (DEX) / DOS (MZ) 등으로 분류

 

 

 

* Portable Executable : Windows 운영체제 상 실행 파일 포맷

- 실행 파일 (EXE, SCR) / 라이브러리 (DLL, OCX), 드라이버 (SYS), 오브젝트 파일(OBJ) 등으로 분류


* PE 파일 구조

PEview에서 확인되는 PE 파일 구조

분류 내용
PE Header * 모든 PE 파일이 동일하게 가지고 있는 헤더


1) IMAGE_DOS_HEADER
- Windows OS의 하위 호환성 지원을 위해 DOS 운영체제가 윈도우용 PE 파일을 실행 시, 적절한 오류 메세지(MS-DOS Stub Program 영역의 메세지)를 보여주며, 실제 윈도우용 PE Header(IMAGE_NT_HEADER)를 가리키는 역할
- 파일 시그니처 확인 시, PE 파일로 분류되는 시그니처 확인 가능(MZ 등)


2) MS-DOS Stub Program
- DOS 운영체제에서 윈도우용 PE 파일을 실행할 시, 보여줄 오류 메세지를 저장함


3) IMAGE_NT_HEADER
- Signature(정상 PE 포맷임을 증명하는 4Byte의 항상 동일한 플래그 값 : PE\0\0(0x50450000))와 실제 PE 파일 실행에 필요한 핵심 기능을 담은 IMAGE_FILE_HEADER와 IMAGE_OPTIONAL_HEADER로 구성
Section Header * 각 섹션 데이터를 메모리에 로딩, 속성(Property)를 설정하는데 필요한 정보를 담음
Section * PE 파일이 가상 주소 공간에 로드된 후, 프로그램 실행 코드, 데이터, 리소스 등 프로그램 실행에 필요한 정보를 배치한 영역

* PE Section 분류

유형 Section명 설명
코드 .text * 프로그램 실행 코드를 담은 섹션(컴파일 된 기계어)
데이터 .data * 읽기/쓰기가 가능한 데이터 섹션으로, 전역/정적 변수(전역적으로 선언한 지역 변수) 등이 위치함
.rdata * 읽기 전용 데이터 섹션으로, 상수형 변수, 문자열 상수 등이 위치
.bss * 초기화 되지 않은 전역변수가 위치(.data에 병합되어 있음)
Import
API
.idata * 임포트 할 DLL과 그 API/함수들에 대한 정보를 담고있는 섹션
- 대표적으로 IAT(Import Address Table)이 존재(.rdata에 병합되어 간혹 표시되지 않기도 함)
.didat * 지연 로딩(Delayd-Landing) 임포트 데이터를 위한 섹션
Eport
API
.edata * 익스포트할 DLL과 API/함수에 대한 정보를 담고 있는 섹션
- 일반적으로 API나 변수를 익스포트할 수 있는 경우는 DLL이기 때문에, DLL PE에 이 섹션이 존재함 (.text 또는 .rdata에 병합되어 있음)
리소스 .rsrc * 다이얼 로그, 아이콘, 커서 등의 윈도우 애플리케이션 리소스 관련 데이터들을 담은 섹션
재배치 정보 .reloc * 실행 파일에 대한 기본 재배치 정보를 담은 섹션


- 재배치 정보 : PE 이미지를 원하는 기본 주소에 로드하지 못하고, 다른 주소에 로드했을 시, 코드 상에서의 관련 주소 참조에 대한 정보를 갱신해야 하는 경우를 말함
(주로 DLL 파일에서 재배치가 발생함)
반응형

'Information Security > Hacking' 카테고리의 다른 글

Strace - System call Tracking tool  (0) 2022.07.04
Windows Registry  (0) 2021.09.23
악성코드(Malware)유형 및 분석 유형  (0) 2021.09.14
Analysis Tool - Process Explorer  (0) 2021.07.07
Analysis Tool - Process Monitor  (0) 2021.07.07