C언어로 개발하는 PE Viewer(PE 뷰어) 세번째 포스팅에서는 지난 포스팅의 NT 헤더에 이어서 섹션 헤더(IMAGE_SECTION_HEADER) 구조체 배열을 파싱해볼 것이다. 섹션 헤더는 정해진 갯수대로 있는 것이 아니라 PE 파일마다 다르기 때문에 분석 후 파싱하는 코드를 짤 때 주의해야 한다. Section Header (IMAGE_SECTION_HEADER) 섹션 헤더의 IMAGE_SECTION_HEADER 구조체는 하나가 아니라 구조체 배열이다. IMAGE_SECTION_HEADER 정의 IMAGE_NT_HEADER 구조체에 이어서 IMAGE_SECTION_HEADER 구조체의 배열이 온다. PE 파일은 code, data, resource 등을 각각의 섹션으로 나누어 저장하는데 이에 관..
C언어로 개발하는 PE Viewer(PE 뷰어) 두번째 포스팅에서는 NT 헤더(IMAGE_NT_HEADERS) 구조체를 파싱해볼 것이다. 찾는 부분이 아니라면 PE Viewer 관련 다른 포스팅을 확인해보길 바란다. 이번 포스팅은 상당히 길다. 나누기가 애매해서 그냥 한꺼번에 올렸다. NT Header (IMAGE_NT_HEADER) IMAGE_NT_HEADER 구조체의 시작 위치는 IMAGE_DOS_HEADER 구조체의 e_lfanew 변수를 참조해 구할 수 있다. 시작 위치: IMAGE_DOS_HEADER.e_lfanew 크기: 248바이트(0xF8) IMAGE_NT_HEADERS 정의 IMAGE_NT_HEADER 구조체는 아래 사진에서 구분지어있는 순서대로 ‘Signature’, ‘FileHeade..
C언어로 개발하는 PE Viewer(PE 뷰어) 첫번째 포스팅에서는 DOS 헤더의 IMAGE_DOS_HEADER 구조체를 분석하고 파싱해볼 것이다. 한꺼번에 작성하려니, 포스팅 길이가 너무 길어져서 부득이하게 분할하게 되었다. IMAGE_NT_HEADERS 구조체를 포함한 다른 헤더나 섹션 관련은 이 다음 포스팅들을 확인해주기 바란다. 시작하기에 앞서 PE Viewer(PE 뷰어) 개발의 본격적인 시작인 IMAGE_DOS_HEADER 파싱에 앞서 간단히 부수적? 요소들을 설명하고 시작하려 한다. PE 파일 체크 및 x32/x64 체크 제일 먼저, PE 파일인지에 대한 확인과 x32와 x64 체크를 수행하는데 이는 IMAGE_FILE_HEADER의 Machine을 이용해 '0x14c -> 32bit, 0x..