
مجموعة EternalBlue المعاد بناؤها بلغة C/C++ والتي تتضمن: ثغرة MS17-010، كاشف ثغرة EternalBlue، كاشف DoublePulsar ورافع شيل كود و DLL لـ DoublePulsar
مجموعة أدوات EternalBlue أعيدت كتابتها بلغة C/C++ وتتضمن:



ثم تُمرر هذه القيم من Recvbuff[18] -> Recvbuff[22] من خلال دالة حساب مفتاح XOR الخاص بـ DoublePulsar، والتي تولد مفتاح XOR صحيحًا غير موقع يمكن استخدامه لتشفير شيل كود أو حمولة DLL التي سيتم تحميلها إلى DoublePulsar. تم اختباره على Windows 7 x64-bit.
لقطة شاشة نموذجية:

نفس المفتاح من ثنائي NSA الأصلي في FUZZBUNCH

DoublePulsar_structure_ping.cpp - يرسل هذا البرنامج 4 حزم SMB: حزمة مفاوضات واحدة، حزمة إعداد جلسة واحدة، حزمة اتصال شجرة واحدة، وحزمة Trans2 SESSION_SETUP. الفرق بين هذا و doublepulsar_check.cpp هو أن هذا يولد حزمة PING الخاصة بـ DoublePulsar باستخدام هيكل بدلاً من سلسلة SMB السداسية العشرية الثابتة التي استخرجتها من عينة Wannacry. فرق آخر هو أن هذا البرنامج يولد حزمة TreeConnect ديناميكيًا بدلاً من استخدام الحزمة الثابتة الموجودة في عينة Wannacry. ستخبرك حزمة ping المولدة في هذا البرنامج ما إذا كان DoublePulsar مثبتًا على الجهاز البعيد.
DoublePulsar_structure_exec.cpp - يرسل هذا البرنامج 5 حزم SMB: حزمة مفاوضات SMB واحدة، حزمة إعداد جلسة واحدة، حزمة اتصال شجرة واحدة، حزمة Ping من DoublePulsar Trans2 SESSION_SETUP، وحزمة تنفيذ من DoublePulsar Trans2 SESSION_SETUP. الفرق بين هذا و Doublepulsar_UploadShellcode.cpp هو أن هذا يولد حزمة تنفيذ DoublePulsar Trans2 باستخدام هيكل بدلاً من سلسلة SMB السداسية العشرية الثابتة التي استخرجتها من عينة Wannacry.
Doublepulsar_UploadDLL.cpp - هذا البرنامج مخصص لـ DLLs. يرسل هذا البرنامج 4 حزم SMB مع بيانات DLL في حزم SMB Trans2: حزمة مفاوضات واحدة، حزمة إعداد جلسة واحدة، حزمة اتصال شجرة واحدة، طلب Ping Trans2 SESSION_SETUP، وحزمة تنفيذ Trans2 SESSION_SETUP. تُرسل حزمة طلب Ping Trans2 SESSION_SETUP للحصول على توقيع SMB في حزمة استجابة Trans2 SESSION_SETUP. تتم معالجة هذا التوقيع من خلال حاسبة مفتاح XOR الخاص بـ DoublePulsar. ثم يقرأ البرنامج ملف DLL ويجمعه مع شيل كود نواة 64 بت وشيل كود مساحة المستخدم لتشغيل DLL، ويقوم بعملية XOR للمخزن المؤقت باستخدام مفتاح XOR الخاص بـ DoublePulsar الذي حسبناه من توقيع SMB. يتم إنشاء حزمة عن طريق تخصيص الذاكرة، ونسخ حزمة Trans2، وتحرير القيم اللازمة لعمل معاملة SMB (UserID، TreeID، TotalDataCount، DataCount، ByteCount)، ثم نسخ بيانات XOR (شيل كود النواة + DLL) إلى النهاية، والتكرار عبر ذلك بإرسالها بحجم حزمة إجمالي 4096 بايت في المرة الواحدة إلى DoublePulsar. الحجم الإجمالي للحزمة = 4178. 4096 بايت مخصصة للبيانات المشفرة بـ XOR. سيتم أيضًا تطبيق استخدام هياكل SMB و TRANSACTION2 في الإصدارات المستقبلية.
Doublepulsar_UploadShellcode.cpp - يرسل هذا البرنامج 5 حزم SMB: حزمة مفاوضات واحدة، حزمة إعداد جلسة واحدة، حزمة اتصال شجرة واحدة، حزمة Ping Trans2 SESSION_SETUP واحدة، وحزمة تنفيذ Trans2 SESSION_SETUP واحدة. تُرسل حزمة طلب Trans2 SESSION_SETUP للحصول على توقيع SMB في حزمة استجابة TRANS2 SESSION_SETUP. تتم معالجة هذا التوقيع من خلال حاسبة مفتاح XOR الخاص بـ DoublePulsar. ثم ينسخ البرنامج شيل كود النواة وشيل كود نموذجي من مخزن مؤقت، ويقوم بعملية XOR للمخزن المؤقت باستخدام مفتاح XOR الخاص بـ DoublePulsar الذي حسبناه من توقيع SMB. يتم إنشاء حزمة عن طريق تخصيص الذاكرة، ونسخ حزمة تنفيذ Trans2، وتحرير القيم اللازمة لعمل معاملة SMB (UserID، TreeID، TotalDataCount، DataCount، ByteCount)، ثم نسخ معاملات SESSION_SETUP و 4096 بايت من بيانات شيل كود المشفرة بـ XOR إلى النهاية، وإرسالها بحجم حزمة إجمالي 4178 بايت إلى DoublePulsar. الحجم الإجمالي للحزمة = 4178. سيكون طول NetBIOS 4174 لأن رأس NetBIOS لا يحسب نفسه للحجم. 12 بايت من هذه الحزمة مخصصة لمعاملات Doublepulsar SESSION_SETUP. 4096 بايت مخصصة للبيانات المشفرة بـ XOR. في إصدار مستقبلي، سيتم استخدام هياكل SMB و TRANSACTION2.
