API 후킹(API Hooking)

Wooki·2021년 8월 30일
0

API란?

Application programming Interface의 약자이며
응용 프로그램의 기능을 제어할 수 있도록 제공되는 인터페이스로
내가 그 함수가 어떻게 구현되어 있는지 모르더라도 그 함수의 사용법만 알면 그냥 API를 통해서 원하는 결과를 얻을 수 있다는 장점이 있다.

API 후킹에서는 주로 Win32 API 에 대해서 설명한다.

Windows OS는 사용자의 프로그램이 시스템의 자원(메모리, 네트워크, 파일 등)에 접근할 수 없게 되어있다. (보안, 안정성 등을 위해서)

하지만 적절한 애플리케이션을 만들기 위해서는 이러한 시스템의 접근이 필요로 할 때가 있는데 이럴 때 Windows에서 제공하는 win32 API를 이용해서 시스템 커널에게 접근을 요청하는 것이다.

API 후킹

API 후킹이란 Win32 API가 호출 될 때 중간에서 이를 가로채서 그 제어권을 얻어낸다고 생각하면 된다.

예를 들어
API가 호출되기 전후로 자신의 후킹 코드를 실행시킨다거나, API의 파라미터나 리턴값을 보거나 조작할 수 있고, 또는 API 호출 자체를 막거나 실행 흐름 자체를 변경시킬 수도 있다.

Method Object

API 후킹에서 작업 대상을 나타내는 분류다
API 후킹은 작업 대상에 따라서 static방식과 dynamic방식으로 나눌 수 있다.
static방식은 작업 대상이 "파일"이고, dynamic방식은 작업 대상이 "프로세스" 라고 할 수 있다.
일반적으로 API 후킹을 말할 때는 dynamic방식을 말한다.

StaticDynamic
파일메모리
프로그램 실행 전프로그램 실행 후
최초 한 번실행 될 때 마다
특수한 상황일반적인 경우
Unhook 불가능프로그램 실행 중에 Unhook가능

Static 방식의 API 후킹은 잘 쓰이지 않는다고 한다.

Location

API 후킹에서 어느 부분을 공략하는가에 대한 분류로 나뉜다.
일반적으로 IAT, Code, EAT 세 군데를 공략한다.

IAT
Import Address Table에 있는 API 주소를 후킹 함수 주소로 변경하는 방법이다.
장점으로 쉬운 구현과 단순한 구조고, 단점으로는 IAT에 없지만 프로그램에서 사용되는 API에 대해서는 후킹할 수 없다(동적 DLL 후킹의 경우)

Code
프로세스 메모리에 로딩되어 있는 시스템 DLL에서 API의 실제 주소를 찾아서 코드를 직접 수정해버리는 방법이다.
가장 널리 사용되고 있는 방법이다.

  • 시작 코드를 JMP 명령어로 패치하는 방법
  • 함수 일부를 덮어쓰는 방법
  • 필요한 부분만 일부 변경하는 방법

EAT
DLL 의 Export Address Table에 기록되어 있는 API의 시작 주소를 후킹 함수 주소로 변경하는 방법이다.
간단한 개념이지만 Code 후킹의 방법이 더 간단하고 강력하여 잘 사용되지 않는다.

Technique

대상 프로세스에 접근하여 후킹 함수를 설치하는 구제적인 기법들에 대한 내용이다.

Debug

대상 프로세스를 디버깅하면서 API후킹을 하는 방법

Injection

대상 프로세스 메모리에 침투하는 방법으로 두가지로 나뉜다.

  1. DLL 인젝션
    대상 프로세스에 사용자의 DLL파일을 강제로 로딩시켜서 DLL에 후킹 코드와 설치 코드를 만들어 놓고, DllMain()에 설치 코드를 호출하는 방법이다.
  2. Code 인젝션
    DLL 인젝션보다 복잡한 기술이며 주로 악성 코드에서 많이 사용된다.
profile
웹 개발자

1개의 댓글

comment-user-thumbnail
2023년 8월 18일

안녕하세요 캣피쉬님 :)
저는 누구나 게임 플레이를 영상으로 남길 수 있도록 자동 녹화/편집 서비스를 만드는 도르팀 조형래입니다.

다름이 아니라 메모리 및 보안 관련한 커피챗을 요청드릴 수 있을까 싶어 연락드립니다.
저희팀은 해당 분야에 관련하여 기술적 어려움에 처해있습니다.
문제를 해결하기 위해 검색을 하던 와중 캣피쉬님의 블로그를 보게 되어
저희 팀이 처한 문제에 대해 자문을 구하고 싶어 연락드립니다.
괜찮으시다면 잠깐의 시간을 내주실 수 있다면 정말 감사할 것 같습니다.

줌, 대면 모두 괜찮습니다! 편하실 때 편하신 곳으로 찾아뵙겠습니다.

그럼 오늘도 좋은 하루 되시길 바랍니다.
감사합니다.

010-3370-4733
hrjo@dor.gg

답글 달기