-
[Widnwos] Hooking (Application level)Programming 2013. 12. 31. 02:071. Message Hooking
SetWindowsHookEx()를 이용해서 hook을 설치해놓으면, 어떤 프로세스에서 해당 메시지가 발생했을 때 운영체제가 해당 DLL파일을 해당 프로세스에 강제로 injection하고, 등록된 hook procedure를 호출한다.
2. How to hook the API ?how?
어떤 방식으로 API를 hooking할지의 문제이다.
크게 debugging을 만들거나, 혹은 dll injection으로 후킹이 가능하다.
1) debugging방식(soft hooking)
notepad의 writeFILE()후킹 : process에 attach해서, INT3이 호출될때 마다 hooking routine을 수행한다.
2)dll injectionhooking프로그램은 dll injection 을 해서 API 가 호출되면, 내가 삽입한 dll의 함수가 실행되도록 한다.만약 code patch방식으로 dll injection을 한다면, 정상 dll의 첫 코드 부분을 patch하여, 내가 원하는 dll로 jump하도록 만들면 된다. 내가 원하는 작업을 한 후 완료되면, 정상 dll로 복귀하게 된다.3. which API should I hook?process나 kernel은 중요한 API나 call procedure를 table로 모아서 관리한다.
1) IAT Hooking
ex)한글 나오는 계산기
1. IAT의 위치를 찾고, 후킹함수로 IAT를 수정하는 기능을 가진 dll을 인젝션한다.
2. 인젝션이 성공되면, 후킹함수가 호출된다. MySetWindowTextW() 후킹함수는 SetWindowTextW() API를 후킹한다. 즉, 후킹함수는 lpString값을 한글로 바꾼다음, SetWindowTextW() 호출한다.
2)IDT hooking
IDT에서 ISR의 주소를 우리가 원하는 함수의 주소로 바꾼다.
인터럽트 핸들러의 주소인 IDTNETRY구조체는 LowOffset과 HiOffset필드로 나뉘어져 있다.
'Programming' 카테고리의 다른 글
making fuzzer w/ eclipse pydev (0) 2016.04.09 Scope Table (0) 2015.06.26 little endian과 big endian (1) 2014.07.11 VIX programming 을 위한 VS2012설정 (0) 2014.06.23 vim 환경 세팅 (0) 2013.11.09