파일에서는 Offset로 위치를 표현하고 메모리에서는 address(VA) 로 위치를 표현하는데
위의사진에서는 파일과 메모리에서의 위치가 차이가난다.
그래서 메모리에서의 값을 확인한후 그위치를 수정하고자할때는 그위치의
Offset값을 구하여만 한다.
RAW = RVA - VirtualAddress(VA) + PointerToRawData
RAW은 파일에서의 주소 이다.
RVA 는 메모리에서의 주소이다
VirtualAddress(VA) 은 메모리에서의 섹션시작위치이다.
PointerToRawData 은 파일에서의 섹션 시작위치이다
위에서 RVA는 VA - ImageBase 로 구할수있는데 여기서 ImageBase 는 위에 사진에서의 메모리 시작 address를 보면
0부터 시작안하고 010000000 로시작하는데 이때 01000000이 ImageBase 이다.
즉 시작 점에서의 RVA는 0인 것이다.
이제 문제로 RVA = 300 일때 offset(RAW) 를 구해보자.
RVA 3000 이면 위의 메모리에서 섹션을 봐보면
.test섹션 에 포함되어있다는걸 쉽게할수있다
=01001000 인데 왜 포함되냐 라고생각한다면 여기서 ImageBase를 빼서 생각해야한다.
VirtualAddress(VA) 은 메모리에서의 섹션 시작 위치이니
.test의 섹션시작위치를 보면된다 즉 1000이다.
PointerToRawData 은 파일에서의 섹션 시작위치이니
.test의 섹션시작위치를보면
400이라는걸 알수있다. 파일에서는 offset 은 ImageBase를 포함하고있지않으니 그대로 보면된다.
이제 식을 대입해보면
RAW = RVA - VirtualAddress(VA) + PointerToRawData
-----> 3000(RVA) - 1000(VA) + 400(PointerToRawData) = 2400(RAW)
가 된다.
'보안' 카테고리의 다른 글
[웹해킹] DB해킹을 위한 명령어 들 (0) | 2019.05.20 |
---|---|
웹해킹 기초 공격 과 대응 방법 (0) | 2019.05.20 |
웹 프로토콜 분석 과 웹 기본 용어들 (0) | 2019.05.20 |
IDA 사용법 (0) | 2019.05.20 |
리버싱 repne ,scas을 사용한 문자열 컨트롤 (1) | 2019.05.20 |