본문 바로가기
메가IT아카데미 국기과정/리버싱과 악성코드 분석

[1-4] PE 파일 분석(RVA to VA)

by 한님폐하 2022. 9. 13.
  •  VA = Imagebase + RVA
  •  RVA = VA - Imagebase

1. ImageBase

  • PE 파일이 메모리에 로드되는 시작 주소
  • DLL/EXE 파일 -> User 메모리 영역인 '0x00000000 ~ 0x7FFFFFFF'에 로드
  • SYS 파일 -> 커널 메모리 영역인 '0x80000000 ~ 0xFFFFFFFF'에 로드
  • DLL 파일/윈도우 제공 EXE 파일 : 0x01000000
  • 그 외 EXE 파일 : 0x00400000

 

2. VA 주소를 구하기 위한 요소

  • VA 메모리 상에 프로세스 절대 주소
  • Virtual Size 메모리에서 차지하는 섹션의 크기(패딩/Null 포함)
  • RVA 메모리에서 찾고자 하는 어떤 데이터의 주소
  • Size of Raw Data 파일에서 섹션의 크기(패딩/Null 포함)
  • Pointer to Raw Data 파일에서 섹션의 주소



3. 각 섹션에 대한 RVA to VA 구하기

.text 섹션

 ImageBase 0x01000000
 RVA 0x00001000
 Virtual Size 0x00052CA1
 다음 섹션의 VA 0x01054000

VA = 0x01000000 + 0x00001000 = 0x01001000
.text 섹션 범위 : 0x01001000 + 0x00052CA1 = 0x01053CA1 까지
.text 섹션 패딩 : 0x01054000 - 0x01053CA1 = 0x0000035F
───────── 0x01001000

     .text 섹션 

-------------------- 0x01053CA1
패딩 : 0x035F
──────── 0x01053FFF


.data 섹션

ImageBase 0x01000000
RVA 0x00054000
Virtual Size 0x000040C0
다음 섹션의 VA 0x01059000

VA = 0x01000000 + 0x00054000 = 0x01054000
.data 섹션 범위 : 0x01054000 + 0x000040C0 = 0x010580C0 까지
.data 섹션 패딩 : 0x01059000 - 0x010580C0 = 0x00000F40

──────── 0x01054000

     .data 섹션

-------------------- 0x010580C0
패딩 : 0x0F40
──────── 0x01058FFF


.rsrc 섹션

ImageBase 0x01000000
RVA 0x00059000
Virtual Size 0x00062798
다음 섹션의 VA 0x010BC000

VA = 0x01000000 + 0x00059000 = 0x01059000

.rsrc 섹션 범위 : 0x01059000 + 0x00062798 = 0x010BB798 까지
.rsrc 섹션 패딩 : 0x010BC000 - 0x010BB798 = 0x00000868

──────── 0x01059000

     .rsrc 섹션

-------------------- 0x010BB798
패딩 : 0x0868
──────── 0x010BBFFF

 


.reloc 섹션

ImageBase 0x01000000
RVA 0x000BC000
Virtual Size 0x00003B3C

VA = 0x01000000 + 0x000BC000 = 0x010BC000
.rsrc 섹션 범위 : 0x010BC000 + 0x00003B3C = 0x010BFB3C 까지
.rsrc 섹션 패딩 : (0x010BFBFF + 1) - 0x010BFB3C = C4

──────── 0x010BC000

     .reloc 섹션

-------------------- 0x010BFB3C
패딩 : 0xC4
──────── 0x010BFFFF