자료 저장소

지난번에 이어서 SECTION 으로 넘어가서,

기본적으로 Section에서 볼 수 있는 정보는 PE 파일에 대한 코드, 데이터, 자원, 그리고 실행파일에 대한 기타 정보들을 볼 수 있다. 각각의 section는 헤더와 바디(raw data)로 이루어져 있고 section table은 secion의 헤더만을 포함여야 한다.

 

[Export Section]

 

Export Section은 일단 DLL 과 관련이 있는데, DLL은 실행시에 loading 되고, 호출하는 프로세스의 주소에 매핑된다.

 

DLL은 기본적으로 두가지 종류(exported and internal)의 함수를 정의할 수 있는데,

 1) exported function - 외부 모듈에 의해서 호출이 가능함

 2) internal function - 해당 DLL 에서만 호출이 가능함

 

Export Data Section은 .edata 로 표시되는데 exported 함수들의 이름과 주소 등의 정보를 가지고 있는 Export Directory를 포함한다.  

예를 들어 어떤 함수가 Exported되어진다면 해당 함수를 호출하고자 하는 외부 모듈에서는,

GetProcAddress를 이용하게 되는데 이때 기존에 잘 정의된 Exported 함수들을 찾기 위해서Export Directory를 찾아보게 되는데 이미 Data Directory(Optional Header of PE header)의 첫번째 요소로 이미 학습한바 있다.

 

 

위 그임에서와 같이 'IMAGE_EXPORT_DIRECTORY'은 3가지 중요한 배열을 지시하는데..

가장 중요한 것은 EAT(Exported Function들의 주소를 포함하는)이고,  

그 다음 2(EAT & EOT) 함수 이름 순으로 병렬적으로 수행된다.

 

예를 들어..............

어떤 DLL이 40개의 함수를 export 한다고 하면 AddressOfFunction(the EAT)가 가리키는 배열에는 40개의 멤버가 있고 NumberOfFunction도 40이어야 한다.

어떤 함수릐 주소를 먼저찾고자 할 때, OS는 우선 Export Directory에 있는

'NumberOfFunctions'과 'NumberOfNames'의 값을 찾는다.

그 다음에 AddressOfName(the ENT)와 AddressOfNameOrdinals(the EOT)를 병렬적으로 수행한다. 만약 ENT에서 이름이 발견되면 EOT에서도 관련된 값을 뽑아내고 EAT를 가리키는데 사용되는 인덱스로 사용된다.

 

만약 찾고자하는 함수가 ENT의 39번째 요소일 경우, EOT의 39번째 값을 찾고 해당 값이 5라고 하였을 때, 해당 함수에 대한 RVA값을 찾기위해 5번째 원소를 찾는다.


   ※ 함수의 주소를 찾는 기본적인 순서 ('printXX()' 가 찾고자 하는 함수임)

     1. AddressOfTable(ENT)에서 순서에 따라 해당 함수 검색

     2. ENT검색과 병행하여 AddressOfNamesOrdinal(EOT)를 검색허여 해당 값을 검색

     3. 검색에 의해 나타난 값을 이용하여 RVA 값 확인

 

이상으로 대략적인 Export Section을 마치고 다름에는 ImportSection으로 넘어간다. 휴~

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

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

최근에 게시된 글