https://com24everyday.tistory.com/17
IAT 를 알고나면 좀더 쉽게 EAT를 이해할 수 있다.
EAT(Export Address Table) : 라이브러리 파일에서 제공하는 함수 -> 다른 프로그램이 사용 하게 하기 위한 매커니즘
EAT를 통해서만 해당 라이브러리에서 익스포트하는 함수의 시작 주소 정확하게 구할 수 있음.
IMAGE_EXPORT_DIRECTORY : PE파일에 하나만 존재, PE헤더에 위치함(IAT는 여러 라이브러리를 import 할 수 있기 때문에)
- NumberOfFunction : 실제 Export 함수 개수
- NumberOfNames : Export 함수 중에서 이름을 가지는 함수(<=NumberOfFunction)
- AddressOfFunctions : Export 함수 주소 배열 (=NumberOfFunction)
- AddressOfNames : 함수 이름 주소 배열 (=NumberOfNames)
- AddressOfNameOrdinals : Ordinal 주소배열(=NumberOfNames)
GetProcAddress( ): 라이브러리에서 EAT를 참조해서 함수 주소를 얻는 API
GetProcAddress() 동작 원리
1. AddressOfNames 멤버를 이용해 '함수이름배열'
2. '함수 이름 배열'이 문자열 주소에 저장되어있음 -> strcmp 로 찾음 (이 때의 인덱스를 name_index라 칭함)
3. AddressOfnameOrdinals 멤버통해' Ordinal 배열' 찾음
4. name_index로 ordinal 찾음
5. AddressOfFunctions 멤버 통해 함수주소배열(EAT)
6. EAT에서 ordianl로 함수 시작 주소 찾음
* 모든 DLL파일이 index == ordinal 하지느 않음.
'해킹 > 리버싱엔지니어링' 카테고리의 다른 글
함수 호출 규약 (0) | 2020.11.18 |
---|---|
Base Relocation Table (0) | 2020.05.01 |
실행 압축 (0) | 2020.04.28 |
IAT 정리 (0) | 2020.04.25 |
OllyDBG 단축키 (0) | 2020.04.18 |