공부/리버싱

PE 구조

B612 2023. 5. 28. 19:33

계산기를 분석하며 PE 구조를 공부해보자.

(계산기 파일은 Windows >System32 폴더에 있다)

(분석 툴은 Peview를 사용했다)

 

1. PE 구조

*PE란:

 

PE 파일은 크게 PE 헤더와 PE 바디로 나뉜다.

 

PE 구조

초록색 네모가 PE 헤더, 하늘색 네모가 PE 바디이다.

 

2. PE 헤더

PE 헤더에는 파일을 실행하기 위한 전반적인 정보가 구조체 형식으로 저장되어 있다.

 

1) IMAGE_DOS_HEADER

PE 헤더 제일 앞부분에는 기존 DOS EXE Header를 확장시킨 IMAGE_DOS_HEADER 구조체가 존재한다. 가장 중요한 필드는 e_magic과 e_lfanew이다. e_magic 필드는 MZ(4D 5A)로 값이 고정되어 있으며 PE 파일이 맞는지 확인할 때 쓰인다. e_lfanew는 NT header의 offset 값을 표시한다.

 

*리틀 엔디언:

*offset, va rva: 

 

2) Stub Code: 존재 여부는 옵션이며 크기도 일정하지 않다.

e_lfanew 필드가 가변적인 이유는 DOS Stub 영역의 크기가 가변적이기 때문이다. 여기서는 프로그램이 DOS 모드에서 실행되지 않는다는 안내문을 출력한다.

Stub Code

 

3) IMAGE_NT_HEADERS

멤버 변수인 Signature과 2개의 구조체인 IMAGE_FILE_HEADER, IMAGE_OPTIONAL_HEADER로 구분된다.

 

    (1) Signature: PE 파일 구조인지 아닌지 확인할 수 있다. PE(50 45)로 고정된 값이다.

    (2) IMAGE_FILE_HEADER

        - Machine: 어떤 CPU에서 작동하는지 타입을 나타낸다.

                          현재 필드의 값이 014C이므로 Intel x86 CPU와 호환됨을 알 수 있다.

        - Number of Sections: PE 파일을 구성하는 섹션의 수. 최소 1개 이상이다.

        - Time Date Stamp: PE 파일이 만들어진 시간을 나타낸다. 하지만 변조가 가능하다.

        - Size of Optional Header: IMAGE_OPTIONAL_HEADERS의 구조체 크기를 나타낸다.

        - Characteristics: 파일 속성에 대한 부분  

 

    (3) IMAGE_OPTIONAL_HEADER

        - Magic: 구조체가 32비트용이면 10B, 64비트용이면 20B의 값을 가진다.

        - Address of Entry Point: 

        - Image Base:

        - Section Alignment: 메모리에서 섹션의 최소단위를 나타낸다.

        - File Alignment: 파일에서 섹션의 최소단위를 나타낸다.

        - Size of Image

        - SIze of Headers: PE Header의 크기를 나타낸다.

        - Subsystem: 값이 1이면 드라이브 파일(SYS, VXD), 2이면 GUI파일, 3이면 CUI 파일을 나타낸다.

    (4) IMAGE_SECTION_HEADER . 

        섹션의 속성이 저장되어 있다.

        - Virtual Size:메모리에서 섹션이 차지하는 크기

        - RVA:

        - Size of Raw Data: 파일에서 섹션이 차지하는 크기

        - Pointer of Raw Data: 파일에서 섹션의 시작 위치

IMAGE_SECTION_HEADER .text

        text 섹션이 400부터 시작하는 것을 확인할 수 있다.

 

3. PE 바디

 

(21.08.09에 작성한 보고서를 참고해 새로 포스팅)

'공부 > 리버싱' 카테고리의 다른 글

Petya 랜섬웨어 분석  (0) 2021.09.08