zj3t

email: euntaejang@gmail.com

Latest Posts

EAT(Export Address Table) 입력 과정

By 오후 8:01 ,

EAT: 라이브러리 파일에서 제공하는 함수를 다른 프로그램에서 가져다 쓸 수 있도록 해주는 핵심적은 메커니증!!

즉 EAT를 통해서만 해당 라이브러리에서 익스포트하는 함수의 시작 주소를 정확히 구할 수 있다. (따라서 EXPORT TABLE은 dll과 같이 함수를 제공해 주는 라이브러리에만 존재)

typedef struct _IMAGE_EXPORT_DIRECTORY{
DWORD Characteristics;
DWORD TimeDateStamp;
WORD  MajorVersion;
DWORD MinorVersion;
DWORD Name; //예)kernel32.dll등 라이브러리의 시작 주소
DWORD Base;
DWORD NumberOfFunctions;        //실제 EXPORT 함수의 개수
DWORD NumberOfNames; //EXPORT 함수 중에서 이름을 가지는 함수 개수
DWORD AddressOfFunctions; //EXPORT 함수 주소 배열
DWORD AddressOfNames; //함수 이름 주소 배열
DWORD AddressOfNameOrdinals; //Ordinal 주소 배열
}IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY

라이브리에서 함수 주소를 얻는 API: GetProcAddress()
GetProcAddress() 함수는 EAT를 참조해서 원하는 API의 주소를 구해줌

GetProcAddress() 동작 원리

1.AddressOfNames 멤버를 이용해 '함수 이름 배열'로 갑니다.
2.문자열 비교(strcmp)를 통하여 원하는 함수 이름을 찾습니다.(이 때 배열의 인덱스는 n이라 가정)
3.AddressOfNameOrdinals 멤버를 이용하여 'ordinal 배열'로 간다.
4.'ordinal 배열'에서 인덱스 n으로 해당 ordinal값을 찾음
5.AddressOfFunctions 멤버를 이용하여 '함수 주소 배열(EAT)'로 찾아간다.
6.EAT에서 4단계에서 구한 ordinal을 배열 인덱스로 하여 원하는 함수의 시작 주소를 얻는다.


You Might Also Like

0 개의 댓글