Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
STrace — A DTrace on Windows Reimplementation | Kitploit
أدوات/GitHubGitHub/mandiant/strace
Dynamic Code Analysis (DAST)Reverse EngineeringDebuggersMalware AnalysisIncident Response
GitHubmandiant/strace

STrace

A DTrace on Windows Reimplementation

عرض المستودع
37552منذ 2 أشهرتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

STrace

Steve's Tracer. إعادة تنفيذ لخطاف استدعاءات النظام (syscall) الخاص بـ DTrace على ويندوز. اعتبرها خطاف SSDT متوافقًا مع PatchGuard، لكن دون أي حيل. لا يدعم هذا SSSDT (واجهات win32k api)، لأن واجهات برمجة استدعاءات نظام DTrace نفسها لا تدعم هذا الجدول الإضافي. يمكن تتبع استدعاءات نواة Zw* بالإضافة إلى جميع استدعاءات نظام SSDT في وضع المستخدم.

يرجى قراءة ملف README هذا حتى النهاية إذا كنت تطور إضافات جديدة لـ STrace!

الوظائف

يدعم DTrace على ويندوز أنواعًا متعددة من المجسات. وتشمل هذه syscall وfbt وetw وprofile وربما المزيد. تعيد هذه النسخة تنفيذ نوعي المجسات syscall وetw فقط. جميع أنواع المجسات الأخرى تعتبر خارج نطاق هذا المشروع تمامًا، ولن تُدعم أبدًا. لا تتردد في عمل fork للمشروع إذا كنت ترغب في إضافة أنواع مجسات إضافية. اقتصر النطاق على مجسات syscall وetw فقط بسبب تعقيد أنواع المجسات الأخرى والأنظمة التي تمسها.

تتخلى هذه النسخة تمامًا عن لغة البرمجة النصية D (ملاحظة: ليست DLang، اللغة العصرية الأكثر انتشارًا). تعقيد وجود جهاز افتراضي (VM) داخل النواة، مثل تنفيذ DTrace الأصلي، غير مناسب لهذا المشروع. بدلاً من ذلك، تعرض هذه النسخة مباشرةً دوال استدعاء C (callbacks) اللازمة للاتصال بواجهات نواة ويندوز الخاصة بـ DTrace. لتمكين 'التحميل الساخن' (hot-loading) للبرامج النصية، استُخدم نظام إضافات قائم على DLL كبديل لبيئة الجهاز الافتراضي والبرمجة النصية في dtrace الأصلية. يقبل نظام الإضافات هذا ملف DLL 'عاديًا' خاصًا بوضع المستخدم دون أي فحوصات أمنية مفعلة أو تبعيات خارجية أخرى، ويقوم بتعيينه (map) يدويًا في مساحة عنوان النواة. يحتوي plugin dll على دوال تصدير (exports) يتم استدعاؤها عند حدوث استدعاءات kernel syscall. يتم حل واجهات برمجة النواة (Kernel APIs) عبر جدول الاستيراد العادي (IAT) لملف DLL؛ حيث ترتبط إضافات DLL بـ ntoskrnl.lib ثم يقوم برنامج التشغيل بحل هذه الواجهات في وقت التحميل، مما يسمح باستدعاء أي واجهات نظام داخل إضافات DLL بشكل طبيعي. أداء نظام الإضافات هذا ممتاز، لأن كودًا أصليًا (native code)، بدلاً من مفسّر نصوص أو JIT، يتم تنفيذه مباشرة بين دخول (ENTRY) استدعاء النظام وعودته (RETURN). يحسّن هذا التصميم الأداء مقارنةً بتنفيذ dtrace المقدم من مايكروسوفت.

إعداد الخطافات بسيط جدًا؛ تحصل على دالة لتسجيل/إلغاء تسجيل خطاف حسب اسم API، مع استدعاء قبلي (pre) وبعدي (post) لاستدعاء النظام. تمتلك دوال الاستدعاء وسائط وقيم إرجاع يمكن الوصول إليها كقيم للقراءة فقط. يمكن تزوير قيم الإرجاع في مجسات الإرجاع (return probes)، كما يمكن تعديل الوسائط في مجسات الدخول (entry probes)، لكن استدعاء النظام الأصلي لا يمكنه عادةً استبدال أو 'إلغاء' استدعاء النظام — تعمل هذه الواجهة كمراقب (observer). ومع ذلك، توجد ثغرة مشابهة لتلك الموثقة في (https://github.com/everdox/InfinityHook و https://github.com/everdox/InfinityHook/raw/master/resources/perf.png)، تسمح باستبدال مؤشر استدعاء النظام على المكدس (stack). باستخدام هذه الثغرة، يمكن استبدال استدعاء النظام بالكامل بمؤشر إلى دالة تتحكم فيها أنت بدلاً منه. عند حدوث الأحداث وتفعيل دالة استدعاء الخطاف الخاصة بك، يمكنك فعل ما تشاء. دوال الاستدعاء متزامنة (synchronous)، بمعنى أنه إذا أخّرت التنفيذ في دالة استدعاء الدخول، على سبيل المثال بالبقاء في حلقة while، فسيتم تأخير استدعاء النظام بنفس مقدار الوقت. يتم تنفيذ استدعاء النظام مباشرة بعد العودة من دالة استدعاء الدخول، وقبل الدخول مباشرة إلى دالة استدعاء الإرجاع. هذا النظام متوافق تمامًا مع PatchGuard، ومع ذلك يجب تعطيل DSE، لأن مايكروسوفت، للأسف، تعتبر هذا النوع من امتدادات النواة جزءًا من نواة NT، وبالتالي تتحقق من أن الموقّع الجذري (root signer) هو ويندوز. هذا لا يعمل مع الحيل مثل تفعيل موقّعي نواة مخصصين؛ يجب أن يكون DSE معطلاً حقًا أثناء إقلاع النواة.

root@kitploit:~
ValidationFlags=IMGP_LATEST_MS_ROOT_REQUIRED | IMGP_WINDOWS_ROOT_REQUIRED | IMGP_MS_SIGNATURE_REQUIRED 
Scenario=ImgSigningScenarioWindows

يتخلى برنامج التشغيل المكتوب بلغة Rust عن نظام الإضافات القائم على DLL المستخدم في برنامج التشغيل C++، ويحاول بدلاً من ذلك استخدام مفسّر web assembly لاستضافة نصوص wasm في نواة ويندوز. الهدف من ذلك هو أن يكون أقرب إلى تنفيذ dtrace الأصلي الذي يستخدم جهازًا افتراضيًا (VM)، لكن بلغة أفضل من DLang. يوفر هذا العزل (sandboxing) وفوائد رائعة أخرى. إثبات المفهوم (POC) مكتمل ويعمل، لكنه للأسف غير قابل للاستخدام بسبب مشاكل الأداء في تفسير WASM باستخدام WASMI. سيلزم وجود محرك wasm قائم على JIT ومتوافق مع نواة NT حتى يصبح هذا التصميم البديل قابلاً للعمل. إنه مضمّن كميزة جديدة ممتعة، وقد يكون قابلاً للاستخدام لشيء آخر مع بعض العمل.

تنظيم المشروع

ينقسم هذا المشروع إلى حد كبير بين مكوناته المكتوبة بلغة C++ وRust. برنامج التشغيل C مكتمل الميزات ويُفضَّل استخدامه. على المستوى العام، يتكون المشروع من المكونات التالية

  • برنامج تشغيل C++ مع إضافات قائمة على DLL
  • برنامج تشغيل Rust مع إضافات قائمة على نصوص wasm
  • إضافة C++ DLL لمراقبة حذف الملفات
  • إضافة C++ DLL لتسجيل جميع استدعاءات النظام والوسائط
  • إضافة نص Rust Wasm لاختبار إثبات المفهوم (POC) لـ wasm في نواة NT
  • أداة اختبار نصوص Rust Wasm لمحاكاة تنفيذ إضافات wasm في وضع المستخدم
  • محلّل رموز سجلات (log symbolicator) بلغة Rust لتحويل تتبعات مكدس برنامج تشغيل C++ إلى رموز. لا يستخدم DIA SDK

التثبيت والإعداد

إعداد Visual Studio مع DDK

  • ثبّت VS2022 + Windows SDK + Windows DDK. بهذا الترتيب، مع مطابقة أرقام إصدارات SDK وWDK. راجع https://learn.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk#download-icon-for-visual-studio-step-1-install-visual-studio-2022
  • غيّر إعدادات Windows SDK في مشروع برنامج تشغيل STrace إلى إصدار WDK المثبت. STrace->Properties->General->Windows SDK Version (رقم إصدار WDK لديك)

قم ببناء برنامج التشغيل وواجهة الأوامر (CLI)، وانقل الملفات إلى نفس مجلد البرنامج النصي، ثم شغّل البرنامج النصي powershell الموجود في مجلد التثبيت كمسؤول:

root@kitploit:~
./install_as_admin.ps1

أعد التشغيل، ثم حدد إدخال الإقلاع STrace، واضغط F8 (وليس Enter!) على هذه الشاشة:

f8

من المفترض أن تظهر هذه الشاشة، حدد الإقلاع مع تعطيل DSE:

DSE

بعد نجاح الإقلاع، يمكن استخدام CLI لتحميل وتفريغ إضافات DLL لبدء التتبع. يتم توفير إضافتين مثاليتين. راجع التفاصيل أدناه بالتفصيل إذا واجهت مشاكل. قد تحتاج إلى إعادة التشغيل مرة أخرى في المرة الأولى، وربما ضبط خدمة STrace يدويًا على التشغيل التلقائي at boot باستخدام أداة مثل process hacker.

تفاصيل التثبيت

التثبيت الأصلي لـ DTrace موجود هنا: https://techcommunity.microsoft.com/t5/windows-kernel-internals/dtrace-on-windows-20h1-updates/ba-p/1127929. يتطلب DTrace الأصلي تكوين Secure Boot (الإقلاع الآمن) والأمان المستند إلى الافتراضية (Virtualized Based Security)؛ وهذا ليس هو الحال مع STrace لأنه لا ينفذ أنواع المجسات (FBT) التي تتطلب هذه الميزات.

يقوم هذا المشروع بنفس عمليات المثبّت، لكن عبر برنامج نصي powershell بسيط بدلاً من MSI. العملية بسيطة. أولاً، انسخ ملف apiset dll إلى system32 حتى يتم تفعيل امتداد النواة. ثم ثبّت إدخال برنامج تشغيل بحيث يتم تنفيذ الدالة الرئيسية لبرنامج التشغيل عند بدء تشغيل النظام من أجل اتصالات وضع المستخدم. ملفات ApiSet dll موقّعة رقميًا، لذلك تم استخدام apiset الأصلي الخاص بمايكروسوفت، كما هو مطلوب. يتم توفير هذا الملف في صيغة ثنائية فقط، ولا يحتوي على أي منطق سوى توجيه استيراد الامتداد إلى برنامج التشغيل المنفذ: ext-ms-win-ntos-trace-l1-1-0 -> dtrace.sys. راجع https://www.geoffchappell.com/studies/windows/win32/apisetschema/index.htm (ApiSetSchemaExtensions) للحصول على تفاصيل حول هذه الآلية.

يتم تحميل STrace في وقت مبكر جدًا أثناء تهيئة النواة؛ تمكين Test Signing في قاعدة بيانات إعدادات الإقلاع (BCD) ليس كافيًا. يجب تعطيل فرض توقيع برامج التشغيل (DSE) حتى يتم تحميل STrace بنجاح، ويجب القيام بذلك يدويًا في كل إقلاع. لتسهيل ذلك، ينشئ برنامج التثبيت النصي إدخال قائمة إقلاع سهلًا ليختاره المستخدم. لا توجد علامة BCD تسمح بتعطيل DSE بشكل دائم عبر عمليات إعادة التشغيل؛ النواة تمنع ذلك تحديدًا.

نسيان تعطيل DSE عند الإقلاع سيقودك إلى قائمة الإصلاح التلقائي (Automatic Repair) عند إعادة التشغيل. يمكنك المحاولة مرة أخرى دون ضرر؛ إذا استمر فشل الإقلاع، فستحتاج إلى إزالة برنامج تشغيل STrace يدويًا من مجلد برامج التشغيل. كن على علم أن فشل الإقلاع يمكن أن يتسبب في تعطيل علامة التشغيل التلقائي لخدمة STrace بواسطة ويندوز*، وقد تحتاج إلى إعادة ضبطها على التشغيل التلقائي إذا حدث فشل إقلاع في أي وقت.

الإضافات

لتطوير إضافاتك الخاصة، من الأفضل استخدام إحدى الإضافات الموجودة كمشروع أساسي. تم إعداد مشاريع visual studio بالعديد من الإعدادات المحددة جدًا لتوليد ملفات ثنائية مستقلة (free standing) بدون أي تبعيات. الإعدادات غير الافتراضية كثيرة جدًا بحيث لا يمكن سردها، لذا ببساطة انسخ أحد المشاريع وعدّل الكود لإضافة منطقك الخاص بدلاً من ذلك (https://stackoverflow.com/questions/884255/visual-studio-copy-project). إذا أنشأت إضافة مفيدة، يرجى تقديم طلب سحب (PR) ! كلما زاد عدد الإضافات المطورة، أصبح هذا النظام أكثر فائدة للجميع!

تنزيل الأداة