본문 바로가기
메가IT아카데미 국기과정/리버싱과 악성코드 분석

[1-3] PE 파일 분석(섹션 헤더)

by 한님폐하 2022. 9. 13.

1. IMAGE_SECTION_HEADER

  • 섹션 헤더는 각 섹션의 속성 정보들을 갖고 있는 구조체이다.
  • 섹션이란 프로그램의 실제 내용(어셈블리 코드, 전역 변수, 정적 변수)을 담고 있는 영역을 의미한다.
    • .text 프로그램 코드를 담고 있는 섹션, IAT 정보를 갖고 있음
    • .data 전역 변수, 정적 변수의 할당을 위한 섹션, 읽기/쓰기 가능한 데이터를 갖고 있음
    • .rdata 읽기 전용 섹션, 문자열, 상수 정보를 갖고 있음
    • .bss 초기화되지 않은 변수를 갖고 있는 섹션 
    • .rsrc 아이콘, 커서, 추가 바이너리 등의 리소스 관련 정보를 갖고 있는 섹션
    • .idata Import 할 DLL/API 정보를 갖고 있는 섹션
    • .edata Export 할 DLL/API 정보를 갖고 있는 섹션
    • .reloc 재배치 정보를 갖고 있는 섹션

 


2. 섹션 헤더 구조

  • 40byte(0x28)
    • Name 8byte 섹션 이름
    • Virtual Size 4byte 메모리에서 섹션이 차지하는 크기
    • RVA 4byte 메모리에서 섹션의 시작 주소
    • Size of Raw Data 4byte 파일에서 섹션이 차지하는 크기
    • Pointer to Raw Data 4byte 파일에서 섹션의 시작 주소

 

3. '.text' 섹션 헤더

  • 코드 정보, 실행, 읽기 속성(권한) 정보가 포함된 섹션
  •  Name 8byte 2E 74 65 78 74 00 00 00 (.text)
    •  섹션의 ASCII 16진수 값
    • 이름은 프로그램 동작과 무관하므로 변경해도 상관 없음
  •  Virtual Size 4byte 00 05 2C A1 (339105byte)
    • 메모리에서 섹션이 차지하는 크기
  • RVA 4byte 00 00 10 00
    • 메모리에 로드될 때 섹션의 시작 주소
    • VA = ImageBase + RVA = 0x01000000 + 0x00001000 = 0x01001000
  •  Size of Raw Data 4byte 00 05 2E 00 (339456byte)
    •  파일에서 섹션이 차지하는 크기
  •  Pointer to Raw Data 4byte 00 00 04 00
    • 파일에서 섹션의 시작 주소
  •  Characteristics 4byte 60 00 00 20
    • 섹션 속성(권한)에 대한 정보
  • IMAGE_SCN_CNT_CODE 00 00 00 20 실행 가능한 코드를 포함한 속성
  • IMAGE_SCN_MEM_EXECUTE 20 00 00 00 실행 가능한 속성
  • IMAGE_SCN_MEM_READ 40 00 00 00 읽기 가능한 속성
     

 



4. '.data' 섹션 헤더

  • 전역 변수, 정적 변수의 할당을 위한 섹션, 읽기/쓰기 가능한 데이터를 갖고 있음
  • Name 8byte 2E 64 61 74 61 00 00 00 (.data)
    • 섹션의 ASCII 16진수 값
    • 이름은 프로그램 동작과 무관하므로 변경해도 상관 없음
        
  • Virtual Size 4byte 00 00 40 C0 (16576byte)
    • 메모리에서 섹션이 차지하는 크기
  •  RVA 4byte 00 05 40 00
    • 메모리에 로드될 때 섹션의 시작 주소
    • VA = ImageBase + RVA = 0x01000000 + 0x00054000 = 0x01054000
  • Size of Raw Data 4byte 00 00 42 00 (16896byte)
    • 파일에서 섹션이 차지하는 크기
  • Pointer to Raw Data 4byte 00 05 32 00
    • 파일에서 섹션의 시작 주소
  • Characteristics 4byte C0 00 00 40
    • 섹션 속성(권한)에 대한 정보
  • IMAGE_SCN_INITALIZED_DATA 00 00 00 40 초기화된 데이터 속성
  • IMAGE_SCN_MEM_READ 40 00 00 00 읽기 가능한 속성
  • IMAGE_SCN_MEM_WRITE 80 00 00 00 쓰기 가능한 속성

 


5. '.rsrc' 섹션 헤더

  • 아이콘, 커서, 추가 바이너리 등의 리소스 관련 정보를 갖고 있는 섹션
  • Name 8byte 2E 72 73 72 63 00 00 00 (.rsrc)
    • 섹션의 ASCII 16진수 값
    • 이름은 프로그램 동작과 무관하므로 변경해도 상관 없음
  • Virtual Size 4byte 00 06 27 98 (403352byte)
    • 메모리에서 섹션이 차지하는 크기
  • RVA 4byte 00 05 90 00
    • 메모리에 로드될 때 섹션의 시작 주소
    • VA = ImageBase + RVA = 0x01000000 + 0x00059000 = 0x01059000
  • Size of Raw Data 4byte 00 06 28 00 (403456byte)
    • 파일에서 섹션이 차지하는 크기
  • Pointer to Raw Data 4byte 00 05 74 00
    • 파일에서 섹션의 시작 주소
  • Characteristics 4byte 40 00 00 40
    • 섹션 속성(권한)에 대한 정보
  • IMAGE_SCN_INITALIZED_DATA 00 00 00 40 초기화된 데이터 속성
  • IMAGE_SCN_MEM_READ 40 00 00 00 읽기 가능한 속성

 

6. '.reloc' 섹션 헤더

  • 재배치 정보를 갖고 있는 섹션
  • Name 8byte 2E 72 65 6C 6F 63 00 00 (.reloc)
    • 섹션의 ASCII 16진수 값
    • 이름은 프로그램 동작과 무관하므로 변경해도 상관 없음
  • Virtual Size 4byte 00 00 3B 3C (15164byte)
    • 메모리에서 섹션이 차지하는 크기
  • RVA 4byte 00 0B C0 00
    • 메모리에 로드될 때 섹션의 시작 주소
    • VA = ImageBase + RVA = 0x01000000 + 0x000BC000 = 0x010BC000
  • Size of Raw Data 4byte 00 00 3C 00 (15360byte)
    • 파일에서 섹션이 차지하는 크기
  • Pointer to Raw Data 4byte 00 0B 9C 00
    • 파일에서 섹션의 시작 주소
  • Characteristics 4byte 42 00 00 40
    • 섹션 속성(권한)에 대한 정보
  • IMAGE_SCN_INITALIZED_DATA 00 00 00 40 초기화된 데이터 속성
  • IMAGE_SCN_MEM_DISCARDABLE 02 00 00 00 실행 파일이 메모리에 로딩되고 버려질 수 있는 속성
  • IMAGE_SCN_MEM_READ 40 00 00 00 읽기 가능한 속성