Sh4n3e
Reversing[4] - PE(2) 본문
오늘은 PE(Portable Excutable) 파일 구조에 대해 설명하는 2번째 시간입니다.
Import Table에 대해서 설명 드리겠습니다.
Import Table은 PE파일이 실행될 때 외부로부터 가져와서 사용하는 함수들(DLL)의 목록이 들어있는 Table입니다. DLL은 함수를 Export하고 EXE파일이 그 DLL로부터 함수를 Import합니다. Export된 함수를 가져온다는 것은 결국 해당 DLL과 사용하는 함수에 대한 정보를 어딘가에 저장한다는 것을 의미합니다. 사용하고자 하는 Export 함수들과 그 DLL에 대한 정보를 저장하고 있는 곳이 바로 Import Table인 것입니다.
좀 더 쉬운 이해를 위해 그림을 통해 설명하겠습니다.
우선 IMAGE_DIRECTORY_ENTRY_IMPORT 부분을 보셔야하는데요 이 부분은 아래의 그림의 부분입니다.
보시는 것과 같이 Data Directory의 2번째 부분이 IMAGE_DIRECTORY_ENTRY_IMPORT부분 입니다. 여기서 IMAGE_DIRECTORY_ENTRY_IMPORT는 Virtual Address와 Size로 구성되어 있습니다. 실제로 Import Table를 따라가 보겠습니다.
현재 Virtual Address값은 0x3B000이며, Size는 0x28입니다. 실제 가상 메모리 상에서 Import Table 계산을 하기 위해서는 ImageBase + Virtual Address = 0x400000 + 0x3B000 = 0x43B000 이며, 해당 모습은 다음과 같습니다. 현재 이 Table은 0x28만큼의 사이즈(0x43B000~0x43B027)를 가지고 있습니다.
이제는 Raw Data 상의 주소대로 한번 분석해보겠습니다. 바로 아래의 그림은 Import Table Section의 Header부분입니다. 여기서는 2가지만 참고해서 보도록 하겠습니다. RVA라고 나와있는 것은 Virtual Address로서 0x3B000이며, Pointer to Raw Data는 0x39000입니다.
해당 위의 그림을 찾아가는 방법은 바로 위의 방법과 동일하게 하면서 찾아가면되겠습니다.
이상으로 Import Table에 대한 설명을 마치도록 하겠습니다.
개념상 잘 와닿지가 않아서 이해가 쉽지 않을수도 있지만, 차례차례 따라가다보면 쉽게 이해할 수 있을 것입니다.
다음 시간에는 Packing & UnPacking시간을 갖기 앞서 Assembler의 기초에 대한 시간을 가져보도록 하겠습니다.
'System Hacking > Reverse Engineering' 카테고리의 다른 글
Debugger 단축키 (0) | 2017.06.16 |
---|---|
DLL 작성 및 로딩 방법 (0) | 2015.12.24 |
Reversing[3] - PE(1) (0) | 2015.10.07 |
Reversing[2] (0) | 2015.10.06 |
Reversing[1] (0) | 2015.10.06 |