악성코드 분석(PE 구조3)
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이라고만 표시되어 있다.
실행가능한 섹션 확인하기
요약