후킹이란?
정보를 가로채고, 실행흐름을 변경하고, 원래와는 다른 기능을 제공하게 하는 기술
< 후킹 전체 프로세스 >
디스어셈블러/디버거를 이용하여 프로그램의 구조와 동작원리를 파악
버그수정 또는 기능 개선에 필요한 훅(Hook) 코드를 개발
실행파일과 프로세스 메모리를 자유롭게 조작하여 훅 코드 설치
Win32 를 후킹 하는 기술 = API 후킹
( User 모드 후킹 중 , 메시지 후킹과 함께 가장 널리 사용되는 기술)
API 란?
windows OS 는 사용자 애플리케이션이 시스템 자원(메모리, 파일, 네트워크 ,비디오, 사운드, 기타) 을 사용하고 싶을때
직접 접근할 수 있는 권한이 없다.
=> OS가 직접관리 함 = 안정성, 보안, 효율 기타 문제로 사용자 직접 접근 권한을 막아놨음
이럴때, 사용자는 시스템 커널에게 요청헤야함
이 요청방법이 MS 에서 제공한 Win32 API를 이용하는 것 (API는 OS제작사 에서 제공한다.)
즉 , API 없이는 어떤 의미있는 프로그램을 만들어 낼수 없다. (시스템 자원에 접근할수 없기때문이다.)
< Windows OS 프로세스 메모리 >
User Code
DLL(시스템 라이브러리)
kernel32.dll
Ntdll.dll
[SYSENTER / INT 2E]
Kernel
: 일반적인 시스템 자원을 사용하는 API는 kernel32.dll & ntdll.dll을 타고 내려가 결국 SYSENTER 명령을 통해 커널모드 진입
API 후킹 ?
Win32 API 호출을 중간에서 가로채서 제어권을 얻어내는 것.
< API 후킹의 이점 >
API 호출 전/후에 사용자의 훅코드 (Hook Code)를 실행시킬수 있다
API에 넘어온 파라미터 혹은 API함수의 리턴값을 엿보거나 조작할수 있다.
API 호출 자체를 취소시키거나 사용자 코드로 실행흐름을 변경시킬수 있다.
댓글