-
[리버싱 핵심원리 study] 17장 실행 파일에서 .reloc 섹션 제거하기Reverse Engineering 2020. 12. 29. 23:48
1. .reloc 섹션
EXE 형식의 PE 파일에서 Base Relocation Table은 실행에 큰 영향을 끼치지 않으므로, 제거 후 실행 테스트를 해도 정상적으로 실행이 잘 된다. (DLL, SYS는 필수)
2. reloc.exe
.reloc 섹션을 제거하는 실습으로 다음과 같은 과정을 진행한다.
(1) .reloc 섹션 헤더 정리
(2) .reloc 섹션 제거
(3) IMAGE_FILE_HEADER 수정
(4) IMAGE_OPTIONAL_HEADER 수정
1) .reloc 섹션 헤더 정리
위와 같이 PEView로 예제 파일을 살펴보면 270 offset에서 시작하는 것을 확인할 수 있다. 270 ~ 297 영역을 HxD를 이용하여 0으로 바꾸자. (IMAGE_SECTION_HEADER의 크기는 38(hex)이다.)
2) .reloc 섹션 제거
HxD로 0000C000 부터 끝까지 파일을 삭제한다.
3) IMAGE_FILE_HEADER 수정
IMAGE_FILE_HEADER - Number of Sections 멤버는 아직 .reloc section을 포함한 5개를 가리키므로 4로 변경해주자.
4) IMAGE_OPTIONAL_HEADER 수정
.reloc section을 제거하면서 섹션 크기만큼 전체 이미지 크기가 줄어들으므로, IMAGE_OPTIONAL_HEADER의 size of Image 값을 변경해주어야 한다.
위와 같이 현재 Size of Image는 00011000이다. 얼마만큼 빼줘야 정상적으로 프로그램이 실행될지 생각을 해보면, .reloc 섹션의 VirtualSize는 E40이고, Section Alignment는 1000이므로 이에 맞게 확장하면 1000만큼 빼줘야 함을 알 수 있다. 해당 부분을 HxD로 00011000에서 00010000으로 수정해주면 프로그램은 정상 작동한다.
위와 같이 reloc 파일을 제거하였을 때 4KB 정도 프로그램의 크기가 감소한 것을 확인할 수 있다.
반응형'Reverse Engineering' 카테고리의 다른 글
[리버싱 핵심원리 study] 20장 인라인 패치 실습 (2) 2021.01.01 [리버싱 핵심원리 study] 18장 UPack PE 헤더 상세 분석 (0) 2020.12.30 [리버싱 핵심원리 study] 16장 Base Relocation Table (0) 2020.12.29 [리버싱 핵심원리 study] 15장 UPX 실행 압축된 notepad 디버깅 (0) 2020.12.29 [리버싱 핵심원리 study] 14장 실행 압축 (0) 2020.12.29