서두
리버싱 핵심원리 책에서 PE Viewer(PE Parser)를 직접 제작해 보라고 해서 직접 만들어 보았습니다.

사전 지식
본문에서 언급되지만, 자세히 설명하지 않는 사전 지식입니다.
- C++ 프로그래밍 언어
- Windows PE 파일 구조
결과물

위 사진처럼 DOS 헤더, NT 헤더, FILE 헤더, OPTIONAL 헤더, SECTION 헤더, 그리고 프로그램에서 import 하고 있는 함수들의 정보를 담은 IMAGE_IMPORT_DESCRIPTOR 까지 출력하도록 만들었습니다.
파싱 작업
처음엔 파싱을 어떻게 해야 할지 몰라서 저 큰 구조체의 정보들을 파일로부터 한 땀 한 땀 손수 읽어 들여야 하는 줄 알았습니다. (구조체의 멤버 크기에 맞게 한 땀 한 땀.. 2바이트 읽고, 4바이트 읽고, 이런 식으로요.)
하지만 그럴 필요는 없습니다. 그냥 파싱 하려는 구조체가 있으면 그 구조체 타입의 변수를 하나 선언하고, 그 변수에 fread 함수를 통해서 파일로부터 구조체의 크기만큼 읽어오기만 하면 그 변수를 통해 멤버로 손쉽게 접근할 수 있습니다.
IMAGE_DOS_HEADER DOSHeader = { 0, };
void ParseDOSHeader() {
fseek(fp, 0, SEEK_SET);
fread(&DOSHeader, sizeof(IMAGE_DOS_HEADER), 1, fp);
}
이렇게 하면 DOSHeader.e_lfanew 와같은 방법으로 IMAGE_DOS_HEADER 구조체의 멤버에 간편하게 접근할 수 있습니다.
소스 코드
깃허브에 소스 코드를 올려놨습니다. 참고하시고 도움이 됐으면 좋겠습니다.
https://github.com/minmoong/pe-parse
GitHub - minmoong/pe-parse: Windows PE file parser
Windows PE file parser. Contribute to minmoong/pe-parse development by creating an account on GitHub.
github.com
'Security > Reversing' 카테고리의 다른 글
| 추억의 게임 렙업만이살길2 리버싱 일기 - 1편 (1) | 2025.06.01 |
|---|---|
| DLL Injection 기법 - 프로세스에 침투하기 (0) | 2024.02.08 |
| 윈도우 이벤트 메시지 후킹 기법 (0) | 2024.02.06 |
| 인라인 패치 기법 (2) | 2024.02.04 |
| Frida로 유니티 게임 리버싱하기 (궁수의 전설) (0) | 2024.01.29 |