Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

Piki's Play

Chapter 3-1. PE(Portable Executable) 분석 본문

포렌식/디지털포렌식의 세계

Chapter 3-1. PE(Portable Executable) 분석

Pikigod 2020. 9. 10. 16:51

개인 공부용이므로 내용이 부실할 수 있습니다!


Section 1. PE(Portable Executable)분석

-> PE파일 포맷은 윈도우에 해당하는 파일 포맷으로 .exe, .dll, .cpl, .sys, .scr, .drv, .vxd, .ocx 확장자를 가진 파일들에게서 볼 수 있다. 윈도우에서 이 실행파일들을 IMAGE라는 명칭으로 구조체를 칭한다.

(DOS 영역, PE Header 영역, Section Header 영역, Section 영역)->

 

PE 구조 도식화

 

DOS 영역

-> 윈도우 실행파일을 Dos 환경에서 실행하려고 할 때 사용자에게 에러를 보여줌 그러나 윈도우에서 DOS영역에서 실행하는 경우는 많지는 않음

 

DOS MZ Header

1. e_magic : 이 구조체 멤버는 DOS MZ Header 맨 앞에 위치하고 ‘4D 5A’값을 가지고 아스키코드로 ‘MZ’라는 값을 가진다.

 

2. e_lfanew : 이 구조체 멤버는 PE파일의 머리인 IMAGE_NT_HEADER를 가리키는 오프셋을 가지고 있다.

 

DOS Stub Program

-> DOS 모드에서 윈도우 응용프로그램을 실행했을 때 아래와 같은 문구를 출력한다.

‘This Program connot be run is DOS mode’

 

 

PE Header 영역

-> PE 파일의 시작 부분으로서 PE File Signature, PE File Header, PE File Optional Header 영역이 있다.

 

 

PE File Signature

-> PE 영역의 시작을 알리는 시그니처를 가지고 있다. ‘PE/0/0(0x50/0x45/0x00/0x00)’이다.

 

PE File Header

-> 실행 파일 자체의 메타데이터를 가지고 있다. 길이는 20바이트이다.

구조체로는 IMAGE_FILE_HEADER 구조체를 가지고 있으며 아래 그림과 같은 오프셋을 가지고 있다. (오프셋의 자세한 값들은 책을 보자)

 

RVA(Relative Virtual Address)

-> 가상메모리의 맵핑된 이후의 오프셋 값. 프로세스는 코드와 데이터가 가상메모리에 매핑이 되는데 이때 시작 지점이 BASE Address 가 되고 그 이후에 RVA(가상 오프셋)을 더해주어야 가상 주소가 된다.

가상 주소 = 베이스 주소 + RVA

 

 

PE File Optional Header

-> 실행 파일의 실행정보가 담긴 부분

Standard Fields, NT Additional Fields, IMAGE_DATA_DIRECTORY를 가진다.

 

 

Section

 

Section Header

-> 각 섹션이 필요한 메타데이터와 메모리에 로드될 때 필요한 정보들을 저장하고 있다.

 

.text 섹션

-> 실행파일의 소스코드가 들어있는 섹션으로, 초기화되거나 초기화되지 않은 변수, importexport 테이블 정보를 제외한 나머지 소스코드들이 저장되어 있다. 섹션의 위치와 크기는 섹션헤더를 참고하면 알 수 있다.

 

.data 섹션

-> .data 섹션은 읽기/쓰기가 가능한 일반적인 데이터를 위한 섹션으로, 정적변수와 전역변수가 저장된다.

 

.rdata 섹션

-> 읽기전용 섹션으로 상수와 배열로 직접 정의된 문자열과 런타임 라이브러리에서 사용하는 에러 메시지 등이 저장된다.

 

.idata, .edata 섹션

-> import table, export table이 들어있음

 

.reloc 섹션

-> PE 파일이 메모리상에 로드 될 때 재배치에 관해 참조하는 정보가 들어있는 섹션, DLL 파일의 경우 메모리에 로드시 재배치를 염두하고 있어서 이 섹션이 없으면 실행이 되지 않을 수 있다. 실행파일들은 필요로 하지 않을 수 있음