본문 바로가기

[+] Information/[-] RCE

PE 구조 (6)

이번글 부터는 섹션에 대해서 알아 볼 차례이다.

섹션헤더 영역에는 각 세션의 헤더들이 있는데 섹션들은 이 헤더에 메타데이터를 저장하고 있고, 메모리에 로드 될 때 필요한

정보를 저장하고 있다.

섹션헤더의 구조체 형태는 다음과 같다.

[그림 1 - IMAGE_SECTION_HEADER 구조체 형태]

위 이미지에는 없지만 IMAGE_SIZEOF_SHORT_NAME 은 8바이트로 정의되어 있으며, 이름의 길이가 8바이트를 넘어가게 되면

8바이트 이후로는 잘리며, 8바이트가보다 짧을 경우 남는 공간은 NULL로 채워지게 된다.


아래는 notepad.exe의 .text 섹션의 헤더 영역이다. 각 섹션들도 같은 구조이기 때문에 .text섹션을 예를 들어 각 구조체

멤버들을 표시 한 것이다.

[그림 2 - IMAGE_SECTION_HEADER 구조체멤버 표시]

 - Name : 섹션의 이름부분으로, 8바이트 내에서 사용자가 임의로 수정 가능하며, 위에서 설명한 성격을 지니고 있다.

 - VirtualSize : 메모리에 로드 되는 섹션의 전체 크기이다. 이 필드는 실행파일에서만 존재하고 오브젝트 파일에서는 0으로
                     설정되어 있고, SizeOfRawData 보다 크다면 섹션의 나머지 부분은 0으로 채워진다. 크기는 4바이트이다.

 - VirtualAddress : 메모리에 로드 되었을 때의 RVA 값을 가지고 있다. 오브젝트 파일의 경우 0으로 설정된다.
                           크기는 4바이트 이다.

 - SizeOfRawData : 실행 파일의 경우 디스크 상에서 초기화된 데이터의 크기를 말하며, Optional Header의 FileAlignment 값의
                             배수이어야 하고, VirtualSize보다 작다면 섹션의 나머지 부분은 0으로 채워진다. 오브젝트 파일의 경우
                             0으로 설정된다. 크기는 4바이트 이다.

 - PointerToRawData : PE 파일 내에서의 섹션 위치의 오프셋을 값으로 가지고 있다. 실행파일의 경우 이 값은 무조건
                                FileAlignment의 배수여야 한다. 크기는 4바이트 이다.

 - PointerToRelocations : 섹션 재배치에 대한 시작 지점 오프셋을 값으로 가지고 있다. 이 값은 보통 오브젝트 파일에
                                     사용되며, 실행파일의 경우 0으로 설정된다. 크기는 4바이트 이다. 위 이미지에서도 보이다 싶이
                                     notepad.exe는 실행파일이어서 0으로 셋팅되어 있다.

 - PointerToLinenumbers : 해당 섹션에 대한 Line-number 엔트리의 시작 지점 주소값을 가지고 있다. Line-number 엔트리는
                                      COFF 포맷으로 지금은 사용하지 않기 때문에 0으로 설정되어 있다.

 - NumberOfRelocations : 해당 섹션의 재배치 엔트리 숫자를 값으로 가지고 있다. 실행 파일의 경우 항상 0으로 설정되어 있다.

 - Characteristics : 해당 섹션의 속성 정보를 표시하는 값을 가지고 있다. 위 이미지에서 경우 "0x60000020" 이라는 값을
                            가지고 있는데, 이 값은 "0x40000000", "0x20000000", "0x00000020" 이라는 값이 합쳐진 값이다.
                            해당 값들에 대한 속성정보는 아래와 같다.

[그림 3 - 속성 목록표]

더 많은 속성들이 있지만 이 글 특성상 다 표시할 필요는 없을 것 같아 중요한 것만 목록화 하였다.

더 많은 속성들을 보기 원한다면 WinNT.h 파일을 참조하기 바란다.

만약 섹션의 이름이 임의로 바꿔져 어떠한 섹션인지 파악이 안된다면 섹션 속성정보를 보는것도 하나의 방법이다.

섹션 속성정보들은 각 섹션마다 기본적으로 정의되어 있어 섹션 속성정보만 봐도 어떠한 섹션인지 파악이 가능하다.

 

 

'[+] Information > [-] RCE' 카테고리의 다른 글

PE 구조 (8)  (0) 2012.01.01
PE 구조 (7)  (0) 2012.01.01
PE 구조 (5)  (0) 2011.12.31
PE 구조 (4)  (0) 2011.12.30