C언어로 개발하는 PE Viewer(PE 뷰어) 다섯번째 포스팅에서는 지난 포스팅에 Import Directory Table 에 이어서 PE 파일 파싱의 꽃? 이라고 할 수 있는 IAT(IMAGE Address Table)와 INT(Image Name Table)를 파싱해보도록 한다. IAT와 INT에 접근하기 위해선 Import Directory Table에 대한 접근이 필수인데 관련 내용은 아래 포스팅에서 참고하길 바란다. PE Viewer 개발 (4) - IMPORT Directory Table PE Viewer 개발 (4) - IMPORT Directory Table C언어로 개발하는 PE Viewer(PE 뷰어) 네번째 포스팅에서는 지난 포스팅의 섹션헤더에 이어 IMPORT Directory T..
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..