Procmon. 모든 종류의 Windows 활동을 추적하기 위한 악명 높은 Windows Sysinternals의 유틸리티. 알 수 없는 변경 사항을 레지스트리 키에 가하는 악성 소프트웨어 설치 프로그램이나 바이러스의 흔적을 검사하는 능력으로 알려져 있습니다.
Windows 레지스트리, 파일 시스템, 프로세스 또는 네트워크 활동을 검사해야 할 경우 procmon을 사용하기로 결정한 경우이 문서가 도움이 될 것입니다.
이 최종 안내서에서는 설치부터 기본 사용법, 다양한 사용 사례에 이르기까지 procmon 유틸리티 사용에 대해 알아볼 것입니다.
전제 조건
이 최종 안내서는 거의 모든 Windows 시스템에 적용될 것입니다. 그러나 완전성을 위해 (Windows 3.1 컴퓨터에서 procmon을 실행하려는 시도를 방지하기 위해) 다음이 필요합니다.
- A Windows Vista or Windows Server 2008 or higher machine (x86 or x64)
그게 다입니다! 다음 섹션에서 procmon을 다운로드하고 설치할 것입니다. 이 안내서는 Windows 10 빌드 1909 x64 기계에서 procmon의 v3.6을 사용할 것입니다.
Procmon 다운로드 및 실행
시작하려면 Windows 기기에서 procmon을 실행해야 합니다. 두 가지 다른 방법을 통해 사용할 수 있습니다. 전통적인 다운로드 방법 또는 Windows Sysinternals에서 Sysinternals 라이브라고 부르는 방법입니다.
옛날 방식
Procmon은 설치할 필요가 없습니다. 단일 실행 파일입니다. ZIP 파일을 다운로드하여 얻을 수 있습니다. 다운로드한 후, 좋아하는 도구로 ZIP 파일을 추출하십시오. 아래는 홈 폴더에 저장한 경우에 대한 PowerShell 코드 스니펫입니다. 이 코드 스니펫은 필요한 모든 파일이 있는 ~\ProcessMonitor 폴더를 생성합니다.
~\ProcessMonitor 폴더 안에는 다음과 같이 다섯 개의 파일이 있습니다:
- Eula.txt – procmon을 실행하기 전에 수락해야 하는 라이선스 동의서입니다.
- procmon.chm – 제공된 모든 문서를 포함하는 도움말 파일입니다.
- Procmon.exe – 올바른 procmon 인스턴스(x86 또는 x64)를 시작할 주요 EXE 파일입니다.
- Procmon64.exe – x64 procmon 이진 파일입니다.
- Procmon64a.exe – alpha 64 procmon 이진 파일입니다.
이제 ~\ProcessMonitor\procmon.exe 파일을 실행하여 procmon을 실행하십시오.
Procmon은 관리자 권한으로만 실행됩니다. 따라서 실행할 때 UAC가 활성화된 경우 이를 수락하라는 메시지가 나타납니다. 이 가이드에서는 나중에 이를 우회하는 방법에 대해 다룰 것입니다.
Sysinternals Live
EXE를 다운로드하는 것을 원하지 않거나 할 수 없는 경우, Sysinternals Live 폴더를 사용할 수도 있습니다. 이를 위해 파일 탐색기를 열고 \\live.sysinternals.com\tools를 붙여 넣으십시오. 그러면 Sysinternals 파일을 포함한 일반적인 네트워크 공유와 같은 폴더가 표시됩니다. procmon을 포함한 모든 Sysinternals 파일을 찾을 수 있습니다.

procmon을 찾을 때까지 아래로 스크롤하여 두 번 클릭하면 procmon이 실행됩니다!
Procmon 시작 동작 사용자 정의
기본적으로 procmon은 사용자에게 엔드 사용자 라이선스 계약(EULA)을 수락하고 창을 열 것인지에 대해 확인하는 메시지를 표시하며 실행됩니다. 명령줄을 사용하여이 기본 동작을 사용자 정의할 수 있습니다.
예를 들어, /Minimized
스위치를 사용하여 procmon을 최소화하여 실행하려는 경우입니다.
아마도 새로운 컴퓨터에서 procmon을 실행하고 EULA 프롬프트를 보고 싶지 않을 수도 있습니다. /AcceptEula
스위치를 사용하여 시작 시 이를 비활성화할 수 있습니다.
현재 시대에는 덜 확률적이지만, procmon을 실행할 때마다 64비트 또는 32비트 운영 체제를 실행 중인지 여부를 감지합니다. 64비트 기계에서는 64비트 프로세스를 실행하고 그 반대의 경우에는 32비트 프로세스를 실행합니다. 64비트 기계에서 procmon을 32비트 프로세스로 실행하거나 (다음에 설명 할) 32비트 기계에서 생성된 로그 파일을 읽으려는 경우에는 /Run32
스위치를 사용하십시오.
Procmon에는 동작을 사용자 정의하는 다른 명령줄 스위치도 있지만 이에 대해서는 다음 섹션에서 알아보겠습니다.
Procmon 소개
procmon을 처음 실행하면 옵션들이 압도적일 수 있습니다. 걱정하지 마세요, 이 가이드에서 모든 것을 배울 것입니다! 아래에는 일반적인 procmon 캡처화면이 표시되어 있습니다.

procmon을 실행하는 순간부터 여러 종류의 Windows 이벤트를 캡처하기 시작합니다.
procmon이 자동으로 이벤트를 캡처하지 않도록 하려면 명령줄에서
procmon.exe /NoConnect
를 실행하여 시작할 수 있습니다.
위의 스크린샷에서 작업 열 아래에는 서로 다른 유형의 Windows 이벤트를 나타내는 여러 아이콘이 있습니다. Procmon은 다음 다섯 가지 유형의 이벤트를 캡처합니다:
- 레지스트리
- 파일 시스템
- 네트워크
- 프로세스
- 프로파일링 이벤트
각 클래스의 각 이벤트는 일곱 개의 열로 구성된 단일 목록 창에 표시됩니다:
- 시간 – 이벤트가 발생한 시간입니다.
- 프로세스 이름 – 이벤트를 트리거한 프로세스의 이름입니다.
- PID – 프로세스 식별자입니다.
- 작업 – 프로세스가 파일을 열거나 레지스트리 키 값을 변경하는 등의 이벤트 유형입니다.
- 경로 – 이벤트가 상호 작용한 개체의 경로입니다. 파일 경로, 레지스트리 경로 등이 포함됩니다.
- 결과 – 이 열은 이벤트의 결과를 나타내는 여러 값들을 포함합니다. 이 값은 성공(SUCCESS)과 같이 간단한 것일 수도 있고, 다시 파싱(REPARSE), 버퍼 오버플로우(BUFFER OVERFLOW), 이름을 찾을 수 없음(NAME NOT FOUND)과 같이 이벤트에 특정한 값일 수도 있습니다.
- 세부 정보 – 이 열은 보고 싶은 이벤트를 정확히 지정한 후에 모든 세부 사항을 포함합니다.
만약 특정한 열을 표시하고 싶지 않거나 다른 사용 가능한 열을 보고 싶다면, 열 머리글을 마우스 오른쪽 버튼으로 클릭하고 열 선택을 선택하세요. 그러면 보이는 열을 사용자 정의할 수 있는 대화 상자가 나타납니다.

이벤트 창에서 이벤트를 두 번 클릭하세요. 이벤트, 프로세스, 스택 탭을 보면 프로세스와 이벤트 자체에 대한 많은 세부 정보를 찾을 수 있습니다.

캡처 활성화 및 비활성화
캡처 프로세스에 대해 완전한 제어권을 가지고 있습니다. 전체 캡처 프로세스를 비활성화하거나 이벤트 클래스별로 캡처를 비활성화할 수 있습니다.
상단 메뉴 바에서 돋보기 아이콘을 볼 수 있습니다(아래 참조). 돋보기 아이콘이 빨간색 X로 표시되면 캡처가 비활성화된 것입니다. 그렇지 않으면 캡처가 활성화된 것입니다.

procmon이 필요 이상으로 오랫동안 이벤트를 캡처하지 않도록 주의하세요. 모든 이벤트를 저장하기 위해 가상 메모리를 사용하며, 조심하지 않으면 Windows가 충돌할 수 있습니다! 나중에 약간의 동작을 변경할 수 있습니다.
더 선택적으로 하려면 각 이벤트 클래스의 캡처를 제어할 수도 있습니다. 메뉴 바에는 작업 열에 표시된 동일한 아이콘이 5개 있습니다. 이 버튼을 클릭하여 전체 이벤트 클래스를 활성화하거나 비활성화할 수 있습니다.

마우스로 각 아이콘 위에 올려놓으면 각 아이콘이 어떤 활동을 나타내는지 볼 수 있습니다.
아이콘을 클릭하자마자 procmon이 이벤트 필터를 적용합니다. 지금까지 캡처된 이벤트의 수에 따라 아래와 같은 팝업 창이 표시될 수 있습니다.

기본적으로 가장 오른쪽에 있는 아이콘(검은색과 녹색 그래프)은 활성화되지 않습니다. procmon 시작 시 이 이벤트 클래스를 활성화하려면 명령 프롬프트에서
.\procmon.exe /Profiling
을 사용하여 procmon을 호출할 수 있습니다.
창 하단을 보면 이벤트의 수를 확인할 수 있습니다. 아래에서 볼 수 있듯이, procmon은 84,334개의 이벤트를 처리했지만 이벤트 필터가 적용되어 그 중 15,912개 또는 전체의 18%만 표시됩니다. 이 이벤트가 가상 메모리에 저장되고 있다는 것도 확인할 수 있습니다(추후 자세히 설명하겠습니다).

이벤트 필터
procmon을 이해하기 위해 필연적으로 이벤트 필터의 개념을 이해해야 합니다. 이벤트 필터는 신호를 노이즈로부터 분리하는 방법입니다. 위에서는 이벤트 클래스 전체에 이벤트 필터를 적용했지만, 더 세부적으로 이벤트 필터를 적용할 수도 있습니다.
이벤트 필터와 상호 작용하는 여러 가지 방법이 있습니다. 간단히 시작해 보겠습니다. 맨 위에 있는 필터 메뉴 항목을 클릭하십시오. 필터와 작업할 수 있는 다양한 옵션을 볼 수 있습니다.

필터 보기
기본적으로 procmon은 필터를 생성합니다. 필터 메뉴 항목 아래에서 필터…를 클릭하십시오. 두 개의 영역이 있는 Process Monitor Filter 대화 상자가 나타납니다. 하나는 필터 규칙을 필터링하는 영역이고, 다른 하나는 설정한 모든 규칙을 보는 영역입니다. 아래에 이를 예시로 볼 수 있습니다.

기본적으로 procmon을 실행할 때 위의 필터를 표시합니다. 이 대화 상자를 숨기려면
/Quiet
스위치를 사용하여 procmon을 실행할 수 있습니다.
자신의 필터를 생성하지 않은 상태에서도 procmon이 내장된 필터 규칙 세트를 사용하고 있음을 알 수 있습니다. Process Monitor Filter 대화 상자에서 아래로 스크롤하면 다양한 유형의 규칙이 정의되어 있는 것을 볼 수 있습니다. 여기에서 각 카테고리, 연산자, 값 및 각 규칙에 대한 동작을 볼 수 있습니다.
이러한 필터는 이러한 필터가 제외하는 이벤트를 보지 않아도 되기 때문에 적용됩니다. 그러나 모든 이벤트를 보고 싶다면 기본 필터를 모두 제거하거나 필터를 클릭한 다음 고급 출력 사용을 클릭하면 됩니다.

예를 들어, 위에 몇 가지 규칙을 볼 수 있습니다. 이 규칙은 프로세스 이름을 열 값으로 표시하고, is를 관계 값으로 표시하며, 값 열의 값으로 다양한 procmon 관련 프로세스를 표시하고, 동작은 제외입니다. 일반적인 용어로, 이러한 규칙은 procmon에게 예를 들어 procmon.exe라는 이름의 프로세스를 표시하지 않도록 (제외) 지시합니다.
이벤트 필터 규칙 관리
사용 사례에 따라 직접 규칙을 추가해야 할 것입니다. 규칙을 추가하는 몇 가지 다른 방법이 있습니다.
프로세스 모니터 필터 상자 사용
마지막 섹션에서는 프로세스 모니터 필터 상자의 모습과 모든 규칙을 보았습니다. 이 상자에서는 규칙을 만들고 수정하고 제거할 수도 있습니다.
예를 들어, explorer.exe 프로세스가 레지스트리 키를 쿼리한 시간만 보고 싶다고 가정해 봅시다.
이벤트 필터 추가
프로세스 모니터 필터 상자에서:
- 가장 왼쪽에 있는 드롭다운 목록을 클릭합니다. 이 목록은 필터링할 수 있는 다양한 이벤트 범주를 표시합니다. 아래에서 확인할 수 있듯이, 많은 항목이 있습니다!
이 목록에서 볼 수 있는 각 항목은 아래의 주요 디스플레이에 표시된 열에 해당합니다. 이 기사의 목적을 위해 프로세스 이름을 선택하십시오.

2. 카테고리를 선택한 다음, 연산자를 선택하십시오. 기본적으로 드롭다운 상자는 is이지만, 드롭다운을 클릭하면 다른 옵션도 많이 나타납니다. 이러한 연산자를 사용하면 선택한 옵션을 여러 가지 방법으로 필터링할 수 있습니다. 정확히 explorer.exe인 프로세스를 찾고 있으므로 is를 선택하십시오.

3. 마지막으로, 아래에 표시된대로 프로세스 이름을 선택하십시오. 카테고리로 프로세스 이름을 선택한 것이기 때문에 procmon은 현재 실행 중인 모든 프로세스를 자동으로 보여줍니다.

4. 포함을 선택했는지 확인하여 이 기준과 일치하는 이벤트만 표시하도록 하십시오. 그런 다음 추가 버튼을 클릭하여 현재 필터에 규칙을 추가하십시오. 아래에서 포함 규칙이 초록색 확인 표시로 표시됩니다.
5. 마지막으로, explorer.exe가 레지스트리 키를 조회하는 모든 이벤트를 보고 싶다면 RegQueryKey 작업도 포함해야 합니다. 완료하면 두 규칙이 모두 추가된 것을 볼 수 있습니다.

6. 확인을 클릭하면 메인 창에서 방금 정의한 필터 규칙과 일치하지 않는 모든 이벤트가 제거됩니다.

이벤트 필터 규칙 제거
필터 규칙을 제거하거나 변경하는 것도 매우 쉽습니다.
- 메인 창 상단에 있는 필터 아이콘을 클릭하여 프로세스 모니터 필터 상자를 열 수도 있습니다.

2. 위에서 생성한 필터 규칙 두 개를 강조 표시한 후 아래에 표시된 제거 버튼을 클릭하고 확인을 클릭하십시오. 이 작업은 이전에 추가한 사용자 지정 규칙을 모두 제거합니다.

또한 재설정 버튼을 클릭하여 모든 사용자 지정 필터 규칙을 자동으로 제거할 수도 있습니다.
필터를 적용할 때마다 procmon을 종료하고 다시 시작하면 해당 필터가 다시 적용됩니다. procmon을 시작할 때 필터가 적용되지 않도록 하려면
/NoFilter
스위치를 사용하여 procmon을 호출할 수 있습니다.
우클릭으로 필터 규칙 추가
프로세스에서 우클릭하면 우클릭 메뉴를 통해 필터 규칙을 추가할 수도 있습니다. 아래에서 확인할 수 있듯이, 이 메뉴에서 직접 어떤 종류의 규칙이든 생성할 수 있습니다. Process Monitor Filter 상자로 이동할 필요가 없습니다!

우클릭 메뉴를 통해 생성된 필터 규칙을 제거하려면 여전히 Process Monitor Filter 상자로 이동해야 합니다.
사용자 지정 필터 저장 및 관리
procmon의 필터 저장 및 구성 기능을 사용하면 다양한 경우에 대한 필터 규칙 세트를 관리하고 저장할 수 있습니다. 필터 저장 및 구성 기능을 사용하여 원하는 만큼 이러한 세트를 관리하고 저장할 수 있습니다.
예를 들어, 다양한 사용자 지정 필터가 정의되어 있고 나중에 다시 사용하려는 경우 이 필터를 저장할 수 있습니다. 필터로 이동하여 필터 저장을 선택하고 아래에 표시된 대로 이름을 제공하면 이 필터를 저장할 수 있습니다.

필터를 저장한 후에는 필터로 이동하여 필터 정리를 클릭하면 저장한 모든 필터가 표시됩니다. 여기에서 필터를 클릭하고 확인을 클릭하면 저장한 필터가 현재 창에 적용됩니다.

또한 필터 드롭다운에서 필터 불러오기 위로 마우스를 올리고 오른쪽 목록에서 저장한 필터를 선택하여 불러올 수도 있습니다.

필터 가져오기 및 내보내기
다른 컴퓨터에서 procmon을 로드하고 저장한 모든 필터를 유지하려면 아쉽게도 불가능합니다. Procmon에는 필터를 동기화하는 클라우드 서비스가 없지만 필터를 수동으로 내보내고 나중에 가져올 수 있습니다.
procmon 필터 내보내기:
- 필터 정리 상자로 이동하십시오.
- 이미 저장한 필터를 클릭하고 내보내기를 원하는 필터를 클릭하십시오.
- 내보내기 버튼을 클릭하십시오.
- 이름을 지정하고 경로를 선택한 다음 확인을 클릭하십시오. 모든 procmon 필터가 PMF 확장자로 저장되는 것을 볼 수 있습니다.
procmon 필터 가져오기:
- 필터 정리 상자로 이동하십시오.
- 가져오기 버튼을 클릭하십시오.
- 가져오려는 필터를 찾고 확인을 클릭하십시오.
이 단계들에 대한 시각적 안내를 아래에서 볼 수 있습니다.

Procmon 설정 가져오기 및 내보내기
위에서 배운 대로, procmon 필터를 PMF 파일을 통해 내보내고 가져올 수 있습니다. 그러나 필터는 procmon 인스턴스를 구성하는 요소 중 하나입니다. 열을 사용자 정의하고 저장 위치를 변경하고(이후에 더 자세히 알아보겠습니다) 등을 할 수 있습니다. 이러한 모든 설정을 저장하면 좋지 않을까요? 할 수 있습니다!
전체 procmon 구성을 저장하려면 파일 -> 구성 내보내기를 클릭한 다음 PMC 파일(Procmon 구성)을 저장할 위치를 선택하십시오.

저장한 후에는 같은 컴퓨터(또는 다른 컴퓨터)에서 procmon을 닫고 procmon을 열고 파일 -> 구성 가져오기를 클릭하여 내보낸 것과 동일한 필터 및 다른 설정을 모두 적용할 수 있습니다.
/LoadConfig 스위치 다음에 파일 경로를 입력하여 명령 줄에서 저장된 구성(필터 포함)을 로드할 수도 있습니다. 예: ./procmon.exe /LoadConfig C:\ProcmonConfigs\file_deletion.pmc.
이벤트 강조 및 필터로 변환하기
일부 이벤트를 쉽게 찾을 수 있도록 하지만 필터를 사용하여 이벤트를 보기에서 제거하려는 것은 아닌 경우 강조를 사용할 수 있습니다. 강조는 필터와 비슷한 규칙 세트를 구축하지만 이벤트를 숨기는 대신 이벤트의 배경색을 변경합니다.
예를 들어 이벤트 목록에서 ctfmon.exe라는 프로세스를 강조하려는 경우 다음과 같이 강조 규칙을 생성할 수 있습니다:
- 강조할 속성을 가진 이벤트를 마우스 오른쪽 단추로 클릭합니다.
- 강조하기를 클릭하고 해당 이벤트의 속성 중 하나를 강조할 수 있습니다. 이 예시에서는 프로세스 이름을 선택합니다. 그럼 배경색이 연한 파란색으로 변경됩니다.
- 강조 규칙이 생성되면 프로세스 모니터 강조 표시 상자로 이동하여 필터를 클릭한 다음 강조 표시를 클릭합니다. 거기에서 강조 규칙이 생성된 것을 볼 수 있습니다.
- 프로세스 모니터 강조 표시 상자에서는 필터와 마찬가지로 규칙을 추가하고 제거할 수 있습니다.
- 강조 규칙을 생성하고 해당 규칙을 필터로 변경하고 싶다면 필터로 만들기 버튼을 프로세스 모니터 강조 표시 상자에서 클릭하면 됩니다.
이 단계들의 시각적 안내를 아래에서 볼 수 있습니다.

로그 파일로 이벤트 내보내기 및 열기
procmon이 창에서 이벤트를 표시하려면 어딘가에 저장되어야 합니다. 기본적으로 이벤트는 가상 메모리, 구체적으로는 페이지 파일에 저장됩니다.

사용자가 정의한 페이지 파일의 크기(시스템 커밋 한도에 따라)에 따라 procmon이 저장할 수 있는 이벤트의 수가 달라집니다.
Procmon은 최대 1억 9900만 개의 이벤트를 캡처할 수 있습니다.
로그 파일에 이벤트 저장하기
아마도 나중에 조사하기 위해 이러한 이벤트를 저장해야 할 수도 있고, 다른 컴퓨터에 로드해야 할 수도 있을 것입니다. 그렇다면, 이벤트를 로그 파일(PML)에 저장해야 합니다.
이러한 편리한 이벤트를 저장하는 한 가지 방법은 파일 -> 저장을 클릭하는 것입니다. 이 동작은 아래의 파일로 저장 대화 상자를 띄워주며, 여러 가지 옵션을 선택할 수 있습니다.
저장할 이벤트:
- 모든 이벤트 – 이 옵션은 그대로 이해하면 됩니다. 이벤트 필터를 적용했는지 여부에 상관없이 procmon이 캡처한 모든 이벤트를 파일에 저장합니다.
- 현재 필터를 사용하여 표시된 이벤트 – 이 옵션은 캡처된 모든 이벤트를 저장하지 않고, 현재 활성화된 이벤트 필터를 통과한 이벤트만 저장합니다.
- 강조된 이벤트 – 이 옵션은 현재 강조된 이벤트만 로그에 내보냅니다.
형식:
- Native Process Monitor 형식 (PML) – 모든 이벤트를 저장하기 위한 기본 형식(PML)입니다.
- 쉼표로 구분된 값(CSV) – 모든 이벤트를 CSV 파일에 저장합니다.
- 확장 가능한 마크업 언어(XML) – 모든 이벤트를 XML 파일에 저장합니다. 이 형식은 추적 트레이스를 저장할 수 있는 기능도 제공하며, 스택 심볼을 해결할 수 있습니다.

확인을 클릭하면, 현재 기준에 맞는 캡처된 모든 이벤트를 선택한 파일에 저장합니다.
저장된 이벤트 로그 열기
하나의 컴퓨터에서 수천 개의 이벤트를 캡처했고, 해당 캡처 세션을 PML 파일로 저장하고 다른 컴퓨터로 복사하여 조사했습니다. 이제 어떻게 해야 할까요? 열어야 합니다.
로컬 컴퓨터에서 캡처한 것인지 여부에 상관없이 PML 파일을 열 수 있습니다. 단순히 파일 —> 열기로 이동하여 PML 파일을 선택하면 됩니다.
/OpenLog 스위치를 사용하여 명령줄에서 로그를 열 수도 있습니다. 예: procmon.exe /OpenLog C:\MyLogFile.pml.
이벤트 자동 기록
이전 섹션에서 캡처한 후 이벤트를 로그로 내보내는 방법을 배웠습니다. 그러나 PML, XML 또는 CSV 파일에 이벤트를 사전에 저장하려는 경우는 어떻게 할까요? Procmon을 사용하여 이벤트를 자동으로 캡처하여 해당 로그 파일 형식 중 하나에 저장할 수 있습니다.
또한, 이벤트를 페이지 파일에 저장하는 것은 간단한 ad-hoc 문제 해결 세션이 1시간 이내로 지속되는 경우에만 적합합니다. 그러나 이 방법에는 몇 가지 단점이 있습니다.
- Procmon을 닫으면 이벤트가 사라집니다.
- 앞서 언급한 대로, 페이지 파일 크기가 너무 커질 수 있습니다.
저장 위치로 가상 메모리를 사용하는 경우, 파일 —> 백킹 파일을 클릭하여 procmon이 사용할 수 있는 공간이 얼마나 남았는지 알 수 있습니다.
어떻게 해야 할까요? 저장 위치를 변경하세요.
디스크에 이벤트 저장
페이지 파일에서 이벤트를 저장하는 위치를 디스크로 변경하려면 다음을 수행하세요:
- 현재 실행 중인 캡처가 있다면 중지하세요.
2. 파일을 클릭하십시오 -> 백업 파일. 그럼 저장된 이벤트와 크기에 대한 요약과 함께 저장 위치를 변경할 수 있는 옵션이 표시됩니다.

3. 저장 위치를 파일로 변경하려면 다음 이름의 파일 사용: 필드를 클릭한 다음, 말줄임표 버튼을 클릭하여 파일 위치를 정의하십시오.
최상의 성능을 위해 procmon이 실행되고 있는 디스크 볼륨과 다른 디스크 볼륨을 사용하려고 시도해보십시오.
procmon을 명령줄에서 실행하고
/BackingFile
스위치를 사용하여 파일을 저장 위치로 사용할 수도 있습니다. 페이지 파일을 다시 사용하려면/PagingFile
스위치를 사용하십시오.
로그 파일 변환
Procmon은 세 가지 다른 형식인 PML, CSV 및 XML로 로그 파일을 저장할 수 있습니다. 아마도 PML 로그 파일을 스크립트나 기타 도구로 이벤트를 구문 분석해야 할 수도 있습니다. 그런 경우에는 해당 PML 로그 파일을 명령줄에서 XML 또는 CSV로 변환할 수 있습니다.
예를 들어 C:\capture.pml에 PML 로그 파일이 있다고 가정해 보겠습니다. 이 로그 파일을 XML 및 CSV 형식으로 변환하고 싶습니다. 이를 위해 먼저 /OpenLog
스위치로 로그 파일을 열고, 다시 저장하기 위해 /Save*
스위치를 사용할 수 있습니다.
Procmon에는 세 가지 다양한 형식으로 로그를 저장할 수 있는 표준 /SaveAs
매개변수가 있습니다. /SaveAs
매개변수는 제공하는 파일 확장자에 따라 파일 형식을 설정합니다.
아래는 몇 가지 예시입니다:
capture.pml 로그를 capture.xml로 변환:
capture.pml 로그를 capture.csv로 변환하세요:
파일에 저장 대화 상자에서 스택 추적 및 스택 심볼 해결 옵션을 기억하세요. 이러한 옵션을 /SaveAs1
및 /SaveAs2
를 사용하여 활성화할 수도 있습니다.
스택 추적 및 심볼 정보는 XML 형식으로만 저장할 수 있습니다.
capture.pml 로그를 스택 정보를 포함한 capture.xml로 변환하세요:
capture.pml 로그를 심볼을 포함한 capture.xml로 변환하세요:
스택 추적과 심볼을 추가하면 변환 시간이 크게 늘어날 수 있으며, 아래에 표시된 진행 표시기를 반드시 볼 수 있습니다.

부팅 시 이벤트 캡처
Windows가 실행 중이 아닐 때 생성되는 정보를 조사해야 할 때가 있습니다. Windows가 부팅되는 동안 프로세스가 무엇을 하는지 조사해야 할 수도 있습니다.
부팅 시간이 느린 성능이나 Windows가 시작될 때 바로 실행되는 악성 소프트웨어와 같은 문제를 해결해야 할 때가 자주 있습니다. Procmon에는 이 정보를 캡처할 수 있는 부팅 시간 로깅 기능이 있습니다.
부팅 로깅을 활성화하려면 아래에 표시된 대화 상자에서 메뉴에서 옵션 —> 부팅 로깅 활성화를 클릭하세요.

부팅 로깅 활성화를 클릭하면 선택적 정보를 요청하는 대화 상자가 나타납니다. 이 대화 상자에서 스레드 프로파일링 이벤트를 캡처할 수 있습니다.
스레드 프로파일링 이벤트를 활성화하는 것은 고급 사용 사례입니다. 스레드 프로파일링을 활성화하면 procmon은 스레드 스택 추적 및 CPU 활용률을 캡처하여 CPU 관련 성능 문제의 원인을 식별하는 데 사용할 수 있습니다.

확인을 클릭하면 procmon은 부팅 로깅을 활성화하며 이를 통해 필터 드라이버(이에 대해서는 나중에 자세히 설명합니다)가 Windows의 다음 재부팅을 기다리도록 지시합니다. Windows를 재부팅하면 procmon은 수동으로 시작한 것처럼 프로세스 이벤트를 캡처하기 시작합니다.
부팅 시간 이벤트 데이터는 C:\Windows\procmon.pmb라는 임시 로그 파일에 저장됩니다.
Windows가 다시 켜진 후에 procmon을 엽니다. 아래와 같은 대화 상자가 표시됩니다. 여기에서 데이터를 저장할 로그 파일을 선택하여 부팅 시간 데이터를 PML 형식으로 변환하려면 예를 클릭합니다.

procmon이 데이터를 변환하는 동안 아래와 같은 진행 표시 줄이 표시됩니다.

재부팅 후에도 반드시 procmon을 실행하는 것을 잊지 마세요! Procmon은 Windows가 C:\Windows\procmon.pmb에서 부팅될 때부터 이벤트를 캡처하기 시작합니다. Procmon을 다시 열어서 꺼릴 때까지 계속해서 이를 수행합니다.
원격으로 Procmon 실행하기
Procmon은 Windows 컴퓨터에서만 로컬로 실행됩니다. 그러나 psexec 또는 PowerShell의 Invoke-Command
명령을 통해 Procmon을 원격으로 실행할 수 있습니다.
관련 정보: PsExec: 최종 안내서, Invoke-Command: 원격 코드 실행의 최상의 방법
PowerShell의 Invoke-Command
명령을 사용하여 procmon을 실행하려면 다음 단계를 따르십시오:
- 원격 컴퓨터에서 PowerShell 원격 제어를 활성화하세요. 이미 활성화되어 있는 경우 이 단계를 건너뛰세요.
2. PowerShell 콘솔을 통해 procmon 폴더를 원격 컴퓨터로 복사하세요.
3. PowerShell을 통해 procmon을 호출하되, EULA 확인을 건너뛰고 procmon이 가상 메모리 대신 백업 파일에 이벤트를 저장하도록 강제하고 시작 시에 필터를 묻지 않도록하세요.
4. 이제 procmon이 캡처를 시작했습니다. 캡처하려는 문제를 재현하세요.
5. 원격 컴퓨터에서 /Terminate 스위치를 사용하여 procmon을 중지하세요.
6. procmon이 종료될 때까지 기다리세요. 단축키로 procmon 프로세스를 주기적으로 확인하여 완료되었을 때 PowerShell 콘솔로 제어를 돌려받을 수 있습니다.
7. 원격 로그 파일을 로컬 컴퓨터로 복사하세요.
이제 로컬 컴퓨터에 원격으로 실행된 로그 파일이 있습니다!
이 캡처를 관리하기 위해 적절한 PowerShell 스크립트가 필요하다면 아래에서 찾을 수 있습니다.
장기 실행 procmon 캡처 설정
A busy Windows system can produce a lot of events procmon captures that can overwhelm your PC. If you intend to run procmon for an extended amount of time, there a few measure you should take into consideration.
필터링된 이벤트 삭제
procmon이 캡처를 실행 중인 경우 모든 이벤트를 캡처합니다. 이벤트 필터를 생성하고 적용할 수 있지만, 이러한 필터는 화면에서 이벤트를 숨기는 것뿐이며, procmon이 이를 캡처하지 않는 것은 아닙니다.
더 긴 실행 procmon 캡처를 수행하려면 항상 아래에 표시된 것과 같이 필터 메뉴에서 필터된 이벤트 삭제를 선택하는 것이 좋습니다.

필터된 이벤트 삭제 항목을 선택하면 procmon은 즉시 모든 필터된 이벤트를 삭제합니다. procmon은 화면에 표시하지 않으며 가상 메모리나 로그 파일에 저장하지도 않습니다. 원치 않는 이벤트를 완전히 삭제하면 리소스를 절약할 수 있습니다.
고급 주제
procmon과 그 사용법에 대해 더 많은 정보를 원하시나요? 고급 주제로 넘어가 봅시다! 이러한 주제는 자주 알아야 할 필요가 없는 주제입니다. 이러한 주제는 procmon의 더 깊은 기능에 대한 정보이지만, 문제 해결에 도움이 될 수 있습니다.
필터 드라이버
이벤트를 캡처하기 위해 procmon은 Windows Filter Manager(FltDrv)를 통해 필터 드라이버를 등록하고 사용합니다. 이 필터 드라이버는 캡처를 시작할 때 설치되는 PROCMON24라는 이름의 필터 드라이버입니다. 때로는 이 필터 드라이버가 다른 응용 프로그램과 충돌할 수 있습니다.
procmon을 시작한 후, 고정된 PowerShell 콘솔이나 명령 프롬프트를 열고 fltmc filters
를 실행하세요. fltmc
유틸리티는 필터 드라이버를 나열, 로드 및 언로드합니다. 이를 실행하면 아래에 표시된 것과 같이 PROCMON24 필터가 로드된 것을 볼 수 있습니다.
PROCMON24의 고도는 기본적으로 385200이며 다른 필터는 낮은 번호를 가지고 있습니다. 필터 드라이버 고도는 필터 드라이버가 이벤트를 “볼” 수 있는 수준을 나타냅니다. 예를 들어, wcifs, luafv 또는 Wof 수준에서 발생하는 이벤트는 procmon이 볼 수 없습니다. 나중에 이를 변경하는 방법에 대해 자세히 알아보겠습니다.

PROCmon이 실행되지 않을 때에도 PROCMON24 필터 드라이버는 로드된 상태로 유지됩니다.
procmon이 필터 드라이버를 로드하는 데 문제가 발생할 수 있습니다. 문제 해결을 위해
/NoConnection
스위치를 사용하여 procmon이 필터 드라이버에 연결되지 않도록 합니다.
PROCMON24 필터 드라이버 언로드
PROCMON24 필터 드라이버가 다양한 하드웨어 장치와 충돌할 수 있는 경우 언로드해야 할 수 있습니다. 그러나 이 상황은 생각보다 쉽지 않을 수 있습니다.
필터 드라이버의 이름을 따라 fltmc unload
명령을 사용하여 필터 드라이버를 언로드할 수 있습니다.
하지만 위의 명령을 시도하면 작동하지 않는 것을 알 수 있습니다. 개발자가 이 기능을 추가하지 않았기 때문에이 필터 드라이버를 언로드할 수 없습니다.

PROCMON24 필터 드라이버를 언로드해야 하는 경우, 유감스럽게도 재부팅이 유일한 방법입니다.
스택 추적
가끔은 레지스트리 키를 읽거나 파일을 열거나 네트워크 주소를 호출하는 것만으로는 충분하지 않을 때가 있습니다. 더 깊게 파고들어서 프로세스가 호출하는 실제 Windows API 함수 호출 기록을 확인해야 합니다. 프로세스의 스택 추적을 살펴봐야 합니다.
A stack trace is the history of various functions called during various function calls when a process is running.
Procmon에서 이벤트 목록이 표시되면 이벤트를 더블 클릭한 다음 아래에 표시된 스택 탭을 클릭하세요. 스택 탭은 이벤트가 발생한 시점에 개별 프로세스가 호출한 함수 호출을 나타냅니다.

스택 추적에 대한 주제는 길게 논의될 수 있습니다. 프로세스의 호출 스택을 이해하는 방법에 대해 더 알고 싶다면 다음 기사를 확인해보세요. Process Monitor에서 더 나은 스택 추적 얻기
Procmon의 고도 변경(하위 수준 이벤트 캡처)
앞에서 언급한 대로 procmon은 이벤트를 캡처하기 위해 필터 드라이버를 사용합니다. procmon이 모든 Windows 이벤트를 캡처하는 것처럼 보이지만 (procmon 창에는 많은 이벤트가 표시됩니다!), 실제로는 그렇지 않습니다. Procmon은 필터 드라이버가 알고 있는 이벤트 또는 필터 드라이버의 고도에 대한 이벤트만 캡처합니다.
예를 들어, 백신 활동, 저수준 저장소 및 기타 하위 수준 하드웨어 이벤트를 기록해야 하는 경우 PROCMON24 필터 드라이버의 고도를 다른 드라이버보다 낮게 설정해야 합니다.
이를 위해 다음을 수행하세요:
- 프로세스 모니터를 종료하세요.
2. 현재로드된 필터 드라이버 중 가장 낮은 고도를 fltmc
명령어로 찾으세요.
3. HKLM\System\CurrentControlSet\Services\PROCMON24\Instances\Process Monitor 24 Instance 레지스트리 키 아래의 Altitude 레지스트리 값을 가장 낮은 고도 값보다 100 낮게 변경하세요 (모든 이벤트를 보려면).
설치된 procmon 버전에 따라 레지스트리 키 위치가 달라질 수 있습니다. 이 튜토리얼은 Procmon 2.4를 사용합니다.
관리자 권한이 필요한 PowerShell 세션을 열고 아래 코드 스니펫을 실행하면 값을 빠르게 변경할 수 있습니다.
고도를 낮게 설정할수록 관리해야 할 이벤트가 많아집니다. 필요한 것보다 낮은 고도로 설정하지 마세요.
4. 모든 사용자에 대해 Process Monitor 24 Instance 키에 대한 삭제 및 값 설정 권한을 거부하세요. procmon이 다시 실행될 때 Altitude
값을 기본값으로 설정하려고 할 것입니다. 이 권한은 regedit 유틸리티를 통해 변경하거나 아래 PowerShell 스니펫을 실행하여 변경할 수 있습니다.
5. Windows를 재부팅하여 PROCMON24 필터 드라이버를 언로드하세요.
6. procmon을 시작하세요.
7. PowerShell 콘솔이나 명령 프롬프트를 열고 fltmc filters
명령어를 실행하세요. 이제 procmon 필터 드라이버가 새 고도에 표시될 것입니다.

이제 필요한 것을 원하는대로 캡처할 수 있습니다. 만약 procmon의 Altitude
를 가능한 한 낮추면, 이벤트 폭우에 대비할 수 있습니다!
실제 예시
이제 procmon이 무엇을 할 수 있고 Windows 이벤트를 추적하는 데 어떻게 도움이 될 수 있는지에 대해 잘 이해했을 것입니다. 이제 그 지식을 활용하여 몇 가지 일반적인 사용 사례를 다루어 보겠습니다.
파일을 삭제하는 원인 찾기
Windows 기기에 알 수 없는 이유로 계속 삭제되는 파일이 있고 이를 추적하려는 경우, procmon을 사용할 수 있습니다(그리고 매우 쉽습니다).
아마도 procmon을 열어 Delete 또는 Remove 파일 이벤트를 설정하려고 시도했을 것입니다. 그러나 안타깝게도 해당 작업은 존재하지 않습니다. 대신 파일 삭제 이벤트를 찾으려면 Operation
이 다음 값인 이벤트를 필터링해야 합니다.
SetDispositionInformationFile
SetDispositionInformationEx
시스템에서 많은 파일을 삭제하는 경우, Path
필터를 사용하여 파일 이름 또는 경로로 파일 삭제 이벤트를 제한해야 합니다.
잠긴 파일 문제 추적하기
우리 모두가 그런 경험을 했습니다. 파일을 이동하거나 삭제하려고 할 때 다른 프로세스에 의해 잠겨 있는 경우가 있습니다. 때때로 예를 들어 애플리케이션을 제거하려고 할 때, 보이는 무작위 오류가 처음부터 잠긴 파일과 관련이 있는지 알 수 없을 것입니다!
Windows가 잠긴 파일을 제거하거나 수정하려고 시도하는 시기를 파악하려면 아래 필터 세트를 사용하세요.
관리자 권한이 필요한 애플리케이션의 문제 해결
문서에 따르면 작동해야 하는데 작동하지 않는 애플리케이션과 작업 중이신가요? 우리 모두가 그런 경험을 한 적이 있습니다. 때때로 애플리케이션이 생성하는 프로세스 중 일부는 권한 상승이 필요하지만 어디에서 어떻게 필요한지 알려주지 않을 수 있습니다. 이럴 때 procmon을 사용하여 도움을 받을 수 있습니다.
권한 상승이 필요한 이유로 거부되는 프로세스를 추적하는 한 가지 방법은 이벤트의 결과(Result)로 필터링하는 것입니다.
권한 상승이 부족하여 거부되는 이벤트가 발생할 때, 일반적으로 ACCESS DENIED
라는 결과를 볼 수 있습니다. 이를 알고 있다면, 아래와 같이 ACCESS DENIED
를 가진 모든 이벤트를 보여주는 간단한 필터를 만들 수 있습니다.
여기서부터는 경로(Path) 속성을 가진 레지스트리나 폴더 경로와 같은 추가적인 필터를 추가할 수 있습니다.
IP 주소에 접근하는 프로세스 찾기
Wireshark를 사용하여 이상한 네트워크 동작을 확인하고 통신을 시작하는 프로세스를 찾아야 할 때가 있을 수 있습니다. procon을 실행하고 아래 필터 규칙 세트를 추가하세요.
이 필터 규칙은 목적지가 단일 IP 주소인 로컬에서 시작된 네트워크 트래픽에 대해서만 이벤트를 제한합니다.
느린 부팅 문제 해결
Windows가 부팅하는 데 시간이 오래 걸릴 수 있습니다. 이러한 느림은 다양한 Windows 구성 요소, 설치된 애플리케이션 등으로 인해 발생할 수 있습니다. procmon의 부팅 로깅 기능을 사용하여 문제를 추적하고 해결할 수 있습니다.
- 부팅 로깅 활성화. 이 작업 방법은 위의 부팅 시간 이벤트 캡처 섹션에서 확인할 수 있습니다.
2. 부팅 로깅 활성화 대화 상자에서 스레드 프로파일링 이벤트 생성 확인란을 선택하세요. 매 초 라디오 버튼으로 설정하면 됩니다.

3. 재부팅 후 procmon을 열고 열 제목 중 하나를 마우스 오른쪽 버튼으로 클릭한 다음 열 선택을 선택하세요.
4. Process Monitor 열 선택 대화 상자에서 지속 시간을 선택하세요. 이렇게 하면 각 이벤트의 실행에 걸린 시간을 확인할 수 있습니다.

5. 이제 지속 시간에 대한 필터 규칙을 생성하여 충분한 시간으로 간주되는 초 단위를 설정할 수 있습니다. 아래의 필터 규칙은 5초 이상 걸린 이벤트만 표시합니다.

6. 마지막으로, 이러한 느린 이벤트를 조사하는 데 유용한 방법은 procmon의 프로세스 트리를 사용하는 것입니다. 프로세스 트리는 부모 및 자식 프로세스 간의 관계를 보여주며 각 프로세스의 시작 및 종료 시간을 포함합니다. 이를 찾으려면 도구 —> 프로세스 트리를 클릭하세요.

7. 프로세스 트리에 들어가면 각 프로세스가 걸린 시간을 그래픽 형식으로 보여주는 수명 열을 확인하세요. 또한 이 보기에서 시작 시간과 종료 시간 열을 비교하여 시간 간격을 확인할 수 있습니다.

App-V 애플리케이션 문제 해결
많은 조직들이 애플리케이션을 가상화하고 배포하기 위해 Microsoft의 App-V 서비스를 사용합니다. App-V를 사용하는 경우, 알아야 할 유용한 (그리고 문서화되지 않은) procmon 스위치인 /externalcapture
가 있습니다.
애플리케이션의 레지스트리 활동을 더 많이 캡처하려면 .\procmon.exe /ExternalCapture
를 사용하세요. App-V 애플리케이션을 문제 해결할 때 찾지 못한 경우에는 이 스위치를 시도해 보세요!
/HookRegistry 스위치는 /ExternalCapture와 동일한 목적을 가지고 있지만 64비트 컴퓨터에서는 더 이상 작동하지 않습니다.
결론
여기에서는 procmon에 관한 포괄적인 가이드를 제시했습니다! procmon에 대해 많은 것을 배웠지만, 이 편리한 유틸리티에서 더 많은 유용한 기능을 발견할 수 있습니다.
이 최종 가이드에 대한 업데이트나 변경 사항을 제안하고 싶다면, Twitter에서 저에게 연락해 주세요!