오브의 빛나는 별

2부 13장 PE File Format(4) 본문

리버싱

2부 13장 PE File Format(4)

오브의 별 2022. 4. 24. 14:14
반응형

안녕하세요, 오브입니다.

오늘은 NT Header의 Optional Header에 대해 알아보겠습니다.

https://staraube.tistory.com/51?category=548043

 

2부 13장 PE File Format(1)

안녕하세요, 오브입니다. 오늘은 PE 파일의 기본구조와 VA, RVA에 대해 알아보겠습니다. PE File Format 13.1. 소개 PE 파일: Windows 운영체제에서 사용되는 실행 파일 형식. 기존 UNIX에서 사용되는 COFF 기

staraube.tistory.com

 

https://staraube.tistory.com/52?category=548043

 

2부 13장 PE File Format(2)

안녕하세요, 오브입니다. 오늘은 PE 헤더의 많은 구조체 중 DOS Header와 DOS Stub에 대해 알아보겠습니다. https://staraube.tistory.com/51?category=548043 PE File Format 13.3. PE 헤더 13.3.1. DOS Header D..

staraube.tistory.com

https://staraube.tistory.com/53

 

2부 13장 PE File Format(3)

안녕하세요, 오브입니다. 오늘은 NT Header에 대해 알아보겠습니다. https://staraube.tistory.com/51?category=548043 https://staraube.tistory.com/52?category=548043 PE File Format 13.3.3. NT Header NT he..

staraube.tistory.com

 

PE File Format
  • PE 헤더 구조체 중 가장 크기가 큰 IMAGE_OPTIONAL_HEADER32
    • 아래의 값들은 파일 실행에 필수적이라 잘못 세팅되면 파일이 정상 실행x

1. Magic

  • IMAGE_OPTIONAL_HEADER32 구조체인 경우 10B, IMAGE_OPTIONAL_HEADER64 구조체인 경우 20B 값을 가짐

 

2. AddressOfEntryPoint

  • EP의 RVA 값을 가지고 있음
  • 프로그램에서 최초로 실행되는 코드의 시작 주소

 

3. ImageBase

  • 프로세스 가상 메모리는 0~FFFFFFFF범위(32비트 경우)
  • 광할한 메모리에서 PE 파일이 로딩되는 시작 주소
  • XEX, DLL 파일은 user memory 영역인0~FFFFFFFF범위에 로딩
  • SYS 파일은 kenel memory 영역인 80000000~FFFFFFFF에 로딩
  • 개발 도구로 만드는 EXE 파일이 00400000
  • DLL 파일은 10000000
  • PE 로더는 EIP 레지스터 값을 ImageBase + AddressOfEntryPoint 값으로 세팅

 

4. SectionAlignment, FileAlignment

  • PE 파일의 Body 부분을 섹션으로 나눠집
  • FileAlignment: 메모리에서 섹션의 최소단위
  • 파일/메모리 섹션 크기는 FileAlignment/SectionAlignment의 배수

 

5. SizeOfImage

  • PE 파일이 메모리에 로딩됐을 때 가상 메모리에서 PE Image가 차지하는 크기
  • 파일 크기와 메모리에 로딩된 크기는 다름

 

6. SizeOfHeader

  • PE 헤더의 전체 크기
  • 값: FileAlignment의 배수
  • 파일 시작에서 SizeOfHeader 옵셋만큼 떨어진 위치에 첫 번째 섹션 위치

 

7. Subsystem

  • 이 값을 보고 시스템 드라이버 파일인지, 일반 실행 파일인지 구분 가능
의미 비고
1 Driver File 시스템 드라이버 ex) ntfs.sys
2 GUI 파일 창 기반 애플리케이션 ex) notepad.exe
3 CUI 파일 콘솔 기반 애플리케이션 ex) cmd.exe

 

8. NumberOfRvaAndSizes

  • IMAGE_OPTIONAL_HEADER32 구조체의 마지막 멤버인 DataDirectory 배열의 개수
  • 구조체 정의에 IMAGE_NUMBEROF_DIRECTORY_ENTRIES(16)이라고 명시되어 있지만 PE 로더는 NumberOfRvaAndSizes 값을 보고 배열 크기 인식

 

9. DataDirectory

  • IMAGE_DATA_DIRECTORY 구조체의 배열로, 배열의 각 항목마다 정의된 값 가짐
    • EXPORT: DLL 등의 파일에서 외부에 함수를 공개하기 위한 정보들을 가짐. IMAGE_EXPORT_DIRECTORY 구조체의 시작 번지 가리킴. 이 시작 번지가 익스포트 섹션의 시작 주소
    • IMPORT: 프로그램 실행을 위해 Import 하는 DLL 이름과 사용할 함수 정보가 담긴 INT 주소와 IAT(임포트 주소 테이블) 주소 담은 정보가 담김. IMAGE_IMPORT_DIRECTORY 시작 번지
    • RESOURCE: IMAGE_RESOURCE_DIRECTORY 구조체의 시작 번지. 이 시작 번지가 리소스 섹션의 시작 주소임
    • TLS Directory: 스레드 지역 저장소 초기화 섹션에 대한 포인터. VirtualAddress는 이 TLS 섹션을 가리키는 RVA가 됨

 

반응형

'리버싱' 카테고리의 다른 글

2부 13장 PE File Format(실습1)-32bits  (0) 2022.05.14
2부 13장 PE File Format(5)  (0) 2022.04.24
2부 13장 PE File Format(3)  (0) 2022.04.24
2부 13장 PE File Format(2)  (0) 2022.04.23
2부 13장 PE File Format(1)  (0) 2022.04.23