
غلاف Python ctypes لتتبع الأحداث في Windows (ETW) يتيح التحكم في الجلسات، والتقاط الأحداث، واستدعاءات مخصصة للمراقبة الأمنية والتحليل الجنائي.
ETW هي أداة تتبع تسمح للمستخدم بتسجيل الأحداث في ملف أو مخزن مؤقت. يمكن العثور على نظرة عامة حول ETW هنا. تتضمن البنية الأساسية موفرًا (Provider) ووحدة تحكم (Controller) ومستهلكًا (Consumer). تقوم وحدة التحكم بتعريف جلسة الالتقاط والتحكم فيها. يتضمن ذلك الموفرات الموجودة في الجلسة بالإضافة إلى بدء الجلسة وإيقافها. يقوم الموفر، المحدد باستخدام GUID (معرف فريد عمومي)، بتسجيل الأحداث في سلسلة من المخازن المؤقتة. يتلقى المستهلك الرسائل إما من مخزن مؤقت أو من ملف ويعالجها بترتيب زمني.
هذه الوحدة هي غلاف ctypes مبني بالكامل على Python لواجهات برمجة تطبيقات Win32 اللازمة للتحكم في جلسات ETW ومعالجة بيانات الرسائل. الوحدة مرنة للغاية ويمكنها تعيين عوامل تصفية قبل أو بعد الالتقاط.
لاستخدام هذه الوحدة، قم باستيراد etw وأنشئ مثيلًا من فئة ETW عن طريق تمرير قائمة من مثيلات ProviderInfo للموفر(ين) التي ترغب في التقاط البيانات منها. لمعالجة البيانات المرتجعة من ETW، ستحتاج إلى تحديد دالة استدعاء (callback).
import etw
def some_func():
# define capture provider info
providers = [etw.ProviderInfo('Some Provider', etw.GUID("{11111111-1111-1111-1111-111111111111}"))]
# create instance of ETW and start capture
with etw.ETW(providers=providers, event_callback=etw.on_event_callback):
# run capture
etw.run('etw')
فيما يلي مثال على استخدام الوحدة لإجراء التقاط باستخدام دالة استدعاء مخصصة.
import time
import etw
def some_func():
# define capture provider info
providers = [etw.ProviderInfo('Some Provider', etw.GUID("{11111111-1111-1111-1111-111111111111}"))]
# create instance of ETW class
job = etw.ETW(providers=providers, event_callback=lambda x: print(x))
# start capture
job.start()
# wait some time
time.sleep(5)
# stop capture
job.stop()
يعد إنشاء فئات فرعية طريقة أخرى مفيدة لتعريف فئات التقاط ETW.
import time
import etw
class MyETW(etw.ETW):
def __init__(self, event_callback):
# define capture provider info
providers = [etw.ProviderInfo('Some Provider', etw.GUID("{11111111-1111-1111-1111-111111111111}"))]
super().__init__(providers=providers, event_callback=event_callback)
def start(self):
# do pre-capture setup
self.do_capture_setup()
super().start()
def stop(self):
super().stop()
# do post-capture teardown
self.do_capture_teardown()
def do_capture_setup(self):
# do whatever setup for capture here
pass
def do_capture_teardown(self):
# do whatever for capture teardown here
pass
def my_capture():
# instantiate class
capture = MyETW(lambda x: print(x))
# start capture
capture.start()
# wait some time to capture data
time.sleep(5)
# stop capture
capture.stop()
لمزيد من الأمثلة، راجع examples.