티스토리 뷰

ETC/종합

PE 구조 정리

BAEKNAMU 2017. 5. 31. 16:56

PE 구조 정리




PE란?

이식이 가능한 어떤 곳에 넣어줘도 실행일 가능한 파일 포맷

Windows 32bit OS에서 실행 가능한 파일 or PE32 = PE

PE구조 => windows 실행파일 구조

PE+ == PE32+(64bit)


HDD ---(PE Loader)---> RAM ---> CPU


PE 실행파일의 시작

시작지점에 MZ 라는 문자가 시작이다.

"MZ"가 시작이면 실행가능 파일이다.

"PE\0\0" 문자도 있으면 RAM에 올릴 수 있다.

PE 시그니처 = PE00 ( PE구조를 나타내는 표시)


PE로더

PE로더 --> 'MZ'를 찾음(못찾으면 실행파일x). --> 찾았으면 PE시그니처를 찾음 (못찾으면 DOS실행파일) --> 찾으면 RAM


PE구조 분석을 위한 Tool 사용

HxD (수정가능)

PEView (수정X, 구조가 잘 나타남)

리소스해커 (프로그램안에 그림, 버튼, 아이콘을 가져옴)


PE파일의 종류

실행 파일 계열 : EXE, SCR(화면보호기 실행파일)

라이브러리 계열 : DLL, OCX(ActiveX)

드라이브 계열 : SYS (윈도우 win32 폴더)

오브젝트 파일 계열 : OBJ(접근이 많지 않음)


IMAGE_DOS_HEADER & Dos Stub (64byte)

PE 헤더

각각의 공간(창고공간)

Offset(낮음)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



Offset(높음)

IMAGE_NT_HEADER

Section Table

IMAGE_SECTION_HEADER[ ]

.text (코드, 명령어)

PE 바디부분

.data (문자열 / 전역변수)

.edata (export 함수정보) DLL

.idata (import 함수정보) DLL

.rsrc (리소스섹션) 이미지, 메뉴,버튼,아이콘



Dos Stub : DOS에서 실행가능한 코드가 들어있음.

DOS HEADER : e_magic (MZ) , e_lfanew (NT_HEADER OFFSET) 파일상의 주소


NT HEADER  

PE Signature(PE\0\0)

FILE_HEADER(파일속성) - 구조체

OPTIONAL_HEADER(부가적인 정보) -구조체


import 함수 : 외부에서 가져옴

export 함수 : 외부로 전달해줌


IMAGE_DOS_HEADER

 Typedef struct_IMAGE_DOS_HEADER {

WORD   e_magic;

WORD   e_cblp;

WORD   e_cp;

WORD   e_crlc;

WORD   e_cparhdr;

WORD   e_minalloc;

WORD   e_maxalloc;

WORD   e__ss;

WORD   e_sp;

WORD   e_csum;

WORD   e_ip;

WORD   e_cs;

WORD   e_lfarlc;

WORD   e_ovno;

WORD   e_res[4];

WORD   e_oemid;

WORD   e_oeminfo;

WORD   e_res2[10];

LONG    e_lfanew;    (4byte)              

} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;

 // DOS .EXE header

// Magic number

// Bytes on last page of file

// Pages in file

// Relocations

// Size of header in paragraphs

// Minimum extra paragraphs needed

// Maximum extra paragrapgs needed

// Initial (relative) SS value;

// Initial SP value;

// Checksum;

// Initial IP value

// Initial (relative) CS value

// File address of relocation table

// Overlay number

// Reserved words

// OEM identifier (for e_oeminfo)

// OEM information; e_oemid specific

// Reserved words

// File address of new exe header





'ETC > 종합' 카테고리의 다른 글

netsh 포트포워딩  (0) 2017.11.12
kali ssh 부팅시 실행  (0) 2017.09.23
아파치 403에러  (0) 2016.01.09
원격데스크톱 설정  (0) 2015.09.24
윈도우 기본 압축 / 해제  (0) 2015.09.17
Comments
최근에 올라온 글
최근에 달린 댓글
TAG
more
Total
Today
Yesterday