Application programming Interface의 약자이며
응용 프로그램의 기능을 제어할 수 있도록 제공되는 인터페이스로
내가 그 함수가 어떻게 구현되어 있는지 모르더라도 그 함수의 사용법만 알면 그냥 API를 통해서 원하는 결과를 얻을 수 있다는 장점이 있다.
API 후킹에서는 주로 Win32 API 에 대해서 설명한다.
Windows OS는 사용자의 프로그램이 시스템의 자원(메모리, 네트워크, 파일 등)에 접근할 수 없게 되어있다. (보안, 안정성 등을 위해서)
하지만 적절한 애플리케이션을 만들기 위해서는 이러한 시스템의 접근이 필요로 할 때가 있는데 이럴 때 Windows에서 제공하는 win32 API를 이용해서 시스템 커널에게 접근을 요청하는 것이다.
API 후킹이란 Win32 API가 호출 될 때 중간에서 이를 가로채서 그 제어권을 얻어낸다고 생각하면 된다.
예를 들어
API가 호출되기 전후로 자신의 후킹 코드를 실행시킨다거나, API의 파라미터나 리턴값을 보거나 조작할 수 있고, 또는 API 호출 자체를 막거나 실행 흐름 자체를 변경시킬 수도 있다.
API 후킹에서 작업 대상을 나타내는 분류다
API 후킹은 작업 대상에 따라서 static방식과 dynamic방식으로 나눌 수 있다.
static방식은 작업 대상이 "파일"이고, dynamic방식은 작업 대상이 "프로세스" 라고 할 수 있다.
일반적으로 API 후킹을 말할 때는 dynamic방식을 말한다.
Static | Dynamic |
---|---|
파일 | 메모리 |
프로그램 실행 전 | 프로그램 실행 후 |
최초 한 번 | 실행 될 때 마다 |
특수한 상황 | 일반적인 경우 |
Unhook 불가능 | 프로그램 실행 중에 Unhook가능 |
Static 방식의 API 후킹은 잘 쓰이지 않는다고 한다.
API 후킹에서 어느 부분을 공략하는가에 대한 분류로 나뉜다.
일반적으로 IAT, Code, EAT 세 군데를 공략한다.
IAT
Import Address Table에 있는 API 주소를 후킹 함수 주소로 변경하는 방법이다.
장점으로 쉬운 구현과 단순한 구조고, 단점으로는 IAT에 없지만 프로그램에서 사용되는 API에 대해서는 후킹할 수 없다(동적 DLL 후킹의 경우)
Code
프로세스 메모리에 로딩되어 있는 시스템 DLL에서 API의 실제 주소를 찾아서 코드를 직접 수정해버리는 방법이다.
가장 널리 사용되고 있는 방법이다.
EAT
DLL 의 Export Address Table에 기록되어 있는 API의 시작 주소를 후킹 함수 주소로 변경하는 방법이다.
간단한 개념이지만 Code 후킹의 방법이 더 간단하고 강력하여 잘 사용되지 않는다.
대상 프로세스에 접근하여 후킹 함수를 설치하는 구제적인 기법들에 대한 내용이다.
Debug
대상 프로세스를 디버깅하면서 API후킹을 하는 방법
Injection
대상 프로세스 메모리에 침투하는 방법으로 두가지로 나뉜다.
안녕하세요 캣피쉬님 :)
저는 누구나 게임 플레이를 영상으로 남길 수 있도록 자동 녹화/편집 서비스를 만드는 도르팀 조형래입니다.
다름이 아니라 메모리 및 보안 관련한 커피챗을 요청드릴 수 있을까 싶어 연락드립니다.
저희팀은 해당 분야에 관련하여 기술적 어려움에 처해있습니다.
문제를 해결하기 위해 검색을 하던 와중 캣피쉬님의 블로그를 보게 되어
저희 팀이 처한 문제에 대해 자문을 구하고 싶어 연락드립니다.
괜찮으시다면 잠깐의 시간을 내주실 수 있다면 정말 감사할 것 같습니다.
줌, 대면 모두 괜찮습니다! 편하실 때 편하신 곳으로 찾아뵙겠습니다.
그럼 오늘도 좋은 하루 되시길 바랍니다.
감사합니다.
010-3370-4733
hrjo@dor.gg