KoreanFoodie's Study
Reversecore chap 17 - 실행 파일에서 .reloc 섹션 제거하기 본문
'리버싱 핵심 원리'의 내용 및 이슈들과 해결책을 다룹니다.
PE 파일에서 .reloc 섹션을 수동으로 제거하는 실습을 해 보자.
.reloc 섹션
EXE 형식의 PE 파일에서 Base Reloaction Table 항목은 실행에 큰 영향을 끼치지 않는다(DLL, SYS 형식의 파일은 거의 필수!).
VC++ 에서 생성된 PE 파일의 Relocation 섹션 이름은 '.reloc'이다. .reloc 섹션이 제거되면 PE 파일의 크기가 약간 줄어드는 효과가 있다. 이때, .reloc 섹션은 보통 마지막에 위치한다.
reloc.exe
'.reloc' 섹션 제거는 아래의 4 단계의 작업을 통해 이루어진다.
-
.reloc 섹션 헤더 정리
-
.reloc 섹션 제거
-
IMAGE_FILE_HEADER 수정
-
IMAGE_OPTIONAL_HEADER 수정
- .reloc 섹션 헤더 정리
PE View를 통해 .reloc 섹션 헤더는 파일 옵셋 270에서 시작된다는 것을 알 수 있다. 이제 Hex Editor을 이용해서 해당 섹션을 0으로 덮어 써 보자.
- .reloc 섹션 제거
앞의 PE View에서의 그림을 보면, pointer to Raw Data 값의 Data가 0000C000인 것을 일 수 있다. 즉, 파일에서 .reloc 섹션의 시작 옵셋이 C000이다(이곳부터 파일 끝까지 .reloc 섹션 영역임). 이제 Hex Editor로 C000 옵셋부터 파일 끝까지 삭제하면 된다.
하지만 다른 PE 헤더 정보들이 아직 수정되지 않아 파일이 정상적으로 실행되지 않는다. 따라서 관련 PE 헤더 정보를 수정해 정상 실행을 시켜보자!
- IMAE_FILE_HEADER 수정
섹션을 하나 제거했으니 IMAGE_FILE_HEADER - Number of Sections 항목을 수정해야 한다.
위의 005 값을 004로 수정하자(Hex Editor 이용).
- IMAGE_OPTIONAL_HEADER 수정
.reloc 섹션이 제거되면서 (프로세스 가상 메모리에서) 섹션 크기만큼 전체 이미지 크기가 줄어들었다. 이미지 크기는 IMAGE_OPTIONAL_HEADER - Size of Image 값에 명시되어 있으므로 이를 수정해야 한다.
위의 그림을 보면 Size of Image가 11000인 것을 확인할 수 있다. .reloc 섹션의 VirtualSize 값은 E40이지만, 이를 Section Alignment에 맞게 확장하면 1000이 된다. 따라서 1000을 Size of Image에서 빼주면 된다.
수정하면 정상 실행됨을 확인할 수 있다!
'Ethical Hacking > Reversing' 카테고리의 다른 글
Reversecore chap 19 - UPack 디버깅, OEP 찾기! (0) | 2019.04.25 |
---|---|
Reversecore chap 18 - UPack PE 헤더 상세 분석 (0) | 2019.04.24 |
Reversecore chap 16 - Base Relocation Table (0) | 2019.04.24 |
Reversecore chap 15 - UPX 실행 압축된 notepad.exe 디버깅 (0) | 2019.04.24 |
Reversecore chap 14 - 실행 압축 (0) | 2019.04.24 |