2020. 1. 11. 02:37ㆍ정보보안
@ PE 파일 분석(PE 재배치)
1. PE 재배치
- 실행 파일이 로드될때 ImageBase에 다른 실행 파일이 로드되어 있다면, 중첩되는 문제가 발생된다.
- 이런 문제를 해결하기 위해서 로더는 다른 주소를 찾아서 해당 주소로 실행 파일을 로드해야 한다.
- 이때, 로드되는 주소가 변경되면 절대 주소 값을 변경된 주소로 수정되어야 한다.
- 이러한 변경된 주소 정보를 '.reloc' 섹션에 저장하여 다른 실행 프로그램과 중첩되지 않도록 동작한다.
2. PE 재배치 위치 확인
- PE 재배치 위치를 확인하려면, 다음과 같은 요소를 파악한다.
ImageBase
.reloc 섹션의 RVA 주소 확인
Base Relocation Table
프로그램 실행시 ImageBase 대역
1) ImageBase 확인
- IMAGE_OPTIONAL_HEADERS
- 0x01000000
2) .reloc 섹션의 RVA 주소 확인
- IMAGE_SECTION_HEADER .reloc
- 0x000BC000
3) Base Relocation Table 확인
- SECTION .reloc -> IMAGE_BASE_RELOCATION
RVA of Block(Virtual Address) 0x00001000
Size of Block 0x000000B4
Type RVA 0x3000 + 0x0641(Offset)
4) 프로그램 실행시 ImageBase
- 'calc.exe'를 올리디버거 오픈 -> 맨 위로 올려서 확인
- 0x00FB1000
3. PE 재배치 구하기
① 프로그램에서 하드코딩된 주소(재배치될 주소) 위치를 찾는다.
② 하드코딩된 주소(재배치될 주소)에서 ImageBase 값을 뺀다.
③ 실행 파일이 로드될때 ImageBase 대역에 위의 ② 주소 값을 더한다.
1) 하드코딩된 주소(재배치될 주소)가 있는 오프셋 구하기
ImageBase 0x01000000
RVA of Block(Virtual Address) 0x00001000
Size of Block 0x000000B4
Type RVA 0x3000 + 0x0641(Offset)
- 하드코딩된 주소가 있는 오프셋 = Virtual Address + Offset
- 하드코딩된 주소가 있는 오프셋 = 0x00001000 + 0x0641 = 0x0001641
- PEview에서 '0x0001641' 위치로 이동하여 재배치될 4byte 주소 값을 확인한다.
- SECTION .text -> '0x0001641' 위치의 4byte 주소 값 확인 -> 64 40 05 01
2) 하드코딩된 주소(재배치될 주소)에서 ImageBase 값 빼기
재배치될 주소 오프셋 4byte 주소 값 리틀 엔디언
0x0001641 64 40 05 01 01 05 40 64
- 0x01054064 - 0x01000000 = 0x00054064
3) 파일이 로드될때 ImageBase 대역에 '0x00054064' 주소 값을 더하기
- 0x00FB1000 + 0x00054064 = 0x01005064
4) 올리 디버거에서 '0x01005064'로 이동하여 재배치된 정보를 확인한다.
'정보보안' 카테고리의 다른 글
pe 파일 분석(API & DLL) (0) | 2020.01.11 |
---|---|
pe파일 분석(IAT & Pre Binding) (0) | 2020.01.11 |
pe파일 분석(pe 바디-섹션) (0) | 2020.01.11 |
pe 파일 분석(RVA to RAW) (0) | 2020.01.11 |
pe 파일 분석(RVA to VA) (0) | 2020.01.11 |