일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- apphelp.dll
- pcap packet capture
- 해킹
- Msvcrt.dll
- windows kernel debugging
- pwnable
- Windows Kernel
- vcruntime140.dll
- 시스템해킹
- 네트워크 바이트 오더
- Windows Kernel Debug
- C언어 패킷캡쳐
- packet capture
- pcap packet
- arudino
- Windows Kernel Driver
- HackCTF
- IAT Hooking
- 개발 환경 준비
- vcruntime.dll
- 윈도우 커널 드라이버
- 바이트 오더
- Windows
- ucrtbase.dll
- Network Byte Order
- 윈도우 커널 디버깅
- 포너블
- 개발하기
- hacking
- 윈도우 커널
- Today
- Total
미친해커
[Reversing] IAT Hooking Step 0 본문
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에 대해 다시한번 이해해보는 시간을 갖자
'Reversing > Hooking' 카테고리의 다른 글
[Reversing] Trampoline(Inline) Hooking x86 Step 1 (0) | 2022.04.27 |
---|---|
[Reversing] Trampoline(Inline) Hooking x86 Step 0 (0) | 2022.04.27 |
[Reversing] IAT Hooking Step 2 (0) | 2022.02.03 |
[Reversing] IAT Hooking Step 1 (0) | 2022.01.22 |
[Reversing] 리버싱의 꽃 후킹이란? (0) | 2022.01.18 |