본문 바로가기

PE 구조

PE 구조 (8) 이번에는 이전 글에서 다루지 못한 .rsrc 섹션에 대해서 알아보도록 하겠다. [.rsrc 섹션] 이 섹션은 GUI 프로그램에서 많이 볼 수 있는 섹션으로 그래픽 정보를 저장하는 섹션이다. 해당 섹션의 구조는 다른 섹션과는 달리 트리구조로 되어 있으며 이 트리를 구성하는데 있어 각 노드들에는 두가지의 구조체가 있다. IMAGE_RESOURCE_DIRECTORY라는 구조체와 IMAGE_RESOURCE_DIRECTORY_ENTRY 구조체이다. 또 섹션의 트리에는 속하지 않지만 실제 리소스들의 대한 정보를 가지고 있는 IMAGE_RESOURCE_DATA_ENTRY 구조체가 있다. 해당 섹션의 속성정보를 알아본 뒤 각 구조체에 대해서 알아보도록 하겠다. - IMAGE_SCN_CNT_INITIALIZED_DATA.. 더보기
PE 구조 (7) 이번에는 실행파일에서의 핵심구조인 섹션을 알아 볼 차례이다. 앞에서 알아본 PE 구조들은 실행파일들의 정보나 메모리에 로드될 때의 정보 등이었지만 지금 알아 볼 섹션은 실행파일의 동작에 관한 정보들이다. 섹션에는 여러가지 섹션이 있는데, 대부분 .text, .data, .rdata, .rsrc, .edata, .idata, .reloc 섹션이 많이 사용된다. 각 섹션이 의미하는 바는 각 섹션을 분석할 때 설명할 것이다. 분석하고자 하는 파일의 섹션정보는 PE File Header를 보면 NumberOfSections에 섹션 개수가 나타나 있으며, 각 섹션의 위치 정보 등은 Section Header 영역에 보면 나와 있다. 아래는 notepad.exe 섹션정보를 Hex Viewer 등으로 본 이미지이다... 더보기
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 구조체 멤버이다. 다른 구조체 멤버들은 사용하지 않.. 더보기