Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
OWN-Defender — مشروع بحثي يعمل على الهندسة العكسية لواجهات COM الخاصة بمركز أمان Windows لتتبع تسجيل برامج مكافحة الفيروسات عبر ATL وvtable وWSCAPI وRPC، مع التحقق في وقت التشغيل عبر WMI. | Kitploit
أدوات/GitHubGitHub/nirvanaon/own-defender
أدوات دفاعيةالاستغلالالهندسة العكسيةتحليل الملفات الثنائيةالتعلم والتعليم
GitHubnirvanaon/own-defender

OWN-Defender

مشروع بحثي يعمل على الهندسة العكسية لواجهات COM الخاصة بمركز أمان Windows لتتبع تسجيل برامج مكافحة الفيروسات عبر ATL وvtable وWSCAPI وRPC، مع التحقق في وقت التشغيل عبر WMI.

عرض المستودع
36375منذ شهر واحدتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

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

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

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

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

OWN-Defender — بحث COM في مركز أمان Windows

OWN-Defender هو مشروع بحث أمني في Windows يركز على فهم كيفية قيام مركز أمان Windows (WSC) بتمثيل وإدارة منتجات الأمان المضادة للفيروسات من خلال واجهات COM الخاصة به.

بدأ المشروع كتحقيق في السلوك الذي أظهره DefendNot، ولكن بدلاً من التعامل مع التنفيذ الحالي كصندوق أسود، استخدمته كنقطة انطلاق للهندسة العكسية والتحقق المستقلين.

Screenshot 2026-08-26 111717

الهدف من هذا المشروع هو فهم مسار التنفيذ الكامل:

COM
 ↓
CLSID / IID
 ↓
CoCreateInstance
 ↓
QueryInterface
 ↓
ATL Interface Map
 ↓
vtable
 ↓
IWscAVStatus4
 ↓
CWscIsv
 ↓
WSCAPI.dll
 ↓
RPC
 ↓
Windows Security Center

تم تطوير المشروع واختباره في بيئة بحث Windows خاضعة للتحكم.

للاستخدام البحثي/التعليمي فقط

هذا المشروع مخصص لأبحاث داخل Windows، والهندسة العكسية، والتعليم الأمني، واختبارات الأمان المصرح بها. لا تستخدمه للتدخل في برامج الأمان على الأنظمة التي لا تملكها أو ليس لديك إذن صريح لاختبارها.


الدافع البحثي

كان السؤال الأولي بسيطًا:

كيف يعرف مركز أمان Windows أن منتج مكافحة الفيروسات موجود؟

بدلاً من التوقف عند توثيق واجهة برمجة التطبيقات العامة، أردت فهم ما يحدث تحت الواجهة.

أدى هذا إلى عدة أسئلة:

  • أي فئة COM تنفذ وظيفة WSC؟
  • أي IID يقابل واجهة مكافحة الفيروسات؟
  • كيف يحل QueryInterface() الواجهة؟
  • أين يتم تخزين الواجهة في خريطة واجهة ATL؟
  • لماذا يعرض IDA أحيانًا __int64 a1 فقط لطريقة ما؟
  • لماذا تحتوي واجهة C++ المعاد بناؤها على معاملات إضافية؟
  • أي دالة Register() هي فعليًا دالة تسجيل مكافحة الفيروسات؟
  • كيف يصل التسجيل في النهاية إلى مركز أمان Windows؟
  • أين تظهر حدود RPC؟
  • كيف يمكن التحقق من النتيجة بشكل مستقل؟

رحلة الهندسة العكسية

1. تحديد فئة COM

كانت الخطوة الأولى هي تحديد فئة COM الخاصة بمركز أمان Windows.

يستخدم المشروع فئة COM الخاصة بـ WSC:

CLSID_WscIsv
F2102C37-90C3-450C-B3F6-92BE1693BDF2

يحتوي التنفيذ أيضًا على منطق لتحديد موقع CLSID ديناميكيًا من سجل Windows بدلاً من الاعتماد حصريًا على قيمة ثابتة.

من الناحية المفاهيمية:

HKLM
 └── SOFTWARE
     └── Classes
         └── CLSID
             └── {CLSID}
                 └── Windows Security Center ISV API

قدم هذا أول علاقة مهمة:

Registry
   ↓
CLSID
   ↓
Windows Security Center ISV API

2. تحديد الواجهة الصحيحة

كان التحدي التالي هو تحديد واجهة COM التي يجب طلبها.

يستخدم المشروع:

IWscAVStatus4

مع:

4DCBAFAC-29BA-46B1-80FC-B8BDE3C0AE4D

كان أحد الدروس المهمة من البحث:

اسم GUID وحده ليس دليلاً كافيًا.

تحققت من العلاقة من خلال الهندسة العكسية بدلاً من افتراض أن اسم الواجهة وGUID صحيحان.

شمل التحقيق:

  • مراجع GUID
  • QueryInterface
  • خرائط واجهة ATL
  • _ATL_INTMAP_ENTRY
  • مواقع vtable
  • المراجع المتقاطعة
  • تطبيقات الدوال
  • سلوك وقت التشغيل

3. فهم QueryInterface

كانت إحدى أكثر خطوات الهندسة العكسية فائدة هي تتبع تنفيذ:

CComAggObject<CWscIsv>::QueryInterface()

الذي يصل في النهاية إلى:

ATL::CComObjectRootBase::InternalQueryInterface()

تُستخدم خريطة واجهة ATL لمقارنة IID المطلوب مع إدخالات الواجهة المسجلة.

من الناحية المفاهيمية:

Requested IID
     ↓
QueryInterface()
     ↓
InternalQueryInterface()
     ↓
ATL Interface Map
     ↓
GUID comparison
     ↓
Matching interface
     ↓
Interface pointer

قدم هذا دليلاً مستقلاً على أن GUID قيد التحقيق يتوافق فعليًا مع واجهة COM المتوقعة.


4. ارتباك Register()

كان أحد أكبر تحديات الهندسة العكسية هو فهم سبب عدم عرض IDA/Ghidra دائمًا لتوقيع الطريقة الذي توقعته.

تحتوي الواجهة المعاد بناؤها على:

virtual HRESULT __stdcall Register(
    BSTR path,
    BSTR name,
    unsigned int,
    unsigned int
) = 0;

ومع ذلك، يمكن أن يعرض المفكك تنفيذًا مثل:

_IWscAVStatus4<CWscIsv>::Register(__int64 a1)

في البداية بدا هذا غير متسق.

أظهر التحقيق الإضافي أن تمثيل المفكك كان يصف غلافًا/كعبًا والاستدعاء غير المباشر الأساسي عبر vtable بدلاً من تقديم توقيع الواجهة المنطقي الكامل.

أصبح هذا درسًا مهمًا:

مخرجات المفكك هي تفسير لرمز الآلة، وليست الحقيقة الأصلية على مستوى المصدر.

لحل هذه التناقضات، قارنت:

COM interface definition
        ↓
vtable layout
        ↓
assembly
        ↓
wrapper/thunk
        ↓
calling convention
        ↓
actual target function

5. دوال Register() المتعددة

كان مصدر ارتباك آخر هو وجود دوال متعددة بأسماء مثل:

IWscAVStatus2::Register
IWscAVStatus4::Register
IWscFWStatus2::Register
RegisterAV

كان الإدراك المهم أن الأسماء المتشابهة لا تعني واجهات متطابقة.

على سبيل المثال:

AV
 ↓
IWscAVStatus4
 ↓
AV registration

بينما:

Firewall
 ↓
IWscFWStatus2
 ↓
Firewall registration

كان يجب التحقق من رقم الواجهة والتنفيذ المحيط بها بدلاً من اختيار دالة لمجرد أن اسمها يحتوي على Register.

كان هذا من أكثر الأجزاء فائدة في البحث لأنه أجبرني على الربط بين:

Interface
+
IID
+
vtable
+
implementation
+
parameter layout
+
call target

6. تتبع مسار التسجيل

بعد تحديد الواجهة الصحيحة، تتبعت عملية التسجيل أعمق داخل الملف الثنائي.

كان المسار الملاحظ تقريبًا:

IWscAVStatus4::Register()
        ↓
CWscIsv
        ↓
RegisterSecurityProductFunction
        ↓
wscRegisterSecurityProduct()
        ↓
WSCAPI.dll
        ↓
s_wscRegisterSecurityProduct()
        ↓
NdrClientCall3()
        ↓
RPC
        ↓
Windows Security Center

كان هذا مهمًا بشكل خاص لأن طريقة COM نفسها لم تكن العملية النهائية.

عبر الاستدعاء في النهاية حدود RPC.

غيّر ذلك طريقة رؤيتي للبنية:

COM
  ≠
final implementation

بدلاً من ذلك:

COM
 ↓
local implementation
 ↓
WSC API
 ↓
RPC client
 ↓
Windows component

7. فهم WSCAPI.dll

كانت الطبقة التالية هي WSCAPI.dll.

وصل المسار المعكوس هندسيًا إلى:

wscRegisterSecurityProduct()

الذي استدعى في النهاية:

s_wscRegisterSecurityProduct()

ثم:

NdrClientCall3()

كانت هذه هي النقطة التي انتقل فيها التحقيق من استدعاء COM عادي إلى بنية RPC في Windows.

ساعد فهم هذه الطبقة في تفسير سبب عدم إمكانية فهم السلوك بالكامل من خلال النظر فقط إلى DLL الأصلي لـ COM.


8. التحقق في وقت التشغيل

كان التحليل الثابت جزءًا واحدًا فقط من البحث.

بعد إعادة بناء الواجهة ومسار الاستدعاء ذي الصلة، أنشأت تنفيذي الخاضع للتحكم وقارنت السلوك الناتج مع مركز أمان Windows.

استخدمت معلومات مركز أمان Windows / WMI مثل:

ROOT\SecurityCenter2
    AntiVirusProduct

لمراقبة معلومات المنتج المسجل بشكل مستقل.

كانت عملية التحقق:

Reverse engineering
       ↓
Interface reconstruction
       ↓
Own implementation
       ↓
Runtime execution
       ↓
Windows Security Center
       ↓
WMI observation
       ↓
Compare results

سمح لي هذا بالتحقق من أن استنتاجات التحليل الثابت تتوافق مع سلوك Windows الملحوظ.


9. ما تعلمته

علّمني هذا المشروع أكثر بكثير من مجرد التفاعل مع واجهة COM واحدة.

COM

  • CLSID مقابل IID
  • تفعيل COM
  • CoCreateInstance
  • QueryInterface
  • عد المراجع
  • مؤشرات الواجهة
  • vtables
  • خرائط واجهة ATL

الهندسة العكسية

  • قيود مفكك IDA/Ghidra
  • تتبع المراجع المتقاطعة
  • تحديد GUIDs
  • إعادة بناء الواجهات
  • تحليل الأغلفة/الكعوب المولدة من المترجم
  • فهم استدعاءات vtable غير المباشرة
  • التحقق من اصطلاحات الاستدعاء

داخل Windows

  • مركز أمان Windows
  • واجهات مزود WSC
  • WSCAPI.dll
  • RPC في Windows
  • كعوب RPC المولدة بواسطة MIDL
  • NdrClientCall3
  • حالة منتج مركز الأمان

منهجية البحث

الأهم من ذلك، تعلمت تجنب الاعتماد على دليل واحد فقط.

بدلاً من ذلك:

Symbol
   ↓
Decompiler
   ↓
Assembly
   ↓
GUID
   ↓
Interface Map
   ↓
vtable
   ↓
Call Graph
   ↓
RPC
   ↓
Runtime Verification

كل طبقة تزيد الثقة في الاستنتاج.


بنية المشروع

يتكون تنفيذ البحث من مكونين رئيسيين.

تنزيل الأداة