Self-Improvement

RVA, VA, RAW (x64dbg, CFF Explorer) 본문

리버싱 기초

RVA, VA, RAW (x64dbg, CFF Explorer)

JoGeun 2020. 5. 7. 13:43
VA

Vitual Address로 메모리의 절대 주소를 의미한다.
즉 x96dbg로 프로그램을 올렸을시에 로딩된 메모리 주소를 뜻한다.
VA = RVA - Imagebase

 

Easy_Keygen.exe 프로그램을 x64dbg에 올린 후 "Input Name:" 문자열이 로딩된 주소는 0x00408060이며 이것이 VA(Vitual Address)이다.


RVA

Relative Virtual Address로 프로세스 가상 메모리의 상대주소를 의미한다.
RVA = VA - Image Base
RVA = RAW + VA - PointToRawData

위의 VA가 0x00408060일 시 RVA 는 0x8060이 된다.


RAW

RAW는 디스크 상의 파일에서의 주소라 하며 우리가 잘 알고 있는 오프셋이라고 부른다.
RAW = PVA - VirtualAddress + PointToRawData


CFF Explorer 연습

x64dbg에 프로그램을 올린 후 "Input Serial" 문자열이 로딩된 주소는 0x00408044로 확인된다.

CFF Explorer에서 Address Converter 에 VA 값에 0x00408044을 입력하면 알아서 RVA, RAW(Offset)값을 알아내서 보여준다.

8044 오프셋 위치에 "Input Serial" 문자열이 존재하게 된다.


이것을 수동으로 계산해보자면 RAW = RVA - VirtualAddress + PointToRawData(RawAddress)

RVA = VA(0x00408044) - Image Base(0x00400000) = 0x8044

RAW = RVA - VirtualAddress + PointToRawData(RawAddress)

위 그림에서 RVA 값 0x8044 는 .data 영역에 속한다.

RVA(0x8044) - VirtualAddress(0x8000) + RawAddress(0x8000) = 0x8044