-
[리버싱 핵심원리 study] 13장 PE File Format (2)Reverse Engineering 2020. 12. 25. 22:13
- RVA to RAW
Section Header를 잘 이해했다면, PE 파일이 메모리에 로딩되었을 때 각 섹션에서 메모리의 주소와 파일 offset을 잘 매핑할 수 있어야 한다. 이러한 매핑 과정을 'RVA to RAW'라고 부른다. 기본적인 방법은 다음과 같다.
1. RVA가 속해 있는 section을 찾는다.
2. 간단한 비례식을 사용해서 파일 offset(RAW)를 계산한다.
비례식은 다음과 같다.
RAW - PointerToRawData = RVA - VirtualAddress
RAW = RVA - VirtualAddress + PointerToRawData
간단한 예제 몇 가지를 통해 계산을 해보자.
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 값은 정의될 수 없다.
반응형'Reverse Engineering' 카테고리의 다른 글
[리버싱 핵심원리 study] 14장 실행 압축 (0) 2020.12.29 [리버싱 핵심원리 study] 13장 PE File Format (3) (0) 2020.12.28 [리버싱 핵심원리 study] 13장 PE File Format (1) (0) 2020.12.25 [리버싱 핵심원리 study] 11장 Lena's Reversing for Newbies (0) 2020.12.23 [리버싱 핵심원리 study] 10장 함수 호출 규약 (0) 2020.12.04