안 쓰던 블로그
32bit IAT 로딩 과정 2 본문
EXPORT Table이 비어있는 것을 보니까 notepad.exe는 다른 누군가에게 API를 제공하고 있지 않는다
IMPORT Table을 보면 RVA값과 Size가 있다
이 말은 ImageBase로부터 0x000234B8 만큼 떨어진 곳에 IMPORT Table이 존재한다는 의미이다
ImageBase는 어디에 있는지 확인한다
VA=RVA+ImageAddress니까 0x000234B8 + 0x00400000 되는 곳에 IMPORT Table이 존재할 것이다
근데 디버거로 보면 ImageBase가 다르다
320000이 Image Base, 거기에 text 세션 RVA(1000)을 더한 321000을 잡는다
즉 320000이 실제 Image Base이다
왜 이렇게 차이가 나냐면, 프로그램에 ASLR이 걸려 있을 확률이 높아 제대로 된 ImageBase값이 표시되기 않기 때문이다
ASLR은 Address Space Layout Randomization의 약자로, PE 파일이 메모리에 로딩될 때 로딩 시작 주소 값을 랜덤하게 바꾸는 기술이다
ASLR와 더불어 DLL 파일도 초기에 로딩되는 주소가 매 실행마다 달라진다
아무튼 위에 40000을 더한 방식으로는 제대로 찾아지지 않는다
대신 RVA를 사용한 식으로 찾을 수 있다
0x00320000(Image Base)+0x000234B8(IMPORT Table RVA) = 3434B8(VA)
HxD에서 20CB8를 찾으면 다음과 같다
이 부분이 IMAGE_OPTIONAL_HEADER32.DataDirectory[1] 구조체 값이다
전체 구조체 값은 아까 PEView에서 RVA값 볼 때 아래 있던 Size를 20CB8에 더한 만큼이 전체 구조체이다
지금 블럭 잡은만큼은 첫 번째 원소인 셈
'CTF > Reversing' 카테고리의 다른 글
[리버싱] DLL과 32bit IAT 로딩 과정 (0) | 2020.10.08 |
---|---|
32bit EAT 로딩 과정 (0) | 2020.10.05 |
UPX 패킹된 프로그램 분석 및 툴없이 언패킹하기 (0) | 2020.10.01 |
VA, RVA, RAW 개념 (1) | 2020.09.29 |
Ghidra 기드라 분석 오류 해결 방법 (0) | 2020.09.24 |