함수 후킹을 달성하기 위한 다른 방법은 래퍼 라이브러리를 통해 함수 호출을 가로채는 것입니다. 래퍼를 만들 때 대체할 원래 라이브러리의 모든 동일한 기능을 사용 하 고 응용 프로그램이 로드 하는 라이브러리의 고유한 버전을 만듭니다. 즉, 액세스할 수 있는 모든 함수는 기본적으로 원본 함수와 대체 함수 간에 동일합니다. 이 래퍼 라이브러리는 원래 라이브러리의 모든 기능을 호출하거나 완전히 새로운 논리 집합으로 대체하도록 디자인할 수 있습니다. 참고 : 모든 코드 예제는 여기에서 액세스 할 수있는 비주얼 스튜디오 프로젝트 에서 내 Github 프로필에서 찾을 수 있습니다 : https://github.com/proteansec . 후킹은 악성 코드에서도 사용할 수 있습니다. 예를 들어, 루트킷은 API 호출의 출력을 위조하여 자신을 보이지 않게 만들려고 하는 소프트웨어 조각으로, 종종 후킹 기술을 사용합니다. Microsoft® Windows™ 운영 체제에서 후크는 함수가 응용 프로그램에 도달하기 전에 이벤트(메시지, 마우스 동작, 키 입력)를 가로챌 수 있는 메커니즘입니다. 함수는 이벤트에 대해 작동할 수 있으며 경우에 따라 이벤트를 수정하거나 삭제할 수 있습니다. 이벤트를 수신하는 함수를 필터 함수라고 하며 가로채는 이벤트 유형에 따라 분류됩니다. 예를 들어 필터 함수는 모든 키보드 또는 마우스 이벤트를 수신하려고 할 수 있습니다. Windows에서 필터 함수를 호출하려면 필터 기능을 설치해야 합니다(예: 키보드 후크)에 Windows 후크에 연결됩니다.

하나 이상의 필터 함수를 후크에 연결하는 것을 후크 설정이라고 합니다. 후크에 두 개 이상의 필터 기능이 연결된 경우 Windows는 필터 함수 체인을 유지 관리합니다. 가장 최근에 설치된 기능은 체인의 시작 부분에 있으며 가장 최근에 설치된 기능은 끝에 있습니다. 후크에 하나 이상의 필터 함수가 연결되어 있고 후크를 트리거하는 이벤트가 발생하면 Windows는 필터 함수 체인의 첫 번째 필터 함수를 호출합니다. 이 작업을 후크 호출이라고 합니다. 예를 들어, 필터 함수가 CBT(컴퓨터 기반 교육) 후크에 연결되어 있고 후크를 트리거하는 이벤트가 발생하는 경우(예: 창이 만들려고 함) Windows는 필터 함수 체인의 첫 번째 함수를 호출하여 CBT 후크를 호출합니다. 앞서 언급했듯이 글로벌 후크를 구축할 때 Mhook 라이브러리를 사용합니다. x32 및 x64 시스템 아키텍처를 지원하는 Windows API 후킹을 위한 무료 및 사용하기 쉬운 오픈 소스 라이브러리입니다. 인터페이스는 복잡하지 않으며 설명이 가능합니다: 키보드 메시지의 식별자입니다.

이 매개 변수는 WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN 또는 WM_SYSKEYUP 중 하나일 수 있습니다. WH_KEYBOARD_LL 후크를 사용하면 스레드 입력 큐에 게시될 키보드 입력 이벤트를 모니터링할 수 있습니다. 이 예제에서는 C++를 사용하여 DLL 주입 기술을 설명하기 위해 사용자 모드 DLL을 작성합니다. 이렇게 하려면 프로젝트에 추가될 Mhook 소스의 최신 버전이 필요합니다. Mhook 파일에 대해 미리 컴파일된 헤더는 사용하지 않도록 설정해야 합니다. 운영 체제 및 소프트웨어는 런타임에 이벤트 후크를 쉽게 삽입할 수 있는 수단을 제공할 수 있습니다. 후크를 삽입하는 프로세스에 충분한 권한이 부여된 경우 사용할 수 있습니다. 예를 들어 Microsoft Windows를 사용하면 대화 상자, 스크롤 막대 및 메뉴뿐만 아니라 다른 항목에 대한 시스템 이벤트 및 응용 프로그램 이벤트를 처리하거나 수정하는 데 사용할 수 있는 후크를 삽입할 수 있습니다. 또한 후크가 키보드 및 마우스 이벤트를 삽입, 제거, 처리 또는 수정할 수 있도록 합니다.

Linux는 NetFilter를 통해 커널 내에서 네트워크 이벤트를 처리하기 위해 유사한 방식으로 후크를 사용할 수 있는 또 다른 예제를 제공합니다. SetWindowsHookEx 함수와 함께 사용되는 응용 프로그램 정의 또는 라이브러리 정의 콜백 함수입니다. 새 키보드 입력 이벤트가 스레드 입력 큐에 게시될 때마다 시스템에서 이 함수를 호출합니다.

2010 © Copyright Fundacja Projekt Kultura