자료 저장소

import section (보통 .idata)는 어떤 실행 파일에 의해 특정 DLL로 부터 import 되어지는 모든 함수들에 대한 정보를 포함하고, Import Section 에서 가장 중요한 것은 Import Directory 와 Import Address Table (요건 다음에 다룰 예정) 이다.

 

Import Section 을 이해하기에 앞서 몇가지 기본 요소들을 알아야 할 필요가 있는데,

 

우선 windows Loader 부터..

1) Windows Loader는 모든 어플리케이션에서 ①사용하는 DLL들을 로딩해주고, ②각각의 DLL들을 프로세스의 주소 공간에 매핑시켜 주며, ③DLL 內 함수들에 대한 주소를 찾을 수 있도록 해준다.

 

이때 각 함수들에 대한 주소를 항상 알고 찾는 것이 아니라 Loader는 해당 주소를 가리키고 있는 주소 테이블의 위치를 알고서 찾게 되는데이때 사용되는 것이 IAT이다.  

2) IAT(Import Address Table) 는 DLL이 로드되어 질 때 관련되는 함수들의 주소를 가리키는 포인터라 보면 된다.

따라서 이러한 포인터 테이블에서 함수의 위치를 참조만 하면 되므로 Windows Loader는 Import되어지는 함수들의 주소들을 일일히 바꿀 필요가 없다. Import table에 대한 주소만 알고 있으면 된다.

 

이제 다시 본론으로 들어가서 그냥 요약하자면Import Directory 는 구조체들을 체인 마냥 이어놓은 구조라고 볼 수 있는데....

[Import Directory]

Import Directory 는 IMAGE_IMPORT_DESCRIPTOR 의 구조체 배열이며, 각각의 구조체는 20바이트의 크기를 가지고, PE 파일의 import function 들에 대한 정보들을 가지고 있다.

예를 들어, 특정 PE파일이 10개의 서로다른 DLL로부터 함수들을 import 한다면 10개의 IMAGE_IMPORT_DESCRIPTOR 구조가 배열안에 있다.

그리고 Import Directory 의 위치는 이미 Data Directory (이미 공부한 PE  Header 의 시작에서 80 바이트 위치에 있음 - 00 02 D0 00 h 였나? 아무튼... -_-)

 

어랏? DWORD가 6개면 20바이트가 넘어버린거 아닌가? UNION !!!!

결국 UNION이후에 4바이트만 남으면 결국 20바이트구먼.. ㅋ

 

각각의 구조체를 구성하는 엔트리들에 대한 설명은 뒤로하고, 첫번째와 마지막 필드가 가장 중요한데 갸들이 IMAGE_THUNK_DATA 구조에 대한 RVA를 포함하고 있다. 만약 해당 함수가 a bound import  라면 RVA 대신 실제 주소를 포함하고 있고 다음과 같은 그림 형태가 된다.

 

여기서 부터 고난의 CHAIN 행군이 시작된다!!!!

 

 

RVA 대신 AddressOfData 의 형태로 IMAGE_THUNK_DATA 구조의 실제 주소를 포함한다.

그리고 IMAGE_IMPORT_BY_NAME 에 의해 실질적인 IAT에 근접하게 된다.


 

결국 엽기적인 궁극의 종합적인 구조체 배열의 chain 구조는 아래와 같다. -_-;

 

 

그리고 위의 그림에 따라 IAT안에 있는 함수포인터를 통하여 imported 되어진 함수한다고 가정할 때, 예를 들어, FirstThunk 배열 안에 있는 Entry 들 중 하나를 가리키는 주소가 00405030 이라 하면 loader에 의해서 USER32.dll 에 있는 GetMessage의 주소로 덮어씌여지게 된다.  

이에 대한 호출방식은 아래의 2가지 형태가 있는데 보다 효출적인 방법으로써 앞의 것을 권장한다.

 

1) 0040100C     CALL     DWORD PTR [00405030 ]

 

2)  0040100C     CALL      [00402200]

.......


00402200      JMP       DWORD PTR [00405030]

'컴퓨터 기술 > PE 포맷' 카테고리의 다른 글

PE 파일 :: Imports 상세 분석(memory)  (0) 2011.02.25
PE 파일 :: Imports 상세 분석(disk)  (0) 2011.02.25
PE 파일 :: Sections 분석  (0) 2011.02.25
PE 파일 :: 분석 tool  (0) 2011.02.25
PE 파일 :: 헤더 분석(2)  (0) 2011.02.25
댓글 로드 중…

최근에 게시된 글