2011. 8. 20. 21:01
Internet Explorer_Hidden 윈도우 보호하기 (IE Web Control Message Hooking)
2011. 8. 20. 21:01 in 프로그래밍/Win32
대상 PID에서 IE Web Control을 사용할 때,
EndTask나 WM_CLOSE 전송 공격으로 해당 PID를 무력화 혹은 강제 종료 시킬 수 있습니다.
다음과 같은 방식이면 공격할 수 있습니다.
만일, 이런 공격을 방어하고자 한다면,
WM_CLOSE를 Skip 하도록 코딩하면 됩니다.
즉, OnClose()에서 기본 함수 호출을 하지 않도록 하는 것입니다.
허나, Internet Explorer_Hidden 같은 경우에는,
OS에서 생성하고 관리하기 때문에,
WM_CLOSE를 Skip 하려면 Internet Explorer_Hidden의 WNDPROC을 subclassing 해야 합니다.
다음과 같이 subclass을 하면 되니 참고하시기 바랍니다.
물론, 여기에서는 WM_CLOSE 방어이지만,
다른 응용도 가능하니, 도움이 되리라 생각됩니다.
전체적인 흐름은,
EndTask나 WM_CLOSE 전송 공격으로 해당 PID를 무력화 혹은 강제 종료 시킬 수 있습니다.
다음과 같은 방식이면 공격할 수 있습니다.
만일, 이런 공격을 방어하고자 한다면,
WM_CLOSE를 Skip 하도록 코딩하면 됩니다.
즉, OnClose()에서 기본 함수 호출을 하지 않도록 하는 것입니다.
허나, Internet Explorer_Hidden 같은 경우에는,
OS에서 생성하고 관리하기 때문에,
WM_CLOSE를 Skip 하려면 Internet Explorer_Hidden의 WNDPROC을 subclassing 해야 합니다.
다음과 같이 subclass을 하면 되니 참고하시기 바랍니다.
물론, 여기에서는 WM_CLOSE 방어이지만,
다른 응용도 가능하니, 도움이 되리라 생각됩니다.
전체적인 흐름은,
- 실행 Process에서 WM_CREATE Hook
- Internet Explorer_Hidden가 생성되는 것을 포착
- 새로운 WNDPROC으로 subclassing
- 해당 함수에서 WM_CLOSE를 무시함
과 같습니다.
수정될 Class는 theApp이 해당됩니다. 즉, CWinApp 입니다. (물론 다른 class에서 사용해도 됩니다.)
아래 부분을 theApp의 header 파일에 추가합니다.
그리고 아래 부분은 theApp의 생성자에 추가합니다.
마지막으로, 아래 부분을 theApp의 C++ 파일에 추가합니다.
그러면, Internet Explorer_Hidden Window의 WNDPROC이 fn_new_wndproc_IE로 redirect됩니다.
현재는 WM_CLOSE를 무시하도록 했는데, 더 다른 응용도 가능하겠죠?
이제 마지막으로, InitInstance에서 윈도우 생성전에 HookIE()를 호출하고,
ExitInstance에서 UnHookIE()를 호출하면 완료됩니다.
'프로그래밍 > Win32' 카테고리의 다른 글
VC9.0 + MFC + StaticLink 시, gdiplus.dll 오류 해결법 (0) | 2011.11.17 |
---|---|
WinInet으로 HTTP POST File Upload와 Data를 함께 보내기 (2) | 2011.10.17 |
DLL의 메모리릭을 쉽게 찾아 보기 (0) | 2011.04.25 |
.exe의 export 함수를 이용한 개발 방법론 (공통함수 처리, 효율적인 Third-party plug-in 구조) (0) | 2011.03.31 |
binary의 resource를 file로 저장하기 (0) | 2011.01.02 |