y0u_bat
[RAV <-> RAW] 계산 본문
VirtualAddress : 프로세스 가상메모리의 절대주소를 의미합니다. 프로세스가 로딩되어있을때 가상메모리의 절대주소를 의미합니다.
RAV ( relative virtual address ) : Imagebase + RAV = VA(virtualaddress) 가상메모리에서의 상대주소입니다. ImageBase에서 얼만큼 떨어져 있는지 그런겁니다.
RAW( File offset ) : 파일 오프셋입니다.
* 이제부터 여기서 나오는 VirtualAddress는 IMAGE SECTION HEADER에 있는 VirtualAddress 입니다.* //헷갈려하지마세요.
RAV가 0xC8C8 일때 RAW(File Offset)은?
RAV가 0xC8C8일때 해당값이 속해있는 섹션은 .rsrc ( 0x100B000~0x1014000 ) 입니다.
여기서 ImageBase은 0x1000000 입니다.
속해있는 섹션을 찾았으면 위에 있는 식을 이용해서 RAW을 구하면 됩니다.
RAW = RAV(C8C8) - VirtualAddress(B000) + PointerToRawData(8400) = 9CC8
RAV가 ABA8일때 RAW(File Offset)은?
RAV값이 속해있는 섹션은 .data 섹션입니다.
위에 식을 이용해서 RAW을 구하면 됩니다
RAW = RAV(ABA8) - VirtualAddress(9000) + PointerToRawData(7C00) = 97A8 ( x )
97A8이 RAW가 될수없는 이유는 RAV는 .data 섹션에 해당되는데 파일옵셋은 97A8 즉 .rsrc 섹션에 해당되서 입니다.
RAV 와 RAW 섹션이 다르면 말이 안됩니다. 이경우에는 "해당 RAV에 대한 RAW 값은 정의 할수없다" 라고 합니다.
이런 이상한 결과가 나온 이유는 두번째 섹션의 VirtualSize 값이 SizeOfRawData 값보다 크기 때문입니다.
참고 도서 - 리버싱핵심원리
'Rerversing' 카테고리의 다른 글
[Rerversing.kr] Easy_Keygen (0) | 2016.04.04 |
---|