본문 바로가기

Programming/web

API Hooking

 

웹 카테고리의 첫 게시글이 웹보다는 윈도우 프로그래밍에 가까운 개발 노트가 되었다

기술 블로그를 통해 글을 읽다가 API Hooking이란 말이 나와 궁금증에 공부를 하게 되었다.

우선 API는 뭐고 Hooking은 무엇인가 알아보자

 


 

API

Application Programming Interface, 윈도우 프로그래밍이나 MFC 공부할 때 숱하게 많이 나왔던 용어이다.

정확한 의미를 내것으로 만드는데 시간이 걸리는 용어인것 같다. 두루뭉술한 말이면서 포괄적이기 때문에 명료하게 정의 내리기는 어렵다. 간단하게 말하자면 프로그래머가 개발을 쉽게하기 위한 도구들의 집합이다. 사용자입장에서나 개발자 입장에서나 OS나 응용프로그램을 일일히 코딩하면서 조작하는것은 굉장한 스트레스일 것이다. 이에 인터페이스로써 응용 프로그램을 사용할 때 OS나 프로그래밍 언어가 제공하는 기능을 우리가 제어하기 위한 매개체인것이다. 대부분의 MS 이용자는 Win32 API를 이용하고 있으며 API 함수들을 이용해 개발이 가능하다.

 

API Hooking

그럼 API를 후킹한다는 뜻인것같다. OS나 응용 프로그램 사이 간에 발생하는 교신들을 가로챈다는 의미정도이다.

정확하게는 이미 작성되어 있는 코드의 특정지점을 가로채서 동작 방식에 변호를 주는 기술이다. 그로써 코드의 실행 흐름을 변경하여 특정 요청을 원하는대로 조작하거나 특정 조건에 대한 이벤트 발생시에 원하는 특정 실행을 하는 효과를 줄 수 있다. 리버싱의 꽃이라고도 불린다는데 그런가보다. 리버싱에 대해서는 다음에 시간이 나면 개발노트를 써보도록 하겠다.

 

후킹은 목적과 상황, 후킹 시점, 기법에 따라 다양한 후킹들로 분류된다.

대분류로 나눈다음에 그안에서 세세한 방법들을 살펴보자. 사용자 모드의 후킹과 커널 모드의 후킹으로 나누어진다. 혹은 작업 대상에 따라 static 방식과 dynamic 방식으로도 나누어진다. 하지만 일반적인 API Hooking이 대부분 dynamic 방식이며 매우 특수한 상황에서 static을 쓰므로 우선 dynamic 방식의 사용자 모드에 대해서 적어보자.

API Hooking에 대한 전체적인 설명과 충분한 이해를 위해선 많은 시간이 필요할것 같지만 공부한 내용대로 천천히 하나씩 풀다보면 되지않을까.

 


 

 

사용자 모드 후킹(USER MODE HOOKING)


IAT Hooking이 대표적이다. IAT는 Import Address Table의 약어로 응용 프로그램이 어떤 라이브러리에서 어떤 함수들을 사용하고 있는지에 대한 기술 테이블이다. IAT에 대해 더 알아보고자 하는 사람은 #PE파일 #DLL #RVA 에 대해 공부해보면 좋을 것 같다. PE 파일 자신이 어떤 라이브러리(DLL)를 임포트하고 있는지에 대한 정보를 담고있는 IMAGE_IMPORT_DESCRIPTOR 구조체는 사용하는 라이브러리 개수만큼의 배열로 이루어져있다. (마지막엔 NULL 구조체가 들어있어 총 N+1개의 배열!) ... 계속 가다간 IAT에 대한 내용이 길어지면서 글의 목적이 옅어질것 같아 자세한 공부는 미래의 나에게 넘기기로 하자.

IAT Hooking은 이 IAT에서 후킹하고자 하는 함수 주소를 내가 원하는 후킹 함수로 교체하고 후킹함수에서 파라미터나 리턴 값을 조작하고 원래 함수를 호출하는 방법이다...(다음에 이어서 써야지)

 

 

 

DLL injection

 

 

 

 

 

API Hooking