PE 파일 재배치
PE 파일 재배치란, PE 파일이 ImageBase 주소에 로딩되어야 하는 이미 다른 파일이 로딩되어 있는 등의 문제로 그 주소에 로딩되지 못하고, 다른 주소에 로딩될 때 수행하는 일련의 작업들을 의미한다.
프로세스가 생성될 때 exe 파일은 가장 먼저 메모리에 로딩되기 때문에 exe 에서는 재배치를 고려할 필요가 없었다. 하지만 Windows Vista 이후부터는 보안 강화를 위해, exe 파일이 실행될 때마다 랜덤한 주소에 로딩하는 ASLR(Address Space Layout Randomiziation) 기능이 추가 되었다.
이렇게 ASLR 기능에 의해 랜덤하게 하드코딩 된 메모리 주소를 현재 로딩된 주소에 맞게 변경해주는 작업을 PE 재배치라고 할 수 있다.
PE 재배치 동작원리
기본 동작 원리는 3단계이다.
1. 프로그램에서 하드코딩 된 주소 위치는 찾는다.
2 값을 읽은 후 ImageBase 만큼 뺀다. (=VA를 RVA로 바꾼다.)
3. 실제 로딩 주소를 더한다. (=RVA를 VA로 바꾼다.)
여기서 하드코딩 된 주소위치를 찾는 것이 중요한데, 이는 PE 파일 내부에 Relocation Table이라고 하는 목록에 위치한다. 이 테이블로 찾아가는 방법은 PE 헤더의 Base Relocation Table 항목을 따라가면 된다.
Base Relocation Table주소는 PE헤더에서 DataDirectory 배열의 여섯번째 항복에 들어있다. Base Relocation Table 주소를 알게 되면, IMAGE_BASE_RELOCATION 구조체를 확인할 수 있다. 여기엔 하드 코딩된 주소들의 옵셋들이 나열되어 있다.
'리버싱(Reversing) > 리버싱 개념' 카테고리의 다른 글
리버싱 핵심원리 18장(UPack PE 헤더 상세 분석) (1) | 2020.11.14 |
---|---|
리버싱 핵심원리 17장 (실행파일에서 .reloc 섹션 제거하기) (0) | 2020.11.14 |
리버싱 핵심원리 15장(UPX 실행 압축된 notepad 디버깅) (0) | 2020.11.07 |
리버싱 핵심원리 (14장) (0) | 2020.11.02 |
리버싱 핵심원리 13.5~13.8(PE File Format) (0) | 2020.11.02 |
댓글