본문 바로가기

리버스 엔지니어링

윈도우 실행 파일 구조(PE 파일)

728x90
반응형

PE파일이란?

Portable Executable의 약자로, 윈도우 운영체제에서 실행 파일(exe), DLL, object code 등을 위한 파일 형식이다.

 

PE 포맷은 윈도우 로더(Loader)가 실행 가능한 코드를 관리하기 위한 파일 포멧(구조체)이다.

 

exe 파일을 실행하면 로더가 해당 파일 구조를 분석하고 적절히 메모리에 로드하여 프로그램의 진입점으로 들어가게 한다.

 

 

PE 파일 구조

  • 헤더 부분 : 메모리에 로드될 떄 필요한 여러 중요 정보들을 포함한다. (주요 섹션의 위치, 크기, 속성 등)
  • 바디(섹션) 부분 : 코드나 데이터들이 섹션(Section)이라는 블록 단위로 각각 저장된다.

 

  • 파일에서는 Offset으로 메모리에 적재될 때는 VA(Virtual Address)로 위치를 표현
  • 파일이 메모리에 로드되면 모양이 달라진다. (Section 크기, 위치 등)
  • 헤더 끝 부분과, 섹션별 끝에는 Null Padding 영역이 존재 (기본 처리 단위 배수로 Allignment)

 

Offset, VA, RVA

  • Offset : 파일의 첫 바이트 부터 거리를 뜻함
  • RVA (Relative Virtual Address) : 기준(ImageBase)로부터 상대주소
  • VA (Virtual Address) : 프로세스 가상 메모리의 절대 주소 ( VA = ImageBase + RVA )

PE header에 많은 정보는 RVA형태로 존재한다.

 

*이유

보안 등의 이유로 고정 주소 로드를 사용하지 않는다.

전적으로 로더가 판단해서 PE파일의 시작 번지를 결정한다.

 

따라서, 아직 결정되지는 않았지만, PE가 로드될 이미지의 가상 시작 번지(ImageBase)를 하나의 기준으로 하고, 그 번지에 대한 상대적 오프셋 값(RVA)을 PE파일에 기록하는 방식을 택했다.

 

참고)

더보기

PE파일(주로 DLL)이 프로세스 가상 메모리 특정 위치에 로드되는 순간,

해당 위치에 이미 다른 PE파일(DLL같은)이 있을 수 있다.

 

그럴때는 재배치(Relocation)을 과정을 통해 다른 위치에 로드 되어야 하는데,

만약 PE header정보들이 VA로 되어 있다면 재배치 이후 정상적인 엑세스가 이루어지지 않을 것이다.

그렇기 때문에 RVA를 통해 VA 주소를 계산한다.

 

References

reversecore.com/18

윈도우 실행파일 구조(PE파일)

728x90
반응형