미친해커

[Reversing] IAT Hooking Step 0 본문

Reversing/Hooking

[Reversing] IAT Hooking Step 0

미친해커 2022. 1. 19. 12:19
반응형

IAT Hooking

IAT(Import Address Table) Hooking 이란 IAT에 적혀있는 API의 주소를 조작하여 후킹하는 기법을 말한다.

 

IAT에는 응용 프로그램이 호출하는 API의 함수명, 함수 주소 등이 기록되어 있다. 해당 응용 프로그램은 이 테이블을 참조하여 함수를 호출한다. IAT Hooking은 이 원리를 이용한 후킹 기법이다.

IAT Structure

IMAGE_IMPORT_DESCRIPTOR의 OriginalFirstThunk, Name, FirstThunk에는 직접적인 주소가 아니라 RVA가 들어가 있다.

이 외에 IMAGE_THUNK_DATA의 AddressOfData도 RVA이다.

 

RVA란 Relative Virtual Address의 약자이다. RVA를 VA(Virtual Address)로 변환하기 위해서는 ImageBase + RVA = VA 라는 공식이 성립하기 때문에 ImageBase만 알고 있다면 VA를 구할 수 있다.

How to get IMAGE_IMPORT_DESCRIPTOR address?

그렇다면 IMAGE_IMPORT_DESCRIPTOR의 주소는 어떻게 구할수 있을까?

 

IMAGE_IMPORT_DESCRIPTOR의 주소는 NT Header(IMAGE_NT_HEADER)를 통해 구할 수 있다. 주소를 구하는 방법은 다음과 같다.

NT Header의 Optional Header를 보면 DataDirectory가 배열로 존재한다. DataDirectory의 1번째 인덱스의 VirtualAddress가 IMAGE_IMPORT_DESCRIPTOR의 RVA가 된다. 코드로 나타낸다면 다음과 같다.

IMAGE_NT_HEADERS *NT;
IMAGE_IMPORT_DESCRIPTOR *IMPORT = ImageBase + NT->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress;

이 스텝에서 IAT의 모든것을 이해하려고하지 않아도 된다. 다음 스텝부터 C언어로 작성된 코드를 보고 IAT에 대해 다시한번 이해해보는 시간을 갖자

반응형
Comments