본문 바로가기

High Level Technique/Reversing

PE

리버싱에서 가장 중요한? 정말 잘 알고 있다면 정말 좋은 PE 구조에 대해서 알아보도록 하겠습니다.




PE는 Portable Executable File Format의 약자입니다.

이 말이 무었이냐면 이식 가능한 다른 곳에 옮겨저도 실행가능 하도록 만들어 놓은 포맷입니다. 쉽게 말하면 어느 곳에서나 실행이 가능하도록 만들어진 포맷이라고 생각하면 됩니다.

32bit는 PE32라고 부르고 64bit는 PE64가 아닌 PE32+ 또는 PE+ 라고 부릅니다.





PE파일 종류는 다음과 같습니다.


EXE, SCR, SYS, VXD, DLL, OCX, CPL, DRV, OBJ 파일이 있습니다. OBJ 파일을 제외하고 간접적(서비스, 디버깅, 레지스트리)에 의해 실행이 가능한 파일입니다.




PE의 기본구조는 다음과 같습니다.



RVA to RAW에서 본 그림입니다.



각각 구간을 잘 살펴보시기 바랍니다. DOS Header, DOS Stub, NT Header 등등 많은 섹션이 존재하며 중간에 NULL이라는 공간도 존재합니다.





DOS Header부터 Section Header까지를 PE Header라고 하며, 그 밑 Section들을 PE Body라고 합니다.


Section Header에는 각 Section에 대한 크기, 위치, 속성등이 정의 되어 있습니다.


그리고 중간에 NULL값을 넣어 영역을 구분 할 수 있도록 되어있습니다. 이 영역을 NULL Padding 이라고 부릅니다.







PE Header는 어떻게 생기는지 궁금하지 않으신가요?


PE Header는 프로그래머가 Example.cpp라는 소스코드를 작성하고, 빌드를 하면 컴파일러는 Example.cpp와 관련된 모든 헤더파일과 소스파일을 합쳐서 하나의 기계어 코드로 만들어 냅니다.


이때 OBJ파일이 생성되는데 여기까지는 컴퓨터가 이해하는 언어일 뿐 실행은 할 수 없습니다.


링킹 작업을 통해서 운영체제에서 이 파일을 실행하기 위해 링커가 동적 라이브러리(DLL)이나 각종 리소스 데이터, Import Table, Export Table을 처리할 수 있는 정보를 남겨두는데,

여기서 윈도우는 약속된 규약에 맞춰 정보를 입력하고, EXE 파일을 만들 때 PE Header에 이 같은 정보를 기입합니다. 


이것이 PE Format으로 생성되는 파일입니다.




'High Level Technique > Reversing' 카테고리의 다른 글

DOS Header - DOS Stub  (0) 2015.07.09
DOS Header - IMAGE_DOS_HEADER  (0) 2015.07.09
RAV to RAW  (0) 2015.07.09
VA & RVA  (0) 2015.07.08
분석방법  (0) 2015.06.26