PE 파일 분석을 위한 C++ 프로그램 제작

2024. 2. 1. 01:43·Security/Reversing
반응형

서두

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

사전 지식

본문에서 언급되지만, 자세히 설명하지 않는 사전 지식입니다.

  • C++ 프로그래밍 언어
  • Windows PE 파일 구조

결과물

(예시) DOS 헤더

 

위 사진처럼 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
'Security/Reversing' 카테고리의 다른 글
  • DLL Injection 기법 - 프로세스에 침투하기
  • 윈도우 이벤트 메시지 후킹 기법
  • 인라인 패치 기법
  • Frida로 유니티 게임 리버싱하기 (궁수의 전설)
minmoong
minmoong
    반응형
  • minmoong
    minmoong
    minmoong
  • 전체
    오늘
    어제
    • Categories (16)
      • Programming (1)
        • Python (1)
        • WIPI (0)
      • Security (11)
        • Pwnable (2)
        • Reversing (9)
      • 기타 (3)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    렙업만이살길1
    상남자의 OS
    우분투 깔고
    WIPI emulator
    github wie
    파이썬
    cpython-internals
    후킹
    밀크초코 채팅
    게임 리버싱
    hopper disassembler 염병
    역대급 병크
    우분투 문제해결
    채팅 버그
    리버스 엔지니어링
    밀초 채팅 버그
    렙업만이살길3
    WIPI 에뮬
    리버싱
    Cpython
    게임 해킹
    WIPI 에뮬레이터
    Python
    리버싱 기법
    밀초 버그
    렙업만이살길2
    c++
    BiDi
    렙업만이살길
    밀초
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
minmoong
PE 파일 분석을 위한 C++ 프로그램 제작
상단으로

티스토리툴바