LeeJHstory 2019. 6. 7. 16:26

1. IMAGE_DATA_DIRECTIORY

IMAGE_DATA_DIRECTIORY는 IMAGE_OPTIONAL_HEADER의 마지막에 나오는 항목

- RVA와 사이즈 2가지 정보를 저장하는 구조

- 지정된 개수는 없고 NumberOfDataDirectories에 지정된 개수만큼 존재

 

2. NumberOfDataDirectories와 LIMAGE_DATA_DIRECTORY의 관계

- NumberOfDataDirectories가 16진수 10으로 되어 있음

- IMAGE_DATA_DIRECORY 구조 16개 포함

- 각각의 DATA_DIRECTORY는 다른 항목의 데이터 저장

 

3. IMAGE_DATA_DIRECTORY의 상위 2개

---------------------------------------------------------------------------------------

1. IDT(Import Directory Table)

- IDT의 구조에는 임포트할 DLL의 이름(Name RVA)과 해당 DLL에서 사용할 함수의 목록(Import Name Table RVA)이 나타나 있음

- 목록을 사용해 운영체제의 로더는 해당 프로그램을 가상 메모리에 로드 할 때 필요한 DLL의 리스트를 찾아서 연결

- 메모리에 로드되지 않은 경우에는 해당 DLL을 메모리에 로드

 

2. DLL이 가상 메모리에 로드된 상태

이러한 방식을 사용해서 악성코드를 DLL형태로 제작

 => 윈도우 실행파일에 악성코드와 과련된 IDT를 삽입

* 사용자는 정상 프로그램을 실행했지만 DLL형태의 악성코드도 실행파일과 함께 자동으로 실행된다.

 - 이러한 악성코드는 단순히 파일만 삭제하면 실행파일이 정상동작을 하지 않기 때문에 주의해야 한다.

 

IMAGE_SECTION_HEADER

실습예제

- notepad에서 Import 되는 DLL리스트 들을 전부 확인가능.

- IDT(IMPORT Directory Table)마지막이 0으로 채워진 이유는 IAT(Import Address Tabla)구조의 끝을 의미하기 위함.

- DLL항목마다 사용되는 함수의 이름이 나타난다.

- Import 된 DLL에서 사용하는 함수의 리스트 전체가 나열되어 있다.

이준에서 ordinal number만 호출될 수 있는 함수는 아래와 같이 ordinal이라고만 표시되어 있다.

 

실행가능한 섹션 확인하기

요약