Process Monitor 는 윈도우 운영체제에서 실행중인 프로세스들이 런타임에 호출하는 API(파일, 레지스트리, 쓰레드 등)를 실시간으로 모니터링할 수 있는 도구이다.
일전에 C++로 작성된 서버 프로그램이 간헐적으로 비정상 종료하는 문제를 만났는데, 비정상 종료와 함께 파일 쓰기 관련 오류 메시지를 출력하고 있었다. 그 때 파일 API 호출에 오류가 있는 코드를 찾으려 이 프로그램을 처음 사용해 보게 되었고, 그 뒤로 친해진 것 같다.
아래 공식 사이트에서 프로그램에 대한 설명과 최신 프로그램을 무료로 다운로드 받을 수 있다. 이 글에서는 Process Monitor 프로그램을 의미있게 사용하는 Quick 가이드를 정리하려고 한다.
프로그램을 다운받고 압축해제한다.
실행파일 (Procmon.exe)을 실행한다.
라이선스 동의한다.
프로그램이 실행되고 전체 프로세스의 Windows API 호출 로그가 실시간으로 출력되는 것을 확인할 수 있다.
툴바에서 제공하는 주요 기능은 아래와 같다.
이제 우리가 관심있는 특정 프로그램(프로세스)의 API 호출만 모니터링해보자.
필터링 메뉴를 클릭한다.
디폴트 필터를 모두 삭제한다.
모니터링하고자 하는 프로세스의 이름을 입력한다. 예시로 chrome.exe 프로세스를 모니터링 해보자.
[Process Name] 선택 / [is] 선택 / [chrome.exe] 선택/ [Include] 선택 → Add 버튼 선택 → OK 버튼
이제 특정 프로세스의 특정 API 호출만을 모니터링해보자.
동일하게 필터링 창을 열고, 파일 관련 API 필터를 추가해 준다.
[Operation] 선택 / [is] 선택 / [CreateFile] 선택 / [Include] 선택 → Add 버튼 선택 → OK 버튼
[CloseFile], [WriteFile], [ReadFile] 에 대해서도 위와 같이 추가해 준다.
이제 chrome.exe 프로세스의 File 관련된 API 호출 로그만 필터링되는 것을 확인할 수 있다.
조금 공부해 보면 다른 API 들도 다양하게 활용할 수 있다.
추가적으로 관심있는 로그들을 수집한 후 외부로 내보내기 하여 Customized 된 세부적인 분석을 수행할 수 있다.
Save 버튼을 클릭한다.
필터링이 적용된 로그를 CSV 파일 형태로 내보내 보자.
CSV 파일로 로그가 저장된 것을 확인할 수 있다.
CSV 파일을 분석하는 간단한 프로그램을 작성하면 조금더 고도화된 분석을 수행할 수 있다.
나는 Process Monitor 로그를 분석해서 아래의 케이스가 발생하는지 찾는 간단한 프로그램을 작성한 경험이 있다.
Process Monitor 를 실행하면 카카오톡 PC 버전과 충돌이 발생한다. 아래와 같은 메시지가 뜨면서 실행이 되지 않는다.
아래 두개의 레지스트리 키를 삭제해 주고, 컴퓨터를 재부팅하면 다시 카카오톡 프로그램 사용이 가능하다.
컴퓨터\HKEY_CURRENT_USER\SOFTWARE\Sysinternals\Process Monitor
컴퓨터\HKEY_CLASSES_ROOT\ProcMon.Logfile.1
카카오에서 자사 프로그램 해킹을 막기위해 막아둔 것으로 보인다.