-
PE 구조 (7) RVA to RAW 변환 방법Knowledge/Reversing 2019. 9. 28. 16:08
안녕하세요.
오늘은 계산기는 잠시 갔다 버리고 RVA를 RAW로 변환하는 방법에 대해서 알아보려 합니다.
하지만 예제로 계산기가 튀어 나올듯한 불길한 예감...지난 섹션 헤더 글을 보신 분이라면 RVA가 어떤 녀석인지 대충 아실 것입니다.
RAW는 파일 오프셋 값을 말한다.
다음에 작성할 data directory의 주소 맵핑을 하기 위해서는 RVA to RAW를 알아야한다.
역시 예를 들기 위해서 계산기를 사용해야 할 것 같다.
"""
대망에 DataDirectory부분이다.
4바이트 변수 2개를 갖고 있는 구조체 배열로 하나당 8bytes씩 보면 된다.
첫번째는 가상주소 값이고 두번째는 사이즈를 표시한다.
[0]에는 값이 없으므로 넘어가고 [1]인 Import값을 확인해 보자.
80 2B 01이 주소로 적혀있다. 확인해보자.
12B80은 의 값으로 offset값을 계산해야하는데 이건 섹션별 주소를 알때 계산이 쉽다.
고로 이 부분은 섹션 헤더를 정리한 후에 따로 작성하도록 하겠다.
"""
저번 글에서 가져온 글이다.
사진은 따로 첨부하지 않겠다.
RVA의 값이 12B80일때 우리는 실제 winhex에서 offset의 어디를 확인해야 할까?
바로 그 값이 RAW이다..
RAW - PointerToRawData = RVA - VirtualAdderss
RAW = RVA - VirtualAddress + PointerToRawData
RVA를 알때 우리는 VirtualAddress 값과 PointerToRawData 값을 알 수가 있다.
RVA가 속해있는 해당 섹터의 VirtualAddress 시작 주소값을 보면 된다.
그럼으로 이 글을 참고하면 된다.
https://shineild-security.tistory.com/76?category=1047174
12B80은 400~12BFF영역인 .text section에 속한다.
.text section의 VirtualAddress는 1000이며 PointerToRawData는 400의 값을 갖고 있다.
RAW = 12B80 - 1000 + 400 = 11F80
값을 확인했으니 한번 확인해보자.
과연 값이 맞는걸...까? 사실 [1]번인 IAT 배열에 뭐가있는지 잘 몰라서 모르겠다 하하하핳
이렇게 계산하는 법을 배워봤다.
이제 다시 data directory를 분석하러 가보도록하자.
'Knowledge > Reversing' 카테고리의 다른 글
팀블로그에 어셈블리 주제 관련 글을 포스팅 하였습니다. (0) 2019.11.27 PE 구조 (8) - 계산기의 PE 구조 / IMAGE OPTIONAL HEADER - IMAGE DATA DIRECTORY 분석 (0) 2019.09.29 PE 구조 (6) - 계산기의 PE 구조 / SECTION Header (0) 2019.09.26 PE 구조 (5) - 계산기의 PE 구조 / NT HEADER - IMAGE OPTIONAL HEADER 분석 (0) 2019.09.25 PE 구조 (4) - 계산기의 PE 구조 / NT HEADER - IMAGE FILE HEADER 분석 (0) 2019.09.20