본문 바로가기

Subject/Reversing

PE 구조

0. 정의


 -Portable Executable

 -Windows 실행 파일.

 -PE or PE32

  (<-> 64bit: PE+, PE32+)

 -종류

종류 

확장자 

실행  

EXE, SCR

드라이버 

SYS, VXD

라이브러리 

DLL, OCX, CPL, DRV SYS 

오브젝트 

OBJ

 (오브젝트를 제외하곤 모두 실행 가능)




1. 구조


 1)DOS 헤더 

>DOS 파일 호환성 고려

>주요 멤버

>>(WORD)  e_magic: 'MZ', 이 값이 맞으면 PE로더가 실행 파일을 메모리에 로드. 

                                                       //뭐가 맞다는건지는 안나와있음. 그냥 'MZ'만 외우셈. 

 

>>(LONG)  e_lfanew: NT 헤더의 RWA


 2)NT 헤더

>(DWORD) Signature: 'PE', 이 값으로 올바른 PE 포맷인지 확인.


>FILE 헤더

>>(WORD)  Machine: 실행 플랫폼(CPU) 정보.

>>(WORD)  NumberOfSections: 섹션 개수 //섹션 추가시 변경.

>>(WORD)  SizeOfOptionalheader: Optional 헤더 크기(32와 64가 다르기 때문에 명시)

>>(WORD)  Characteristics: 파일 속성.


>OPTIONAL 헤더


>>Magic: Optional 헤더 종류 -> 32bit(값: 10B) / 64bit(값: 20B)

>>AddressOfEntryPoint: EP(프로그램 시작 주소)의 RVA 값. 

>>ImageBase: 메모리에 로딩되는 PE파일의 시작주소.

>>EP: ImageBase + AddressOfEntryPoint

>>Subsystem: 시스템 드라이버 파일(.sys)인지, 일반 실행 파일(.exe, .dll)인지 구분.

>>SectionAlignment, FileAlignment:  섹션의 배치 간격, 섹션의 시작주소는 이 값의 배수여야 한다.

>SectionAlignment=0x1000 -> 섹션헤더의 RVA=0x1000, 0x2000, 0x3000, ...  

>>NumberOfRVAAndSize: Optional 헤더 마지막 멤버인, Data Directory 배열의 크기.

>>Data Directory: IMAGE_DATA_DIRECTORY 구조체 배열.


 3)Section 헤더

>프로그램 코드를 여러 개의 섹션(text, data, rsrc 등)으로 나누어 관리.

>접근 권한

>멤버 상세 설명

>>Name: 아무거나 해도 됨.

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

>>VirtualAddress: 섹션의 시작주소(RVA)

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

>>PointerToRawData: 섹션의 시작주소(RAW)

>>Characteristics: 섹션의 속성(bit OR)


'Subject > Reversing' 카테고리의 다른 글

지뢰찾기 맵핵 구현  (0) 2017.01.05
IDA] 설명, 사용법  (1) 2017.01.03
악성코드 종류  (0) 2016.12.05
C Source] Text 섹션 주소 찾기  (0) 2016.11.18
서비스 프로세스  (0) 2016.11.03