궁금한게 많은 열아홉
article thumbnail

아마 제목이 무슨 말인가 싶어서 들어와본 사람들이 많지 않을까 싶습니다. 악성 코드를 분석하기 위해 여러가지 방법을 활용할 수 있는데, 그중 하나가 이 PE라는 녀석입니다. Physical Education? 아니, Portable Excutable이라고 하죠.

 

PE란?

영어 약자를 풀면 PE(Portable Executable) 즉, 말 그대로 옮겨다니면서 실행시킬 수 있는 파일을 뜻합니다. MS에서 다른 운영체제와 이식성을 좋게 하기위해 만든 파일 포맷입니다. 

종류

실행, 드라이버, 라이브러리, 오브젝트 총 4개의 계열이 있습니다

  • 실행계열: EXE, SCR
  • 드라이버계열: SYS,VXD
  • 라이브러리 계열: DLL, OCX, CPL, DRV
  • 오브젝트 계열: OBJ

PE구조는 파일이 실행되기 위한 모든 정보를 볼 수 있고, 프로그램이 사용하는 API나 어느 메모리주소에 파일이 로딩되는지 알 수 있기 때문에 알아하는 중요한 개념이다.

 

기본 구조

메모리에 적재(loading 또는 mapping)될때의 모습

[ PE파일(메모장.exe)이 메모리에 로딩되는 모습 ]

  • PE header: DOS header ~ Section header
  • PE Body: 그밑 Section들

 

[ VA(Virtual Address, 절대주소) ]

메모리에서는 절대주소로 위치를 표현하며 이를 VA라고 합니다.

 

Null 값이 존재하는 이유

자세히 보시면 헤더의 끝부분과 각섹션 끝에 Null값이 붙는것을 확인하실 수 있습니다. Null은 padding이라고 불리기도 합니다.

즉. 최소 기본단위(컴퓨터에서 파일, 메모리, 네트워크 패킷 등을 처리할때 효율을 높이기 위한 개념)를 사용하기위해 Null값이 존재합니다.

파일/메모리에서 섹션의 시작위치는 각각 최소 기본단위의 배수에 해당하는 위치여야하고 빈공간은 Null로 채워버립니다. 

 

[ 최소기본단위의 배수로 시작 ]

RVA

VA와는 반대되는 개념입니다. 즉, 어느 기준 위치(ImageBase)에서부터의 상대주소 어떤 기준에서부터 상대주소를 뜻합니다

  1. 먼저 PE가 메모리에 적재되기 전에 기본 ImageBase는 0입니다
  2. 그리고 PE안에서는 상대주소로 주소가 적히게 됩니다
  • 메모리에 적재시 절대주소가 들어가게 된다면 Relocation이 어렵기 때문입니다
  • 상대주소가 들어가면 ImageBase에서 얼마만큼 떨어진 곳으로 이동하면 되기때문에 Relocation이 쉽게되어 상대주소를 사용합니다.
  • RVA + ImageBase = VA
  • 상대주소 + 기준위치 = 절대주소

사용해야 하는 이유

PE헤더 내의 정보는 RVA형태로 된 것이 많습니다. PE파일(주로DLL)이 프로세스 가상메모리의 특정위치에 로딩되는 순간 이미 그위치에 다른PE파일(DLL)이 로딩되어 있을 수 있습니다. 이때 재배치(Relocation)를 통해서 비어있는 다른자리에 로딩되어야 하는데 만약 PE헤더 정보들이 VA로 되어있다면 정상적인 엑세스가 이루어지지 않았을것입니다.

 

참고 : 여기

 

profile

궁금한게 많은 열아홉

@jjin502

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!