본문 바로가기
리버싱(Reversing)/리버싱 개념

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

by LIZ0904 2020. 11. 14.
반응형

EXE 형식의 PE 파일에서 Base Relocation Table 항목은 실행에 큰 영향을 끼치지 않고, 실제로 제거 후 실행을 해봐도 정상적으로 실행이 잘 된다. VC++에서 생성된 PE 파일의 Relocation 섹션이름이 바로 '.reloc'인데, 이 섹션이 제거되면 PE 파일 크기가 약간 줄어드는 효과를 볼 수 있다. .reloc 섹션은 보통 마지막에 위치하는데, 이렇게 마지막에 위치한 섹션을 제거하는 건 PEView와 Hex editor만 가지고도 수동으로 충분히 할 수 있다.

 

 

실습파일의 끝에 존재하는 '.reloc'섹션을 정확히 제거하려면 아래의 4단계 작업을 해야한다.

 

1단계- .reloc 섹션 헤더정리

 

PEView를 활용한 .reloc 섹션 헤더 확인

PEView를 이용해 실습 파일의 .reloc 섹션 헤더 영역을 확인해보면, 섹션 헤더가 파일 Offset 270에서 시작한다는 것을 확인할 수 있다. Hex Editor을 이용해 이 부분을 모두 0으로 덮어 씌워준다.

 

 

HexEditor을 이용해 .reloc 섹션 헤더 덮어쓰기

섹션 헤더 크기가 28이기 때문에 Offest 270부터 297까지 0으로 덮어 써주면 된다.

 

 

 

 

2단계- .reloc 섹션 제거

PRView를 이용해 섹션의 시작 옵셋 파악하기

PEView에서 .reloc 섹션의 시작 Offset이 C000임을 알 수 있다. 이곳부터 파일의 끝까지 .reloc 섹션 영역이라고 보면 된다. Hex Editor을 이용해 C000부터 끝까지 삭제해버린다. (아까는 00으로 '덮어쓰기'였지만 이번엔 'Delete')

 

 

Hex Editor을 이용해 섹션 영역 삭제하기

Hex Editor에서 Ctrl+g 를 한 뒤 C000을 치면, C000의 주소로 바로 넘어가게 된다. 그 부분부터 끝까지 그래그 한 뒤, Backspace를 누르거나 Delete를 하면 된다. 이로써 .reloc 섹션은 물리적으로 제거되었지만, 다른 PE 헤더 정보들이 아직 수정되지 않아 파일이 정상적으로 실행되지가 않는다. 다음 단계들에서 이를 수정할 것이다.

 

 

 

 

3단계- IMAGE_FILE_HEADER 수정

섹션을 하나 제거 했으니 IMAGE_FILE_HEADER의 Number of Sections (섹션의 개수) 항목을 수정해줘야 한다. 

PEView를 이용해 Numer of Sections 확인

IMAGE_NT_HEADERS의 IMAGE_FILE_HEADER에 들어가면, Number of Sections를 찾을 수 있다. Data에 5라고 적혀있는데, 이는 섹션의 개수가 5개라는 의미이다. 위에서 .reloc 섹션 하나를 삭제해줬기 때문에 4로 변경해줘야 한다.

 

 

 

Hex Editor을 이용해 Number of Sections 수정

Hex Editor에서 DE 주소를 가보면 05 내용을 확인할 수 있다. 04로 수정해주자!

 

 

 

 

 

4단계- IMAGE_OPTIONAL_HEADER 수정

.reloc 섹션이 제거되면서 섹션 크기만큼의 전체 이미지 크기가 줄어들었을 것이다. 이미지 크기는 IMAGE_OPTIONAL_HEADER 항목의 Size of Image 값에 명시되어 있으므로 이를 수정해 줄 것이다.

 

 

PEView를 이용해 Size of Image 확인

128 주소에 Size of Image가 11000으로 되어 있음을 확인할 수 있다. 

 

 

 

.reloc 섹션의 크기

아까 맨처음에 .reloc 섹션헤더를 살펴보면 Virtual Size가 E40임을 알 수 있다. 여기서 Section Alignment에 맞게 확장하면 1000이 된다. 따라서 Size of Image 값을 1000만큼 빼준다.

 

 

 

Hex Editor을 이용해 Size of Image 수정

00 10 01 00 00 을 00 00 01 00 00으로 수정해주면 된다.

이제 모든 작업이 끝나서 EXE 파일이 정상적으로 작동될 것이다!

 

 

 

이 외에도 마지막 섹션의 크기 변경, 섹션 추가 등의 작업을 PEView와 Hex Editor만 가지고 변경할 수 있다.

 

끝~~

 

 

반응형

댓글