본문 바로가기

procexp

(3)
[ProcExp] 메시지 박스/팝업 윈도우 주인 찾기 가끔 간단한 메시지 박스나 팝업 윈도우가 어느 프로세스에서 띄워 주는 것인지 모를 때가 있다. 누가 띄워주고 있는 것인지를 프로세스 익스플로러를 이용해 확인하는 방법을 설명한다. 간단히 말로 하면 : 프로세스 익스플로러의 메뉴 아이콘들 중에 동그란 과녁같이 생긴 (Spy++의 것과 같은 모양의) 아이콘이 있다. 이걸 잡은 채로 주인이 궁금한 윈도우를 잡으면 된다. 아래 캡쳐 화면을 참고하라. 과녁 모양 아이콘을 잡는다. 궁금한 윈도우에 포커스가 가면 마우스 버튼을 놓는다. 놓는 순간 프로세스 익스플로러의 프로세스 목록 중에서, 해당 윈도우를 갖고 있는 프로세스가 선택되면서 포커스가 움직인다. 아! 저 메시지 박스는 notepad.exe 가 뿌려주는 것이었구나.
소켙과 핸들 1 몇 회까지 울궈먹으며 포스팅을 할 지 모르겠지만, 1회라고 써 본다. 김성우씨의 네트워크 프로그래밍 책의 예제에 기반한 CPP 프로그램을 실행하면서 프로세스 익스플로러로 핸들을 확인했다. 예제는 아주 간단하게 소켙을 만들었다가, 다시 죽이는 것이었고, 내가 수정한 부분은 소켓을 만들었다, 닫는 작업을 반복해 보는 것이었다. WSAStartup 함수가 실행된 직후이다. 프로그램의 시작부분이라서 쓰레드가 하나 만들어 지는 것 같고, 레지스트리 키 두개를 읽나부다. 레지스트리 키 명을 확인해 보면 HKLM\SYSTEM\ControSet001\Services\WinSock2\Parameters\NameSpace_Catalog5 와 HKLM\SYSTEM\ControlSet001\Services\WinSock2\P..
socket and device\afd, device\tcp device\ksecdd 간단한 서버 샘플 프로그램을 디버그모드로 돌리면서, 어떻게 핸들이 생성되는지를 process explorer 로 살펴봤다. 아울러 tcpview 로도 언제 뜨는지를 확인해 봤다. 캡쳐한 그림을 참조. winsock 초기화. Procexp 핸들 화면을 보면, 아무런 핸들도 생성되지 않았다. socket 함수가 성공했다. \Device\Afd 핸들이 하나 생성되었음을 확인할 수있다. 아직 소켓만 생성된 상태이고, 이름은 바인드되지 않은 상태이다. bind 함수가 성공하면서, \Device\Tcp 핸들이 하나 생성된다. listen 이 성공하면서, \Device\KsecDD 핸들이 생성되고, 드디어 tcpview 에도 Server.exe 가 9000 포트로 LISTENING에 들어갔다는 게 뜬다. WINDOW..