- 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
'메가IT아카데미 국기과정 > 리버싱과 악성코드 분석' 카테고리의 다른 글
[1-6] PE 파일 분석(PE 바디-섹션) (0) | 2022.09.13 |
---|---|
[1-5] PE 파일 분석(RVA to RAW) (0) | 2022.09.13 |
[1-3] PE 파일 분석(섹션 헤더) (0) | 2022.09.13 |
[1-2] PE 파일 분석(PE 헤더) (0) | 2022.09.13 |
[1-1] 리버싱 선수 지식 (1) | 2022.09.13 |