Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- wrefresh
- cbpf
- epoll
- BOF
- wnourefresh
- doupdate
- vtable
- ncurses
- NAPT
- edge trigger
- packet flow
- epoll_wait
- 취약점
- REDIS
- LOB
- Compiler
- 어셈블리어
- architecture
- DOCKER-USER
- .nret core 배포
- 풀이
- .net core 7
- level trigger
- ioctl
- rfc5508
- packet filter
- C언어
- Docker
- iptables
- mvwin
Archives
- Today
- Total
Tuuna Computer Science
PE 파일 재배치 본문
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)
'Reversing' 카테고리의 다른 글
내가 만든 첫 번째 리버싱 문제들 (0) | 2018.08.14 |
---|---|
PE파일 포맷 구조 정리 (0) | 2018.06.21 |
[ UPack의 PE 헤더 분석 ] (0) | 2018.06.12 |
plt와 got 개념알기 feat. static or dynamic(Linking) (0) | 2018.05.09 |
[Reversing.kr] Easy_ELF 비밀번호 찾기 (리버싱) (0) | 2018.04.15 |
Comments