+ 이 글은 작성자가 직접 공부하고 복습하며 작성한 글입니다. 만약 직접 작성하지 않았다면, 꼭 출처를 밝히겠습니다!
+ 이 글은 개인적인 공부를 바탕으로 작성되었기에, 틀린 부분이 있을 수 있으며, 틀린 부분이 있다면 알려주시면 감사하겠습니다!
+ 이 글을 다른 곳으로 가져가신다면, 꼭 출처를 남겨주세요~
+ '참고사이트'는 공부하기 위해 참고한 사이트들을 모아 둔 것입니다.
+ 혹시라도 문제가 된다면 바로 조취를 취할테니, 말해주시면 감사하겠습니다!
우리가 StackOver Flow나 다른 개발 서적에서 흔히 볼 수 있는 Hooking이란 뭘까?
<Hooking>
[What?]
+ Hooking은 OS나 SW등에서 발생하는 함수호출이나 메시지 전달, 이벤트 등을 중간에 가로채서 내용을 바꾸거나 데이터를 얻거나 다른 후처리를 하는 것.
+ 이런 작업을 하는 코드를 Hook이라고 한다.
+ 진행 과정 중, "갈고리로 중간을 낚는다"고 생각하면 된다!
+ 크래킹(불법적인 해킹)에서는 대상 컴퓨터의 메모리 정보, 키보드 입력 등으로 중요한 정보를 빼낼 때 사용한다.
+ 특정 API를 후킹하면, 해당 API의 리턴값을 조작하는 등의 행동이 가능!
후킹에 여러 방법이 있는데 여기를 참고할 것!
[Example - Windows]
+ Windows를 예시로 들면, 우리가 Windows에서 SW를 실행할 때, 수 많은 데이터를 SW와 OS가 주고 받는다.
그것은 함수의 호출일 수 있고, 키보드나 마우스의 이벤트일 수 있고, 메모리를 읽고 쓰는 것일 수 있다.
그런 작업의 중간에 실행될 수 있는게 Hooking이다.
+ Hook은 메시지를 가로챌 범위에 따라 지역 훅(Thread Specifin)과 시스템 전역 훅(System Wide)로 나눈다.
특정 쓰레드에서 발생하는 메시지만 받거나, 모든 메시지를 받거나 할 수 있는 것!
+ Hook을 사용하기 위해서는 기본적으로 해당 SW에 설치해야한다.
SW에 따라 여러 훅을 설치할 수 있는데, 이런 Hook들은 OS에서 Hook Chain으로 관리된다.
등록된 여러 Hook들이 서로 엮여있고, 메시지가 전달 될 때마다 순서대로 Hook을 지나가면서 메시지를 감시한다.
이런 과정에서 메시지가 변질되거나 없어질 수 있으니 조심할 것!
*** 참고해야할 점
- 여러 Hook을 사용하는 경우, 당연히 느려기게되니, 꼭 필요한 상황이거나 사용 목적을 달성한 후에는 제거하는 것이 좋다!
- 'callback'은 Hook의 타입 중 하나다.
- 프로그램의 성능을 분석할 때 많이 사용한다.
** 참고사이트 **
- http://jinuine.blogspot.com/2014/05/hooking-hooking.html
- https://ko.wikipedia.org/wiki/%ED%9B%84%ED%82%B9
- https://whatis.techtarget.com/definition/hook
- https://stackoverflow.com/questions/467557/what-is-meant-by-the-term-hook-in-programming
Copyright © -강정이좋아- 무단 전재 및 재배포는 하지 말아주세요.