메모장 입니다2
Windows] 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)
'Study > 리버싱' 카테고리의 다른 글
지뢰찾기 맵핵 구현 (0) | 2017.08.08 |
---|---|
IDA 설명 (0) | 2017.08.08 |
Windows] Debug Blocker - 이론 (0) | 2017.08.08 |
악성코드 종류 (0) | 2017.08.08 |
C Source] Text 섹션 주소 찾기 (0) | 2017.08.08 |