본문 바로가기

My Study/Reversing

모달 윈도우 무력화

요새 시험기간이다 어쩌다해서 학교가 시끌시끌 하네요. 휴학을 한 저로선.. 한편으론 여유롭지만.. 한편으론 하루하루 압박감이 옵니다 ^^;; 헛되이 보내지 않을 나의 시간! Time is gold!! -.-;;
이 곳은 저의 개인블로그이며.. 딱딱함을 싫어하는 저라.. 잡담좀 해봤습니다. 공부가 잘 않되서 하루에 조금밖에 공부를 못하네요;; 디바이스 드라이버 공부하는데.. 뭐가 이리 어려운지 -_-;;
====================================================================================
모달 윈도우란??
부모 윈도우에서 자식 윈도우를 생성하는 경우는 많습니다. 예를 들면 대부분 프로그램에서 About을 클릭하면 해당 프로그램의 정보가 나오는데요. 이런 경우도 부모 윈도우에서 자식 윈도우를 생성한 것이지요.
하지만 이렇게 자식 윈도우가 생성되면 부모 윈도우가 제어가 되는 경우도 있지만 자식 윈도우를 꺼야만 부모 윈도우가 제어가 되는 경우도 많습니다. 바로 이런 윈도우가 모달 윈도우 입니다. 즉, 모달 윈도우가 생성되면 부모 윈도우는 제어가 불가능하게 됩니다.


위 그림을 보시면 그림판에서 저렇게 모달 윈도우를 띄우면.. 저 창을 끄기 전까진 부모 윈도우를 제어할 수 없을 것입니다.
저 창을 띄우기 위해서 어떠한 API함수들이 호출되는지 본 결과 그 중에 EnableWindow라는 함수가 있었습니다.
어떠한 일을 하는 함수인지 MSDN에서 찾아보았습니다.

The EnableWindow function enables or disables mouse and keyboard input to the specified window or control. 

마우스나 키보드의 입력을 특정한 윈도우나 제어로부터 가능하게 하거나 불가능하게 하는 함수라고 나와있네요.

이 함수가 왠지 우리가 원하는 함수 같습니다. 그러면 해당 자식 윈도우를 생성할 때 EnableWindow함수를 실행할 탠데 실행을 막고나서 다시 테스트를 해보겠습니다. ( 잘 안보이시면 클릭 )

자식 윈도우를 띄웠는데도 불구하고 부모 윈도우가 살아있어서 그림판 정보까지 띄울 수 있었습니다.
오호~ 성공이네요.

그러면 EnableWindow 함수는 내부적으로 어떠한 함수를 호출하고 있는지 확인하도록 하겠습니다.

무슨 함수를 하나 호출하고 있긴한데 어떠한 함수 인지를 모르겠습니다.
이럴땐 WinDbg로 간단히 확인!

해당 함수가 NtUserCallHwndParamLock 함수입니다.
저 함수를 호출하는데 인자가 3개가 전달되고 있군요.
어떠한 함수인지 msdn에서 찾아보겠습니다.

헉... MSDN에도 없는 함수 입니다. 앞에 Nt가 붙은걸로 봐서는 커널에서 동작하는 함수인데 유저모드에서 사용이 됬네요. 보통 유저모드에서는 Nt함수 대신 Zw를 쓰는데 말입니다. 왜 썼는지는 모르겠네요.
아무튼 msdn에도 없다는... 그래서 각각의 인자가 어떠한 역할을 하는지에 대해서는 모르겠네요. 그냥 무작정 실험해본 결과 세번째 인자가 0x60이 들어가고 있는데 0x0으로 넣으니 우회가 되더군요. 쩝;;

그냥 함수 명으로 대충 유추를 해보면 뭔가 Lock한다는데;; 자식 윈도우가 생성되면 부모 윈도우를 Lock하는 함수인거 같습니다.

마지막으로 동작하는 것을 영상으로 담아봤습니다.
대부분 사이트 보면 그냥 설명만 하고 끝나는게 마음에 안들어서
전 이제 시간이 있으면 최대한 영상으로 담으려고 노력하겠습니다.
( 아직 설정 방법을 잘 몰라.. 자꾸 영상에 잔상이 남는거 같네요.. ㅜㅜ )
아마 잘 안보이실 탠데, 답답하신 분들은 다운 받아서 크게 보세요 ^^



'My Study > Reversing' 카테고리의 다른 글

IDAStealth 플러그인  (0) 2010.04.16
심볼(Symbol)과 맵(Map) 파일  (3) 2010.04.16
IDA v5.2 -> IDA v5.5 원격 디버깅  (0) 2010.04.13
바이트코드 기반 언어 심볼 정보 포함 이유  (0) 2010.04.13
DLL Injection  (7) 2010.04.12