Study
리버싱 핵심원리_17_실행 파일에서 .reloc 섹션 제거하기 본문
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)에서 빼주어 수정하면 된다.
▲
수정된 모습.
'Reversing > 리버싱 핵심원리' 카테고리의 다른 글
리버싱 핵심원리_20_인라인 패치 실습 (0) | 2019.02.21 |
---|---|
리버싱 핵심원리_18_UPack PE 헤더 상세 분석 (0) | 2019.02.18 |
리버싱 핵심원리_16_Base Relocation Table (0) | 2019.02.10 |
리버싱 핵심원리_15_UPX 실행 압축된 notepad 디버깅 (0) | 2019.02.05 |
리버싱 핵심원리_13_PE File(2) (2) | 2019.01.31 |