본문 바로가기
Reversing/리버싱 핵심 원리

[리버싱 핵심 원리] 17장, 실행 파일에서 .reloc 섹션 제거하기

by Y06 2020. 11. 15.

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

 

17.1 .reloc 섹션

EXE 형식의 파일에서 Base Relocation Table 항목은 실행에 큰 영향이 끼치지 않는다. 단, DLL, SYS 형식의 파일은 Base Relocation Table이 거의 필수적이기 때문에 이 내용은 EXE 파일에만 해당되는 내용이다. .reloc 섹션이 제거 되면 당연히 PE 파일의 크기가 줄어드는 효과를 볼 수 있다. .reloc 섹션은 보통 마지막에 위치하는데, 이렇게 마지막에 위치한 섹션을 제거하는 건 생각보다 어렵지 않다.

 

17.2 reloc.exe

실습 파일의 끝에 존재하는 .reloc 섹션을 제거하려면 4단계의 작업과정을 거친다.

(1) .reloc 섹션 헤더 정리

(2) .reloc 섹션 제거

(3) IMAGE_FILE_HEADER 수정

(4) IMAGE_OPTIONAL_HEADER 수정

17.2.1 .reloc 섹션 헤더 정리

 

PE View로 열어보면 SECTION_HEADER는 offset 00000270에서 시작하는 것을 알 수 있다. SECTION_HEADER의 크기는 28이기 때문에 270~297에 해당하는 영역을 HxD에서 0으로 수정하면 된다.

 

 

17.2.2 .reloc 섹션 헤더

 

.reloc SECTION의 시작은 offset 0000C000이다. 이 위치부터 파일의 끝까지 모두 .reloc SECTION 영역이다.

HxD를 이용하여 C000 offset부터 파일 끝까지 삭제한다.

 

물리적으로 .reloc SECTION이 제거되기는 했지만 다른 PE 헤더 정보를 수정하지 않아서 파일이 정상적으로 실행되지는 않는다. 다음으로 PE 헤더 정보를 수정한다.

 

05로 되어있는 값을 04로 바꾸었다.

 

17.2.4 IMAGE_OPTIONAL_HEADER 수정

.reloc SECTION이 제고되면서 섹션 크기만큼 전체 이미지 크기가 줄어들었다. 이미지 크기는 IMAGE_OPTIONAL_HEADER.Size of Image에 명시되어 있으므로 이를 수정한다.

 

현재 Size of Image 값은 00011000이다. 얼만큼을 빼야 하는지 계산해야 한다.

reloc 섹션의 Size of Raw Data의 크기가 00001000이다. 섹션을 제거했기 때문에 1000만큼 사이즈를 빼줘야 한다. 11000-1000 = 00001000이다.