Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Study

리버싱 핵심원리_17_실행 파일에서 .reloc 섹션 제거하기 본문

Reversing/리버싱 핵심원리

리버싱 핵심원리_17_실행 파일에서 .reloc 섹션 제거하기

마늘부추 2019. 2. 10. 21:44

17. 실행 파일에서 .reloc 섹션 제거하기

 

17.1 .reloc 섹션

 

- exe 형식의 PE 파일에서 Base Relocation Table 항목은 실행에 큰 영향을 미치지 않는다.
- PEView와 HxD만 가지고도 수동으로 충분히 제거가 가능하다.

 

 

 

17.2 .reloc 제거

 

▶ .reloc 섹션을 제거하는 순서
① .reloc 섹션 헤더 정리
② .reloc 섹션 제거
③ IMAGE_FILE_HEADER 수정
④ IMAGE_OPTIONAL_HEADER 수정

 

17.2.1 .reloc 섹션 헤더 정리

 

 

섹션 헤더의 범위는 270~297이다. 이 부분을 HxD를 이용하여 0으로 덮어쓴다.

 

 

 

17.2.2 .reloc 섹션 제거

 

.reloc 헤더를 보면 file에서 .reloc 섹션의 범위는 C000~D000까지이다.
(맨 마지막 섹션이니 그냥 파일 끝까지라고 생각하면 편하다)

 

이 부분은 마지막이기 때문에 0으로 덮어씌울 필요 없이 바로 삭제해 버리면 편하다.
(HxD의 'Delete' 기능)

 

 

 

17.2.3 IMAGE_FILE_HEADER 수정

 

섹션이 하나 사라졌으니 총 섹션의 개수를 명시한 IMAGE_FILE_HEADER의 Number of Section의 값을 수정해주어야 한다.

 

 

이 부분의 0005를 0004로 수정한다.

 

 

 

17.2.4 IMAGE_OPTIONAL_HEADER 수정

 

 

notepad.exe의 총 이미지 크기는 11000이다. 여기서 .reloc 섹션이 빠졌으니 그만큼을 제외해야 하는데 여기서 얼마만큼을 제외해야 하느냐가 중요하다.

 

 

.reloc 섹션의 이미지 크기이다. Virtual Size는 E40이지만 메모리에 올라갔을 때 섹션의 범위는 NULL 패딩까지 포함하여 Section Alignment 값의 배수가 되어야 한다.
Sectio Alignment는 1000이므로 1C0만큼의 NULL 영역을 포함하여 총 1000이 섹션의 이미지 크기이다.

 

이 값을 Size of Image(11000)에서 빼주어 수정하면 된다.

 

 

수정된 모습.