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

https://woounnan.tistory.com/121

https://dakuo.tistory.com/19

'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

+ Recent posts