Search results for 'Reversing'

  1. 2015.01.30 -- PE File Format

PE File Format

2015. 1. 30. 21:30

 

 

 

 

리버싱 핵심원리 책을 참고하여 정리한 내용입니다.

리버싱에 관해 공부하실분은 구입하시는걸 추천드립니다.

----------------------------------------------------


PE파일

 

 - Windows 운영체제에서 사용되는 실행 파일 형식이다.

 - 32비트 형태의 실행 파일을 의미하며 PE32라고도 한다.

 - 64비트 형태의 실행 파일은 PE+ 또는 PE32+라고 부른다.

 

 


PE파일의 종류

 

 - 실행계열 : EXE, SCR

 - 드라이버계열 : SYS, VXD

 - 라이브러리계열 : DLL, OCX, CPL, DRV

 - 오브젝트계열 : OBJ

 

 


기본구조

 

 - PE HEADER, PE BODY로 나뉜다.

 - (파일 : offset / 메모리 : VA) 로 위치를 표시한다.

 - 파일이 메모리에 로딩되면 모양이 달라진다.

    (Section크기, 위치 등) 

 

 

 

NULL Padding 

 

 - 컴퓨터에서 파일, 메모리 등을 처리할 때 효율을 높이기 위해

    사용하는 최소 기본단위 개념

 - 파일/메모리에서 섹션의 시작위치는 각 파일/메모리의 최소

    기본 단위의 배수에 해당하는 위치여야하고, 

    빈 공간은 NULL로 채운다.

 

 


VA & RVA

 

- VA : 프로세스 가상 메모리의 절대주소

 - RVA : 어느 기준 위치(ImageBase)에서 부터의 상대주소

 - RVA + ImageBase = VA

 

 


PE Header

 

- 수많은 정보가 PE헤더에 구조체 형식으로 저장되어 있다.


 

DOS Header : 구조체 크기 0x40

e_magic : DOS signature (4D 5A => ASCII 값 “M Z”)

e_lfanew : NT Header의 offset을 표시 (리틀엔디언주의)


DOS Stub : 없어도 문제 없다.


NT Header : 구조체 크기 0xF8

Signature : (50 45 00 00 => “PE”00)


FileHeader : 파일의 개략적인 속성을 나타냄

Machine : CPU별로 고유한 값 (32비트 Intel x86호환 칩은 14C)

NumberOfSections : 섹션의 개수

SizeOfOptionalHeader : OptionalHeaer 구조체 크기를 나타낸다

Characteristics : 파일의 속성을 나타냄(실행가능한 형태인지, DLL파일인지 등의 정보들이 

bit OR형식으로 조합된다)


OptionalHeader

Magic : (32비트:10B / 64비트:20B)값을 가진다

AddressOfEntryPoint : EP의 RVA값

ImageBase : 메모리에서 PE파일이 로딩되는 시작 주소

SectionAlignment : 메모리에서 섹션의 최소단위

FileAlignment : 파일에서 섹션의 최소단위

SizeOfImage : 메모리가 로딩되었을 때 파일의 전체크기

 [일반적으로 파일의 크기와 메모리에 로딩된 크기는 다르다.

SizeOfHeader : PE Header의 전체 크기(File Alignment의 배수여야 한다), 

   파일 시작에서 SizeOfHeader 옵셋만큼 떨어진 위치에 첫 번째 섹션이 위치한다.

Subsystem : (1:Driver file / 2:GUI / 3:CUI)

NumberOfRvaAndSizes : OptionalHeader의 마지막 멤버인 DataDirectory 배열의 개수를 나타낸다.

                                                 PE로더는 이 값을 보고 배열의 크기를 인식한다. 

DataDirectory : IMAGE_DATA_DIRECTORY 구조체의 배열로, 배열의 각 항목마다 정의된 값을 가진다.

Section Header : 각 섹션의 속성을 정의한 것, 

   섹션헤더는 각 섹션별 IMAGE_SECTION_HEADER구조체의 배열로 되어있다.

NAME : 그냥 참고용

VirtualSize : 메모리에서 섹션이 차지하는 크기

VirtualAddress : 메모리에서 섹션의 시작 주소(RVA), SectionAlignment에 맞게 설정된다

SizeOfRawData : 파일에서 섹션이 차지하는 크기

PointerToRawData : 파일에서 섹션의 시작 위치, FileAlignmnet에 맞게 설정된다

Characteristics : 섹션의 속성(bit OR)

'Reversing > 이론' 카테고리의 다른 글

PE File Format  (0) 2015.01.30

하얀백숙 Reversing/이론