본문 바로가기
Security/Reversing

relocation과 .reloc섹션

by jino22 2021. 8. 28.

틀린 부분이 있다면 언제든지 댓글 남겨주세요! 


ASLR(Address Space Layout Randomization): 보안 강화를 위해 exe파일이 메모리에 로드될 때 로드 시작 주소 값을 매번 랜덤하게 바꾸는 것(windows vista이후 도입)

 

PE재배치(Relocation): PE파일이 ImageBase에 로딩되지 못하고 다른 주소에 로딩될 때 수행되는 일련의 작업 

이 재배치 과정에서 Base Relocation Table이 사용됨

 

재배치 과정

:하드코딩 된 위치 찾기(Base Relocation Table 이용) > 값에서 ImageBase만큼 빼기(VA→RVA) > 실제 로딩 주소 더하기(RVA→VA)

type offset = type + offset

하드코딩 주소 = Virtual Address(1000)+offset(7D3) =17D3(RVA)

구한 RVA주소로 가보면 PE재배치를 해야하는 하드코딩된 주소가 있을 것

 


Relocation섹션인 '.reloc'은 없어도 파일의 정상적인 실행에 영향을 미치진 않는다.

그래서 한번 제거해보도록 하겠다! 

 

.reloc섹션 제거 과정

.reloc섹션 헤더 정리 > .reloc섹션 제거 > IMAGE_FILE_HEADER수정 > IMAGE_OPTIONAL_HEADER수정

 

섹션 헤더 값 0으로 변경

image_section_header .reloc
변경할 부분
변경 후

Pointer to Raw data(105000) 부터 BE00크기만큼 삭제 (끝까지)

.reloc 섹션

이제 헤더 정보(image_file_header, image_optional_header)만 수정하면 된다.

섹션 하나를 제거했기 때문에 Image_file_header의 Number of Sections항목을 수정해야 한다.

number of sections
변경 후

전체 크기를 줄여주기 위해 Image_Optional_header의 Size of Image값을 수정해준다.

현재 153000값에서 Section Alignment를 고려하여 reloc섹션의 VirtualSize에 해당하는 값을 빼준다.

VirtualSize가 C000이었는데 Section Alignment가 1000이므로 C000을 빼주면 된다.

따라서 147000값을 입력한다.

image optional header
변경 전
변경 후

변경사항 저장 후 파일을 실행시켜보면 정상적으로 작동하는 것을 확인할 수 있다.

 

 

 

참고: 리버싱 핵심원리

728x90
반응형

댓글