2020. 1. 11. 02:34ㆍ정보보안
@ PE 파일 분석(PE 헤더)
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로 구성되어 있으며, 19개 필드로 구성되어 있음
- PE 파일 시그니처와 IMAGE_NT_HEADERS의 위치 정보를 갖고 있다.
- e_magic : '5A4D' -> MZ -> PE 파일 시그니처를 의미한다.
- e_ifanew : IMAGE_NT_HEADERS의 위치를 의미한다. (0x000000D8)
0x000000D8에 504A(PE 파일 시그니처)를 확인할 수 있다.
3. MS-DOS Stub Program
- 152Byte로 구성되어있음
- MS-DOS, windows 3.1에서 실행하면 'This program cannot be run in DOS mode'라는 문자열을 출력하는 영역
4. IMAGE_NT_HEADERS
1) Signature
- 4Byte
- PE 파일 시그니처
- 50 45 00 00
2) IMAGE_FILE_HEADER
- 20Byte
- CPU 정보, 섹션 수, 파일 생성/컴파일 시간, IMAGE_OPTIONAL_HEADER 크기, 파일 특성 정보들이 포함되어 있음
Machine : CPU 별 고유 값(Inter 386/x86 : 0x014C, Inter 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 파일을 의미함
3) IMAGE_OPTIONAL_HEADER
- 224Byte
- 표준 필드, 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
1. RVA
- PE 파일이 가상 주소 공간 내에서 로드된 후 이미지의 시작 주소에 대한 상대 주소
- PE 시작 주소에서 어느정도 떨어져 있는지를 계산할 수 있다.
2. VA
- 가상 메모리 주소 공간에서 프로세스의 절대 주소
3. 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
Ex1) text 섹션의 데이터가 512byte인 경우
- 섹션 얼라이먼트에 의해서 4096Byte 할당
Ex2) text 섹션의 데이터가 6000Byte인 경우
- 섹션 얼라이먼트에 의해서 8192Byte 할당
File Alignment : 파일의 최소 단위(0x200 -> 512byte)
Size Of Image : PE 파일이 메모리에 로드되었을 때, 가상 메모리 상에 PE 이미지 크기
0xC0000 -> 786432Byte
Section Alignment 보다 커야함
Size of Headers : PE 헤더 전체 크기
0x400 -> 1024Byte
File Alignment 보다 커야함
Subsystem : 프로그램 파일 유형
1 : SYS 파일과 같은 디바이스 파일
2 : Windows GUI 환경 프로그램
3 : 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 섹션 시작 주소
'정보보안' 카테고리의 다른 글
pe 파일 분석(RVA to VA) (0) | 2020.01.11 |
---|---|
pe 파일 분석(섹션헤더) (0) | 2020.01.11 |
어셈블리어(레지스터 이해) (0) | 2020.01.11 |
리버싱 선수 지식 (0) | 2020.01.11 |
악성코드 기초 (0) | 2020.01.11 |