서론
원격 제어 프로그램을 만들다 보니 후킹이라는 용어가 나오는데 공부하는 김에 해당 내용을 정리해 놓을려고한다.
후킹은 보통 해킹 용어로 많이 사용된다고 하는데, 나는 해킹보단 프로그램 기능 구현 할 때 사용할 것이기에 후킹이 어떤 녀석인지 이해 갈 정도로 가볍게 알아보자.
후킹이란 무엇일까?
위키 백과사전에 등록된 내용은 이렇다.
소프트웨어 공학 용어로 운영체제나 응용 소프트웨어 등의 각종 컴퓨터 프로그램에서 소프트웨어 구성 요소 간에 발생하는 함수 호출, 메세지, 이벤트 등을 중간에서 바꾸거나 가로채는 방법을 말한다.
위의 내용을 토대로 후킹에 윈도우 말이 앞에 붙으면 말그대로 OS에서 제어하는 윈도우의 기능(API)를 중간에 제어권을 가로챈다는 말이다. 이렇게 후킹하여 기존 윈도우에서 제어하는 키보드, 마우스 이벤트 등을 다른 기능으로 구현할 수 있는 것이다.
이해를 위해 프로세스 예제를 적어보면 이렇다.
윈도우 후킹 예
정상 방식 : (크롬 더블 클릭) ---> (크롬 열림)
후킹 사용 : (크롬 더블 클릭) ---> (더블 클릭 이벤트 무시해라) ---> (크롬 안 열림)
위의 예가 그리 좋은지는 모르겠지만 이해에 도움이 어느정돈 될 것이라 생각한다.
Win32 API란?
이렇게 후킹이 뭔지 알아봤고 아래의 내용은 후킹에 사용되는 Win32 API의 내용이다.
우선 API(Application Programming Interface)가 뭔지 알아보면, API는 운영체제가 응용프로그램을 위해 제공하는 함수의 집합으로 응용프로그램과 장비간의 연결을 시켜주는 역할을 하는 녀석이다.
우리가 사용하는 Window OS는 사용자 애플리케이션이 시스템 자원(메모리, 스레드, 파일, 네트워크 등)을 사용하고 싶어도 직접 접근할 수 없도록 막아놓고 관리를 한다고 한다. 그래서 MicroSoft사에서는 Win32 API를 사용자들에게 제공한다. 우리는 윈도우 API 함수 없이는 Window 기능들을 아무것도 제어를 할 수 없기에 우리는 MS에서 제공받은 Win32 API를 사용하여 윈도우의 기능을 후킹을 하는 것이였다.
이번에 안 내용인데 모든 응용프로그램은 실행시키면 많은 DLL들이 로딩되는데, 실행 프로세스에는 항상kernel32.dll이 있다. 이 kernel32.dll의 역할 중 하나는 ntdll이라는 dll을 로딩시켜주는데 이 ntdll는 사용자 모드에서 커널 모드로 요청하는 작업을 수행하는 녀석이라고 한다. 이러한 방식으로 우리가 Window 자원에 접근할 수 있는 것이라고 한다.
'Computer Science > etc' 카테고리의 다른 글
Producer-Consumer Pattern이란? (개념 /예제) (0) | 2022.07.29 |
---|---|
AES & SHA-256 암호화란 ? (개념 / 종류 / 특징) (3) | 2022.02.18 |
JIT와 AOT 컴파일러는 무엇일까? (JIT, AOT 방식 / 특징 / 사용언어) (0) | 2021.12.21 |
PS(Problem Solving) 에러와 디버깅에 관련하여.. (0) | 2021.09.29 |
댓글