안 쓰던 블로그

VA, RVA, RAW 개념 본문

CTF/Reversing

VA, RVA, RAW 개념

proqk 2020. 9. 29. 16:36
반응형

RVA

RVA: ImageBase로부터의 상대주소 (메모리에 로딩된 상태)

 

특정한 위치로부터 얼마만큼 떨어진 곳에 위치하는지 알려주는 주소

ImageBase는 NT Header중에서 IMAGE_OPTIONAL_HEADER32 구조체 안에 있으며, 메모리에서 PE파일이 어디에 로딩이 되는지 메모리에 로딩되는 시작 주소를 알려준다

PE헤더에서 나오는 거의 모든 주소값은 모두 RVA를 의미한다


VA

VA: 프로세스 가상 메모리의 절대주소 (실제 메모리에 로딩되는 주소)

 

윈도우즈에서 파일을 실행하게 되면 프로세스 어딘가에 존재하는 가상의 메모리 주소공간에 실행한 파일이 올라간다

가상의 메모리이기 때문에 파일이 어디에 로딩 되었는지 시작 주소를 알고 있어야 파일에 접근할 수 있다

실제 주소와 가상 주소를 연결해 주는 게 매핑

매핑되는 위치는 바로 ImageBase

 

VA는 ImageBase를 기준으로 만들어지고, 실제 메모리에서는 바로 이 주소를 보고 이 위치에 있는 명령을 실행한다

 

그리고 위에 개념을 생각하면 이 위치(VA)를 확인하는 방법도 알 수 있다

ImageBase주소+RVA주소=VA주소이다

 

그런데 PE헤더에 굳이 VA주소는 안 적고 RVA만 적는 이유는, 시스템에 따라 주소값이 계속 바뀌거나 VA주소에 이미 다른 프로그램이 로딩되어 있을 때 충돌이 나는 문제가 있기 때문이다

이런 경우를 대비해 PE헤더에서는 RVA로만 표현해서 ImageBase가 변경되어도 얼마나 떨어져 있는지만 알면 접근할 수 있게 되기 때문이다


RAW

RAW: PE파일이 로딩되기 전에 FileOffset

 

파일이 실행되기 전의 주소를 File Offset이라고 하며, RAW라고도 부른다

HxD에서 볼 수 있는 왼쪽에 Offset값이 바로 File Offset이다

실행되기 전의 주소이기 때문에 파일 자체를 분석해야 할 때 주로 이 주소를 기반으로 데이터를 확인한다

 

RVA, VA를 가지고 RAW를 계산할 수 있으며 계산 방법은 다음과 같다

 

1. 섹션에서 메모리의 주소(RVA)가 속해져 있는 섹션을 찾는다

2. 계산식으로 계산한다 RAW = RVA - VA + PointerToRawData

(파일의 임의 위치 = 메모리의 임의 위치 - 메모리의 해당 섹션 시작 위치 + 파일의 해당 섹션 시작 위치)

 

반응형
Comments