본문 바로가기

[+] Information/[-] RCE

PE 구조 (6) 이번글 부터는 섹션에 대해서 알아 볼 차례이다. 섹션헤더 영역에는 각 세션의 헤더들이 있는데 섹션들은 이 헤더에 메타데이터를 저장하고 있고, 메모리에 로드 될 때 필요한 정보를 저장하고 있다. 섹션헤더의 구조체 형태는 다음과 같다. [그림 1 - IMAGE_SECTION_HEADER 구조체 형태] 위 이미지에는 없지만 IMAGE_SIZEOF_SHORT_NAME 은 8바이트로 정의되어 있으며, 이름의 길이가 8바이트를 넘어가게 되면 8바이트 이후로는 잘리며, 8바이트가보다 짧을 경우 남는 공간은 NULL로 채워지게 된다. 아래는 notepad.exe의 .text 섹션의 헤더 영역이다. 각 섹션들도 같은 구조이기 때문에 .text섹션을 예를 들어 각 구조체 멤버들을 표시 한 것이다. [그림 2 - IMAGE.. 더보기
PE 구조 (5) 이번에는 IMAGE_DATA_DIRECTORY 구조체를 알아볼 차례이다. WinNT.h를 보면 IMAGE_OPTIONAL_HEADER안에 있지만, 사실은 NT Additional Fields 하부구조체이다. 구조는 아래와 같다. [그림 1 - 구조체 형태] WinNT.h에 명시되어 있는 것을 보면 IMAGE_DATA_DIRECTORY의 엔트리 개수는 16개로 정의되어 있다. [그림 2 - 엔트리 정의] 엔트리는 다음과 같이 정의되어 있고, 마지막은 0으로 예약되어 있기 때문에 16개가 되는 것이다. [그림 3 - 엔트리 목록] 아래는 notepad.exe의 IMAGE_DATA_DIRECTORY 구조체의 각 엔트리 부분을 표시한 것이다. 표시한 각 부분의 앞쪽 4바이트는 RVA(DWORD VirtualAd.. 더보기
PE 구조 (4) 이번에는 PE 헤더 영역에 3번째 부분인 PE File Optional Header 부분에 대해 알아 볼 차례이다. [PE File Optional Header] 이 부분은 실행파일의 실행정보가 담긴 부분이며, 필수적인 부분이어서 PE File Header 부분보다 더 중요시 된다. Option이라는 이름이 붙은 이유는 오브젝트가 이 영역을 선택적으로 가질 수 있기 때문인데, 정작 오브젝트에서는 별다른 기능을 발휘하지 않는다. PE File Optional Header 부분은 IMAGE_OPTIONAL_HEADER 구조체로 되어 있으며, 크기가 유동적이고 앞서 보았던 IMAGE_NT_HEADER의 SizeOfOptionalHeader 구조체멤버에 의해 크기가 결정 되며, PE File Header 바로 .. 더보기
PE 구조 (3) 이제부터 알아 볼 PE 영역은 PE 파일의 시작 부분이라고 할 수 있는 PE Header 영역이다. PE Header 영역에는 PE File Signature, PE File Header, PE File Optional Header 영역이 있다. PE Header 영역은 IMAGE_NT_HEADERS 구조체로 이루어져 있는데 구조체 정보는 다음과 같다. [그림 1 - IMAGE_NT_HEADERS 구조체 정보] 위에 정의된 구조체는 64bit 구조체이며 아래는 32bit 구조체이다. 어느정도 직관적인 구조체 멤버이름을 통해서 왜 PE 헤더영역이 3가지로 나누어 졌는지 알 수 있다. 이제부터 PE 헤더 영역을 구성하고 3가지 영역에 대하여 알아 볼 것이다. [PE File Signature] 이 영역은 D.. 더보기
PE 구조 (2) 이번 글에서 알아볼 PE 구조의 영역은 DOS 영역이다. 이 영역은 윈도우 실행 파일을 DOS 모드에서 실행하려고 할 때 사용자에게 에러 메시지를 보여주기 위해 존재한다. 실제로 이 영역은 윈도우 실행파일이 윈도우에서 실행할 때에는 아무런 영향을 주지 않는 부분이어서 볼만한 내용이 많지는 않다. DOS MZ Header와 DOS Stub Program 영역으로 이루어져 있는 이 DOS 영역에 대해서 자세히 알아보자. [DOS MZ Header] 이 영역은 WinNT.h 헤더파일에 정의되어 있으며, 영역의 구조부터 알아보면 아래와 같다. [그림 1 - DOS MZ Header의 구조체 구조] 여기서 눈여겨 볼 구조체 멤버는 e_magic과 e_lfanew 구조체 멤버이다. 다른 구조체 멤버들은 사용하지 않.. 더보기