pe 파일 분석(pe 재배치)

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