+ 이 글은 작성자가 직접 공부하고 복습하며 작성한 글입니다. 만약 직접 작성하지 않았다면, 꼭 출처를 밝히겠습니다!

 + 이 글은 개인적인 공부를 바탕으로 작성되었기에, 틀린 부분이 있을 수 있으며, 틀린 부분이 있다면 알려주시면 감사하겠습니다!

 + 이 글을 다른 곳으로 가져가신다면, 꼭 출처를 남겨주세요~

 + '참고사이트'는 공부하기 위해 참고한 사이트들을 모아 둔 것입니다.

 + 혹시라도 문제가 된다면 바로 조취를 취할테니, 말해주시면 감사하겠습니다!


우리가 StackOver Flow나 다른 개발 서적에서 흔히 볼 수 있는 Hooking이란 뭘까?


<Hooking>


[What?]

 + Hooking은 OS나 SW등에서 발생하는 함수호출이나 메시지 전달, 이벤트 등을 중간에 가로채서 내용을 바꾸거나 데이터를 얻거나 다른 후처리를 하는 것.


 + 이런 작업을 하는 코드를 Hook이라고 한다.


 + 진행 과정 중, "갈고리로 중간을 낚는다"고 생각하면 된다!


 + 크래킹(불법적인 해킹)에서는 대상 컴퓨터의 메모리 정보, 키보드 입력 등으로 중요한 정보를 빼낼 때 사용한다.


 + 특정 API를 후킹하면, 해당 API의 리턴값을 조작하는 등의 행동이 가능!


후킹에 여러 방법이 있는데 여기를 참고할 것!

https://ko.wikipedia.org/wiki/%ED%9B%84%ED%82%B9



[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타입 중 하나다.

 - 프로그램의 성능을 분석할 때 많이 사용한다.





Copyright © -강정이좋아- 무단 전재 및 재배포는 하지 말아주세요.

+ Recent posts