리버싱 엔지니어링/리버싱 핵심 원리

17 실행 파일에서 .reloc 섹션 제거하기

흰싸라기 2022. 3. 27. 15:27

 reloc 섹션 

  • EXE 형식의 PE 파일에서 Base Relocation Table 항목은 실행에 큰 영향을 끼치지 않음 
    • Relocation 섹션 이름 : '.reloc'
    • .reloc 섹션 제거 시 PE 파일 크기가 약간 줄어드는 효과
  • .reloc 섹션 제거는 PEView와 Hex editor를 이용해 수동으로 제거 가능

 

 reloc.exe 

  • .reloc 제거 작업단계
    1. .reloc 섹션 헤더 정리
    2. .reloc 섹션 제거
    3. IMAGE_FILE_HEADER 수정
    4. IMAGE_OPTIONAL_HEADER 수정

#1단계 : .reloc 섹션 헤더 정리

.reloc 섹션 헤더

  • .reloc 섹션 헤더는 파일 옵셋 270에서 시작됨
  • 이 부분을(270~297) Hex Editor를 이용해 0으로 덮어 씀
    • HxD의 'Fill selection...(선택 영역 채우기)' 기능 이용

.reloc 섹션 헤더 제거

#2단계 : .reloc 섹션 제거

  • 1단계 사진 참고) .reloc 섹션의 시작 옵셋(Pointer to Raw Data)은 C000
  • Hex Editor로 C000 옵셋 부터 파일 끝까지 삭제 
    •  HxD의 'Delete(삭제)' 기능 이용

 

 

 

↓PE 헤더 정보를 수정하여 정상 실행되도록 수정

#3단계 : IMAGE_FILE_HEADER 수정

  • Number of Sections 현재 값 : 5 -> 섹션이 하나 줄었으므로 4로 수정

Number of Sections 값 변경

 

#4단계 : IMAGE_OPTIONAL_HEADER 수정

  • 섹션 크기만큼 전체 이미지 크기가 줄어듦
    • 이미지 크기는 IMAGE_OPTIONAL_HEADER - Size of Image에 명시되어있음 
    • Size of Image 값 11000

  • VirtualSize 값은 E40, Section Alignment에 맞게 확장하면 1000
    • Section Alignment : 메모리에서 섹션의 최소 단위 → Section Aligment 값 단위로 확장해야함. 

Section Alignment

  • 따라서, Size of Image 값을 1000만큼 빼야함 → 10000로 수정