Base Relocation Table

컴컴한해커·2025년 1월 7일

리버스 엔지니어링

목록 보기
7/18

📌 PE 재배치란?

PE 파일이 ImageBase에 로딩되지 못하고 다른 주소에 로딩될 때 수행되는 일련의 과정


📌 동작 원리

  1. 프로그램에서 하드코딩된 주소 위치를 찾는다.
    • 하드코딩된 주소들의 offset을 모아놓은 Base Relocation Table을 확인한다.
    • Base Relocation Table = DataDirectory[5]
    • reloc Section Header에서 VAPointertoRawData를 구해서 RAW를 구하면 2F000-2F000+2AE000=2AE000이고 실제 BASE_RELOCATION 주소를 보면 아래와 같다.
    • 예를 들어 2AE08의 3420의 값을 이용하여 찾아보면,
      offset은 하위 12비트의 값이므로 420이 offset이다.
      따라서 VirtualAddress(1000) + Offset(420) = 1420(RVA)이다.
    • 이 주소에 가서 확인해 보면 아래와 같다.
  2. 값을 읽은 후 ImageBase만큼 뺀다 (VA --> RVA)
    • 010010C4 - 01000000 = 000010C4
  3. 실제 로딩 주소를 더한다.(RVA --> VA)
    • 000010C4 + 00FF0000 = 00AF10C4

📌 .reloc 제거하기

📢 필요 과정

  1. .reloc Section Header 정리

  2. .reloc 섹션 제거
    HxD를 이용하여 0000C000 이후 영역은 모두 삭제

  3. IMAGE_FILE_HEADER의 NumberOfSections 항목 변경

  4. IMAGE_OPTIONAL_HEADER의 SizeOfImage 항목 변경

이 과정을 진행하면 정상적으로 작동하는 것을 알 수 있다.

0개의 댓글