Windows PE파일이란 실행파일을 의미한다 많이 알고 있는 .exe, .dll 등의 파일들을 생각하면 된다.
PE파일의 구조를 분석하기위해 PEViewer.exe도구를 사용했다.
- 환경
OS : Windows 10
Tool : PEViewer (http://wjradburn.com/software/)
1. PE파일의 구조
가장 먼저 PE파일임을 나타내는 시그니처 값이 오는데 바로 4D 5A이다. 파일의 맨 앞에 4D 5A가 온다면 이는 PE파일임을 의미한다.
PE파일역시 기존의 다른 파일들과 마찬가지로 offset별로 헤더의 길이, 위치 등을 나타내고 해당 offset을 따라가면서 파싱하면 파일을 분석할 수 있다.
PEViewer Tool은 단지 PE파일의 offset 규칙에따라 보기 쉽게 파싱을 해주는 도구로 생각하면된다.
1) DOS
위 내용은 IMAGE_DOS_HEADER를 파싱한 내용이다 Data 부분을 보면 5A 4D로 Little Endian으로 순서가 거꾸로 된 것을 확인할 수 있다. 대부분의 i86 system의 경우 Littele Endian을 차용하는것으로 알고 있다(PC입장에서는 Little Endian의 연산이 Big Endian보다 빠르다)
IMAGE_DOS_HEADER는 처음 언급한 PE파일의 시그니처 값을 포함하고 MS-DOS Stub Program과 같이 Windows Dos시절의 PE파일에 대한정보가 담겨져 있다. 때문에 현재 NT기반의 Windows OS 에서는 크게 중요하지 않는 영역이다.
2) IMAGE_NT_HEADER
HEADER값은 SIGNATURE, IMAGE_FILE_HEADER, IMAGE_OPTIONAL_HEADER 3가지 값이 존재하고 각각의 값은 아래와 같은 의미를 가진다.
가장 먼저 SIGNATURE값이 존재하고 이 값을 바탕으로 Windows가 어떤 버전인지를 알 수 있다.
PEViewer를 통해서 Header의 Signature값을 보면 NT계열의 Windows OS임을 알 수 있다.
IMAGE_FILE_HEADER값을 보면 FILE이 호환가능한 CPU정보 그리고 dll인지 exe인지 파일의 생성날짜 등 파일에 대한 정보를 확인할 수 있다.
IMAGE_OPTIONAL_HEADER 값을 보면 파일의 메모리 영역에 대해서 알 수 있다.
PE파일의 경우 .bss, .idata, .edata, .data, .code, .text 등의 여러 메모리 구조를 가지게 되며 현재 예약된 메모리 값들의 정보 stack, heap에 대한 정보 등을 담고 있는 곳이 바로 위의 IMAGE_OPTIONAL_HEADER값 이다.
3) Section
이후에 오는 값들은 Section 들에 대한 정보로 파일에 따라서 가지고 있는 Section이 다르기 때문에 늘 상이하다.
Section 개수는 IMAGE_FILE_HEADER의 NumberOfSections의 값으로 확인할 수 있다.
위 파일의 경우 5의 값을 가지고 있었으므로 5개의 Section Header와 Section들로 구성되어 있다.
Section들은 위에서 언급한 바와같이 일반적으로 .text, .data, .bss, .rdata, .idata, .edata가 존재하고 여기서 .idata는 외부 dll을 연결시켜 동작하기 위한 section으로 dll injection공격을 수행하는데 주로 이용된다.
dll injection공격이란 정상의 .exe파일의 .idata section에 악의적인 .dll파일을 삽입시켜 정상의 .exe파일이실행될때 해당 권한을 바탕으로 악의적인 .dll파일을 수행하도록 하는 공격이다. 정상의 .exe에 포함되어 실행되기 때문에 공격을 대처하기가 매우까다롭다.
- ref
'OS > Windows' 카테고리의 다른 글
[Windows] ADS (2) | 2018.07.01 |
---|---|
[Windows] 윈도우 문자열 처리 (0) | 2018.03.19 |
[Widnows] darknet windows 설치 (9) | 2018.01.21 |
[Windows] WS2_32 라이브러리 (2) | 2018.01.15 |