Reverse Engineering

[리버싱 핵심원리 study] 13장 PE File Format (2)

maple19out 2020. 12. 25. 22:13
 

[리버싱 핵심원리 study] 13장 PE File Format (1)

PE(Portable Executable) 파일은 Windows 운영체제에서 사용되는 실행 파일 형식이다. 기존 UNIX의 COEF(Common Object File Format)을 기반으로 Microsoft에서 만들었으며, 문자 그대로 이식성을 좋게 하려는 의..

maple19out.tistory.com

- RVA to RAW

Section Header를 잘 이해했다면, PE 파일이 메모리에 로딩되었을 때 각 섹션에서 메모리의 주소와 파일 offset을 잘 매핑할 수 있어야 한다. 이러한 매핑 과정을 'RVA to RAW'라고 부른다. 기본적인 방법은 다음과 같다.

1. RVA가 속해 있는 section을 찾는다.

2. 간단한 비례식을 사용해서 파일 offset(RAW)를 계산한다.

 

비례식은 다음과 같다.

RAW - PointerToRawData = RVA - VirtualAddress

RAW = RVA - VirtualAddress + PointerToRawData

 

 

File 상태와 Memory 상태

간단한 예제 몇 가지를 통해 계산을 해보자.

 

Q1. RVA = 5000일 때, File offset? 

5000은 text Section에 해당하며 해당 섹션의 Virtual Address는 1000이므로

RAW = 5000(RVA) - 1000(VirtualAddress) + 400(PointerToRawData) = 4400

 

Q2. RVA = 13314일 때, File offset?

13314는 rsrc Section에 해당하며 해당 섹션의 Virtual Address는 9000이므로

RAW = 13314(RVA) - B000(VA) + 8400(PointerToRawData) = 10714

 

Q3. RVA = ABA8일 때, File offset?

data Section이지만 비례식을 통해 계산하면 RAW가 rsrc 섹션에 해당하는 값으로 결과가 나온다. 이 경우에 RAW 값은 정의될 수 없다.

 

반응형