العودة إلى التحديثات
New releaseSep 1, 2026

DLLHijackHunter v2.4.0

اكتشاف اختطاف DLL الآلي، والتحقق منه، والتأكيد عليه. تحويل الأخطاء المحلية في التهيئة إلى مسارات هجوم مؤكدة ومسلحة.

مشاركة

DLLHijackHunter

بواسطة ProjectMerai

اكتشاف وتحقق وتأكيد آلي لاختطاف DLL على Windows
من "قد تكون هذه الـ DLL قابلة للاختطاف" إلى "يمكن لمستخدم عادي أن يجعل SYSTEM يحمّل هذه — وهذا هو الدليل."


المحتويات


نظرة عامة

يكتشف DLLHijackHunter فرص اختطاف DLL على مضيف Windows ويعمل على إثباتها، لا مجرد سردها. وهو:

  1. يكتشف كل موضع يُطلق فيه ملف تنفيذي تلقائيًا — الخدمات، والمهام المجدولة، ومفاتيح Run، ومجلدات Startup، وخوادم COM، وDLLs الخاصة بـ AppInit/AppCert، وإدخالات IFEO، والملفات التنفيذية لـ UAC ذاتية الرفع — ويحسب أين سيُبحث عن كل DLL مستوردة.
  2. يستبعد المواضع التي لا يستطيع المهاجم استخدامها فعليًا: مجموعات API، وKnownDLLs، والمجلدات التي لا يستطيع المستخدم العادي الكتابة فيها، والعمليات المحمية، وغير ذلك.
  3. يتحقق (اختياريًا) باستخدام محمّل Windows الحقيقي، عبر وضع DLL فحص غير ضار والتحقق من أي نسخة تفوز في البحث.
  4. يؤكد (اختياريًا) عبر نشر DLL كاناري غير ضار، وتشغيل الخدمة/المهمة/كائن COM، وتسجيل الهوية التي عمل بها فعليًا.
  5. يقيّم ويبلّغ عن كل نتيجة حسب الثقة والأثر، ويربط النتائج في سلاسل هجوم (على سبيل المثال مستخدم عادي → SYSTEM).

يُتخذ كل حكم من وجهة نظر المهاجم — مستخدم عادي غير مميز — بغض النظر عما إذا كان الماسح نفسه يعمل بصلاحيات مرتفعة. فالتشغيل كمسؤول يمنح الأداة رؤية أكبر (ETW، والكاناري، ومحفزات الخدمات)؛ لكنه لا يجعل المجلدات المحمية تبدو قابلة للكتابة ولا يضخّم الامتياز المكتسب.


البدء السريع

نزّل أو ابنِ DLLHijackHunter.exe (مكتفٍ ذاتيًا؛ لا حاجة لتثبيت .NET)، ثم من موجه مرتفع الصلاحيات:

# Passive, read-only triage: no file drops, no service/task starts
.\DLLHijackHunter.exe --profile safe

# Full static analysis without touching the system, JSON report
.\DLLHijackHunter.exe --profile aggressive --no-canary --no-etw -o report.json

# Static analysis + real-loader verification (writes probe DLLs transiently)
.\DLLHijackHunter.exe --profile aggressive --no-canary --no-etw --verify-load -o report.html

# Everything, including ETW and canary confirmation — lab / authorised targets only
.\DLLHijackHunter.exe --profile aggressive -o report.html

# Focus on one application
.\DLLHijackHunter.exe --target "C:\Program Files\MyApp\app.exe" --no-canary

مكافح الفيروسات: ملفات DLL الخاصة بالـ canary والـ probe غير موقّعة وتتصرف مثل حِمولات الاختطاف، لذا قد يضعها Microsoft Defender في الحجر الصحي. تكتشف الأداة ذلك وتُبلّغ عن تلك النتائج على أنها غير حاسمة بدلاً من "غير قابلة للاختطاف". على جهاز اختبار، استبعد الدلائل المستهدفة و%ProgramData%\DLLHijackHunter للحصول على نتائج قاطعة.


كيف يعمل

flowchart TB
    subgraph S1["1 · Discovery"]
        direction LR
        EN["Launch points<br/>services · tasks · Run keys<br/>startup · COM · AutoElevate"] --> PE["PE analysis<br/>imports · delay loads<br/>manifest"] --> SO["Search order<br/>identity-aware PATH"]
        ETW["ETW runtime trace<br/>optional, elevated"]
    end
    subgraph S2["2 · Filter pipeline"]
        direction LR
        HG["Hard gates<br/>API sets · KnownDLLs<br/>writability"] --> SG["Soft gates<br/>manifest · privilege<br/>PPL · LoadLibraryEx"] --> DD["Dedup and<br/>profile filters"]
    end
    subgraph S3["3 · Verification (optional)"]
        direction LR
        LP["Load probe<br/>real Windows loader"] --> CN["Canary<br/>deploy, trigger, confirm"]
    end
    subgraph S4["4 · Output"]
        direction LR
        SC["Scoring and tiers"] --> AC["Attack chains"] --> RP["Console · JSON · HTML"]
    end
    S1 --> S2 --> S3 --> S4
المرحلةتتطلب صلاحيات المسؤولتعدّل النظام
الاكتشاف الساكن + المرشّحاتلا (المسؤول يرى المزيد)لا
اكتشاف وقت التشغيل عبر ETWنعميبدأ خدمات التشغيل التلقائي (حتى 100) ويشغّل المهام المجدولة (حتى 30) لإحداث تحميل DLL
فحص التحميل (--verify-load)لايكتب مؤقتًا ملف DLL فحصًا حميدًا في كل موضع مرشّح، ثم يحذفه ويستعيد أي ملف أصلي
تأكيد الكنارينعميكتب ملف DLL كناري، ويوقف/يشغّل الخدمات، ويشغّل المهام، وينشّط كائنات COM، ثم ينظّف

ما الذي يكتشفه

أنواع الاختطاف

النوعما يعنيهملاحظات
الشبح (Phantom)ملف DLL غير موجود في أي مكان ضمن مسار البحثازرعه في أي مكان يبحث فيه الملف التنفيذي
ترتيب البحثيُبحث في مجلد قابل للكتابة قبل النسخة الشرعيةيشمل الكتابة فوق ملف DLL في مجلد قابل للكتابة
ENV PATHيُبحث في مجلد قابل للكتابة ضمن PATH عن ملف DLL مفقودتُقيَّم الخدمات مقابل PATH الخاص بالجهاز فقط — لا تُبحث أبدًا إدخالات PATH الخاصة بالمستخدم من قِبل خدمة
إعادة توجيه .localإعادة توجيه <app>.exe.local\<dll>يُبلَّغ عنه فقط للملفات التنفيذية بدون بيان (manifest) (أو عندما يكون IFEO DevOverrideEnable=1)؛ يتجاهل المُحمِّل .local بخلاف ذلك، ولا يعيد توجيه KnownDLLs أبدًا
التحميل الجانبي (UAC)نسخ ملف EXE يرفع صلاحياته تلقائيًا بجوار ملف DLL مزروعفقط لملفات EXE التي تحتوي على <autoElevate>true</autoElevate> في بيانها. يتطلب الرفع التلقائي للصلاحيات موقعًا موثوقًا، لذا يجب أن تجتاز النسخة هذا الفحص (مثل مجلد وهمي C:\Windows \System32\)
AppInit DLLsيشير AppInit_DLLs إلى ملف DLL قابل للكتابةيُحمَّل في كل عملية تحمّل user32.dll
AppCert DLLsيشير AppCertDLLs إلى ملف DLL قابل للكتابةيُحمَّل في كل مستدعٍ لـ CreateProcess/WinExec

تُعدَّد ملفات IFEO Debugger وSilentProcessExit\MonitorProcess التنفيذية وتُحلَّل مثل أي نقطة تشغيل أخرى. لا تُنتَج حاليًا عمليات الاختطاف القائمة على CWD.

هوية تشغيل الهدف

الهوية الصحيحة تحدد كلاً من حكم تصعيد الصلاحيات ودرجة التأثير:

  • الخدمات — ObjectName (LocalSystem أو Local Service أو Network Service أو حساب)؛ كما تحلّل خدمات svchost ملف ServiceDll الخاص بها.
  • المهام المجدولة — هوية المهمة الرئيسية. تُعيَّن صيغ SID مثل S-1-5-18 إلى NT AUTHORITY\SYSTEM؛ وتعمل الهويات الجماعية بصفة العضو المسجّل الدخول (تُحتسب فقط Administrators + أعلى الصلاحيات كصلاحيات مرتفعة). تُحلَّل أيضًا الحمولات المغلفة في rundll32 أو cmd /c أو powershell -File.
  • مفاتيح Run / مجلدات Startup — تُعدَّد لـ كل ملف تعريف مستخدم محمّل (HKEY_USERS) ولكل مجلد Startup في كل ملف تعريف، وتُنسب إلى ذلك المستخدم — وليس فقط الحساب الذي يشغّل الفاحص.
  • COM — تتبع الخوادم خارج العملية AppID → RunAs / LocalService؛ وتعمل الخوادم داخل العملية بصفة العميل الذي يحمّلها.

قاعدة المعرفة وتسليح PATH

الفئات