루트킷에 보면 하이브리드 후킹에 대한 설명이 나와있습니다.
간단히 말해서 DLL Injection 없이 커널모드 에서 유저모드의 IAT(Import Address Table)을 바로 후킹하는 것입니다.

이 후킹 방식의 주요 포인트는 PsSetLoadImageNotifyRoutine() 함수를 이용하여 바이너리 이미지가 메모리로 로드되는 시점을 알 수 있다는 것과 KUSER_SHARED_DATA 영역이라 불리는 커널모드와 유저모드에서 동일한 물리 메모리 주소를 가리키는 영역을 이용한다는 것입니다.

NOTE :  PsSetLoadImageNotifyRoutine 으로 등록한 콜백함수가 호출되는 시점이 이미지들이 로딩되는 프로세스와 같은 Process Context 인 점이 중요 합니다.

NOTE : 커널모드에서의 KUSER_SHARED_DATA : 0xFFDF0000 + 4K
           유저모드에서의 KUSER_SHARED_DATA : 0x7FFE0000 + 4K

하지만 책에 있는 샘플을 그대로 동작시켰을때 정상적으로 후킹되지 않음을 알 수 있습니다.
이는 PsSetLoadImageNotifyRoutine 콜백 함수로 특정 DLL 이 로드 되었다고 알려진 시점에 바로 후킹에 들어갔기 때문입니다. 즉, DLL 이 로드 되었다고 해도 해당 DLL의 익스포트 함수를 어플리케이션의 IAT(PE Format 에서 OriginalFirstThunk 가 아닌 FirstThunk)에 적용하기 전 시점일수(거의 대부분) 있기 때문입니다.

요지는 루트킷 책의 샘플을 이용하여 하이브리드 후킹을 했을때 후킹이 안된 경우는 위 문제 때문일 것이라는... ^^; (이미 아시는 내용이시라면 Pass ~~ )

디버깅한 내용들을 스크린 샷으로 찍어서 설명 드렸으면 더 좋았을 텐데.. 귀차니즘으로 ^^;
아래는 하이브리드 후킹에 대해서 그림으로 간단히 요약해 본 것입니다.
(그림에 대한 설명은 루트킷 책을 참고하세요)
그림을 클릭하시면 크게 보실 수 있습니다

KUSER_SHARED_DATA

그림을 클릭하시면 크게 보실 수 있습니다

하이브리드 후킹



역시 말로 설명하는 것보다 글이나 그림은 어렵군요. ^^;

※ 지나가는 소리 : 루트킷 책 원서와 번역본 모두 PsSetImageLoadNotifyRoutine 함수라고 나와있네요. 오타이며, 정확한 함수명은 PsSetLoadImageNotifyRoutine 입니다. ^^;

Trackback :: http://kinux.comgosu.net/trackback/308
형석아빠
간만에 올라온 포스팅 하고는...

넘 정서적으로 매마른거 같지 않니.???

순정만화라도 하나 사줘.????
2008/03/07 22:29
어쩌라고

2008/03/07 22:36

제가 지금 IAT후킹과 PE구조를 공부중인데 하이브리드 후킹위해 어떤 분야를 더 공부해야할지 고민입니다.
혹시 하이브리드 후킹에 대한 문서를 어디서 구할 수 있는지 아시는지요....
하이브리드 후킹 자료 찾기가 쉽지 않네요.
2008/07/11 16:56
글세요.. 저도 하이브리드 후킹은 루트킷에서 본게 전부 인지라..
시스템 관련 전체(책이든 디버깅이든)를 섭렵하는 것 자체가 분야가 아닐지.. T_T

2008/07/14 11:10

단, 이 방법의 한계라고 하면, XP 때부터 적용되기 시작한 DEP 정책을 사용중이라면, 프로세스가 펑하고 crash되어버린다는 것이죠.
2008/10/04 12:58

 이전  123456 ... 193   다음 

fotowall :: ncloud tattertools RSS Feeds today : 73   yesterday : 110
total : 129417