PE 파일 분석 ( PE 바디 - 섹션 )

리버싱 2019. 11. 11. 13:44

1. '. text' 섹션

  - 코드 영역이라고도 하며 , 컴파일러/어셈블리가 최종적으로 생성하는 명령 코드/실행 명령어들이 포함되어 있다

 

2. '. data' 섹션

  - 전역 변수 , 정적 변수의 할당을 위한 영역이며, 읽기/쓰기 가능한 데이터가 포함되어 있다

 

3. '. rsrc' 섹션

  - 프로그램이 사용하는 리소스(아이콘, 이미지, 추가 바이너리) 정보들이 포함되어 있다

 

4. '. reloc' 섹션

  - 실행 파일이 로더에 의해서 ImageBase에 로드될 때 필요한 재배치 정보가 포함되어 있다

  - 만약, 실행 파일이 로드될 때 ImageBase에 다른 실행 파일이 이미 로드되어 있다면, 중첩되는 문제가 발생된다

  - 이런 문제를 해결하기 위해서 로더는 다른 주소를 찾아서 해당 주소로 실행 파일을 로드해야 한다

  - 이때, 로드되는 주소가 변경되면 절대 주소 값을 변경된 주소로 수정되어야 한다

  - 이러한 변경된 주소 정보를 '. reloc' 섹션에 저장하여 다른 실행 프로그램과 중첩되지 않도록 동작한다

 

 

 

PE 재배치

 

 - 실행 파일이 로더에 의해서 ImageBase에 다른 실행 파일이 로드되어 있다면 , 중첩되는 문제가 발생된다

 - 이런 문제를 해결하기 위해서 로더는 다른 주소를 찾아서 해당 주소로 실행 파일을 로드해야 한다

 - 이때, 로드되는 주소가 변경되면 절대 주소 값을 변경된 주소로 수정되어야 한다

 - 이러한 변경된 주소 정보를 '. reloc'섹션에 저장하여 다른 실행 프로그램과 중첩되지 않도록 동작한다

 

PE 재배치 위치 확인

  - PE 재배치 위치를 확인하려면 , 다음과 같은 요소를 파악한다

   - ImageBase

   - Base Relocation Table

   - 프로그램 실행시 ImageBase

 

 - ImageBase 확인

   - IMAGE_OPTIONAL_HEADERS

   - 0x01000000

 

 - .reloc 섹션의 RVA 주소 확인

  - IMAGE_SECTION_HEADER .reloc

  - 0x000 BC000

 

 - Base Relocation Table 주소 확인

  - SECTION. reloc -> IMAGE_BASE_RELOCATION

  - RVA of Block(Virtual Address)

  - Size of Block

  - Type RVA

 

 - 프로그램 실행 시 ImageBase

  - 맨 위 확인

 

 

PE 재배치 구하기

 

 1. 프로그램에서 하드 코딩된 주소(재배치될 주소) 위치를 찾는다.

 2. 하드코딩된 주소(재배치될 주소)에서 ImageBase 값을 뺀다

 3. 실행 파일이 로드될때 ImageBase 대역에 위의 (2) 주소 값을 더한다 

 

 1) 하드 코딩된 주소(재배치될 주소)가 있는 오프셋 구하기

   - ImageBase         0x01000000

   - Virtual Address   0x00001000

   - Size of Block      0x000000B4

   - Type RVA          0x3000 + 0x0641

- 하드 코딩된 주소가 있는 오프셋 = Virtual Address + Offset

- 하드 코딩된 주소가 있는 오프셋 = 0x00001000 + 0x0641 = 0x0001641

 

- '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'로 이동하여 재배치값 확인

 

'리버싱' 카테고리의 다른 글

화면 잠금 프로그램 'Lock Workstation' 제작  (0) 2019.11.13
PE 파일 분석 IAT & Pre Binding  (0) 2019.11.11
PE 파일 분석 ( RVA to RAW )  (0) 2019.11.11
PE 파일 분석  (0) 2019.11.07
리버싱 선수 지식  (0) 2019.11.07

설정

트랙백

댓글