- 분석 파일 : calc.exe
- 분석 도구 : PEview, HxD, CFF Explorer, OllyDbg
1. PE 구조
- PE 헤더 : IMAGE_DOS_HEADER, MS-DOS Stub Program, IMAGE_NT_HEADERS, IMAGE_SECTION_HEADER
- PE 바디 : 실제 데이터 정보가 있는 영역(text, data, rsrc, reloc)
2. IMAGE_DOS_HEADER
- 64Byte(0x40)로 구성되어 있으며, 19개 필드로 구성되어 있다.
- PE 파일 시그니처와 IMAGE_NT_HEADERS의 위치 정보를 갖고 있다.
- e_magic : '5A4D' -> MZ -> PE 파일 시그니처를 의미한다.
- e_ifanew : IMAGE_NT_HEADERS의 위치를 의미한다. (0x000000D8)
- 0x000000D8에 5045(PE 파일 시그니처)를 확인할 수 있다.
3. MS-DOS Stub Program
- 152Byte(0x98)로 구성되어 있다.
- MS-DOS, Windows 3.1에서 실행하면 'This program cannot be run in DOS mode'를 출력하는 영역이다.
4. IMAGE_NT_HEADERS
- 248byte(0xF8)로 구성되어 있다.
- Signature
- 4Byte(0x04)
- PE 파일 시그니처
- 50 45 00 00
- IMAGE_FILE_HEADER
- 20Byte(0x14)
- CPU 정보, 섹션 수, 파일 생성/컴파일 시간, IMAGE_OPTIONAL_HEADER 크기, 파일 특성 정보들이 포함되어 있다.
- Machine : CPU 별 고유 값(intel 386/x86 : 0x014C, intel 64 : 0x0200, AMD64 : 0x8664)
- Number of Sections : 실행 파일이 갖고 있는 총 섹션 개수
- Time Date Stamp : 파일 생성/컴파일된 시간
- Size of Optional Header : IMAGE_OPTIONAL_HEADER의 크기(0x00E0 -> 224Byte)
- Characteristics : PE 파일에 대한 특정 정보를 나타내는 플래그
- 0x0002 IMAGE_FILE_EXECUTABLE_IMAGE PE 파일을 의미한다.
- 0x0100 IMAGE_FILE_32BIT_MACHINE 32bit PE 파일을 의미한다.
- 0x2000 IMAGE_FILE_DLL DLL 파일을 의미한다.
- IMAGE_OPTIONAL_HEADER
- 224Byte(0xE0)
- 표준 필드, NT 추가 필드, DataDirectory 배열 정보들이 포함되어 있다.
- 표준 필드 : 실행 파일 로드 및 실행에 사용되는 정보이다.
- 표준 필드 영역 : Magic ~ Base of Code
- NT 추가 필드 : 윈도우 링커/로더가 요구하는 정보이다.
- NT 추가 필드 영역 : Base of Data ~ Loader Flags
- DataDirectory 배열 영역 : Number of Data Directories
- Magic : IMAGE_OPTIONAL_HEADER 시그니처
- 0x010B : 32bit PE 파일
- 0x020B : 64bit PE 파일
- Size of Code : text 섹션의 크기(0x52E00)
- Address of Entry Point : 파일이 메모리에서 시작되는 주소(0x12D6C)
- PE 로더가 실행을 개시할때 사용하는 RVA 주소이며, text 섹션 내의 특정 번지 주소가 된다.
- 이 필드의 값은 프로그램이 처음으로 실행될 코드를 담고 있는 EP(entry Point) RVA 주소이다.
[참고] RVA, VA
- RVA
- PE 파일이 가상 주소 공간 내에서 로드된 후 이미지의 시작 주소에 대한 상대 주소이다.
- PE 시작 주소에서 어느정도 떨어져 있는지를 계산할 수 있다.
- VA
- 가상 메모리 주소 공간에서 프로세스의 절대 주소이다.
- VA 계산식
- VA = ImageBase 주소 + RVA 주소
- VA = 0x01000000 + 0x00012D6C = 0x01012D6C
- Base of Code : 실행 코드의 위치를 의미한다. 첫번째 섹션이 시작되는 RVA 주소이다.
- Base of Data : 첫번째 데이터 섹션이 시작되는 RVA 주소이다.
- Image Base : PE 파일이 로드되는 가상 메모리의 주소이다.
- DLL/EXE 파일 -> User 메모리 영역인 '0x00000000 ~ 0x7FFFFFFF'에 로드
- SYS 파일 -> 커널 메모리 영역인 '0x80000000 ~ 0xFFFFFFFF'에 로드
- DLL 파일/윈도우 제공 EXE 파일 : 0x01000000
- 그 외 EXE 파일 : 0x00400000
- Section Alignment : 메모리 상에서 섹션의 최소 단위(File Alignment 보다 커야한다.)
- 0x1000 -> 4096byte
- Subsystem : 프로그램 파일 유형
- SYS 파일과 같은 디바이스 파일
- Windows GUI 환경 프로그램
- CMD 기반 콘솔 프로그램
- DLL Characteristics : 시스템 보호 기능(ASLR, DEP, SHE...) 사용 유무 플래그
- ASLR 기능 : 0x0040 IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE
- Number of Data Directories : IMAGE_DATA_DIRECTORY 구조체 배열
- 각각의 배열 항목(16개)마다 RVA(4byte), Size(4byte)로 구성되어 있다.
- EXPORT Table : Export 섹션 시작 주소 및 크기 정보
- IMPORT Table : Import 섹션 시작 주소 및 크기 정보
- RESOURCE Table : Resource 섹션 시작 주소 및 크기 정보
- BASE RELOCATION Table : Relocation 섹션 시작 주소 및 크기 정보
- 각각의 배열 항목(16개)마다 RVA(4byte), Size(4byte)로 구성되어 있다.
'메가IT아카데미 국기과정 > 리버싱과 악성코드 분석' 카테고리의 다른 글
[1-5] PE 파일 분석(RVA to RAW) (0) | 2022.09.13 |
---|---|
[1-4] PE 파일 분석(RVA to VA) (0) | 2022.09.13 |
[1-3] PE 파일 분석(섹션 헤더) (0) | 2022.09.13 |
[1-1] 리버싱 선수 지식 (1) | 2022.09.13 |
[목차] 리버싱과 악성코드 분석 (1) | 2022.09.11 |