
Python ctypes 래퍼로, Windows용 이벤트 추적(ETW)을 통해 세션 제어, 이벤트 캡처, 보안 모니터링 및 포렌식 분석을 위한 사용자 정의 콜백을 지원합니다.
ETW는 사용자가 이벤트를 파일이나 버퍼에 기록할 수 있게 해주는 추적 기능입니다. ETW에 대한 개요는 여기에서 확인할 수 있습니다. 기본 아키텍처에는 Provider, Controller, Consumer가 포함됩니다. Controller는 캡처 세션을 정의하고 제어합니다. 여기에는 세션에 포함할 provider와 세션의 시작 및 중지가 포함됩니다. GUID(Globally Unique Identifier)로 지정되는 Provider는 일련의 버퍼에 이벤트를 기록합니다. Consumer는 버퍼나 파일에서 메시지를 수신하여 시간순으로 처리합니다.
이 모듈은 ETW 세션을 제어하고 메시지 데이터를 처리하는 데 필요한 Win32 API를 완전히 Python 기반 ctypes 래퍼로 감싼 것입니다. 이 모듈은 매우 유연하며 캡처 전 또는 캡처 후 필터를 설정할 수 있습니다.
이 모듈을 사용하려면 etw를 가져오고 데이터를 캡처하려는 provider에 대한 ProviderInfo 인스턴스 목록을 전달하여 ETW 클래스의 인스턴스를 생성합니다. ETW에서 반환된 데이터를 처리하려면 콜백을 지정해야 합니다.
import etw
def some_func():
# 캡처 provider 정보 정의
providers = [etw.ProviderInfo('Some Provider', etw.GUID("{11111111-1111-1111-1111-111111111111}"))]
# ETW 인스턴스 생성 및 캡처 시작
with etw.ETW(providers=providers, event_callback=etw.on_event_callback):
# 캡처 실행
etw.run('etw')
아래는 사용자 정의 콜백을 사용하여 캡처를 수행하는 모듈 사용 예시입니다.
import time
import etw
def some_func():
# 캡처 provider 정보 정의
providers = [etw.ProviderInfo('Some Provider', etw.GUID("{11111111-1111-1111-1111-111111111111}"))]
# ETW 클래스 인스턴스 생성
job = etw.ETW(providers=providers, event_callback=lambda x: print(x))
# 캡처 시작
job.start()
# 잠시 대기
time.sleep(5)
# 캡처 중지
job.stop()
서브클래싱은 ETW 캡처 클래스를 정의하는 또 다른 편리한 방법입니다.
import time
import etw
class MyETW(etw.ETW):
def __init__(self, event_callback):
# 캡처 provider 정보 정의
providers = [etw.ProviderInfo('Some Provider', etw.GUID("{11111111-1111-1111-1111-111111111111}"))]
super().__init__(providers=providers, event_callback=event_callback)
def start(self):
# 캡처 전 설정 수행
self.do_capture_setup()
super().start()
def stop(self):
super().stop()
# 캡처 후 정리 수행
self.do_capture_teardown()
def do_capture_setup(self):
# 캡처를 위한 설정을 여기서 수행
pass
def do_capture_teardown(self):
# 캡처 정리를 여기서 수행
pass
def my_capture():
# 클래스 인스턴스화
capture = MyETW(lambda x: print(x))
# 캡처 시작
capture.start()
# 데이터 캡처를 위해 잠시 대기
time.sleep(5)
# 캡처 중지
capture.stop()
더 많은 예시는 examples를 참조하세요.