Reversing
PE 파일 재배치
GuTTe
2018. 6. 12. 16:27
PE 파일이 프로세스 가상 메모리에 로딩될 때 PE 헤더의 ImageBase 주소에 로딩된다.
DLL파일의 경우 ImageBase에 이미 다른 DLL파일이 로딩되어 있다면 다른 비어 있는 주소 공간에 로딩된다.
=> 재배치
PE 재배치 작업의 기본 동작 원리
- 프로그램에서 하드코딩된 주소 위치를 찾는다.
- 값을 읽은 후 ImageBase만큼 뺀다. (VA -> RVA)
- 실제 로딩 주소를 더한다.(RVA -> VA)
Relocation Table : 하드코딩 주소들의 OFFSET(위치)을 모아놓은 목록
PE 헤더의 Base Relocation Table 항목 따라가기
===================================
IMAGE_BASE_RELOCATION 구조체
- VirtualAddress :: 기준 주소 :: 실제론 RVA값 기준 값 : 1000
- SizeOfBlock :: 단위 블록의 크기 :: 150
- TypeOffset :: 이 구조체 밑으로 WORD 타입의 배열이 따라 온다.
:: 그리고 이 배열 항목의 값이 바로 프로그램의 하드코딩된 주소들의 옵셋이다.
(Type 4bit + Offset 12bit)
ex) TypeOffset : 3420 --> Type : 3 || Offset : 420
깨알 상식 : 32bit : 3 , 64bit : A
VirtualSize(1000) + Offset(420) = 1420(RVA)