
SHAREM هو إطار عمل لتحليل شيلكود، قادر على محاكاة أكثر من 45,000 من WinAPIs وجميع استدعاءات نظام Windows تقريباً. كما يحتوي على مفكك مخصص خاص به، مع العديد من الميزات المبتكرة، مثل القدرة على عرض التفكيك المُزيل للتعتيم لشيلكود مُشفر، أو دمج بيانات المحاكاة لتعزيز التفكيك.
مرحبًا بك في SHAREM!
تم تقديم SHAREM في مؤتمر DEFCON 31 تحت عنوان "Game-Changing Advances in Windows Shellcode Analysis" وفي معرض Black Hat USA Arsenal. وقد تم إتاحة إضافة Ghidra مصاحبة (بشكل منفصل) من Trellix، بإذن من Max Kersten. وبالتالي، يمكنك توسيع قدرات SHAREM إلى Ghidra، إذا رغبت في ذلك.
تهدف SHAREM إلى أن تكون الأداة النهائية لتحليل الشيلكود (shellcode) لنظام Windows، مع دعم لمحاكاة أكثر من 45,000 API من WinAPI، وجميع استدعاءات النظام (syscalls) في وضع المستخدم لنظام Windows تقريبًا، وتوفر SHAREM العديد من الميزات الجديدة. تحتوي SHAREM على محاكي (emulator)، ومفكك (disassembler)، وتصحيح أخطاء خالد (timeless debugging)، وإزالة التعتيم بالقوة الغاشمة (brute-force deobfuscation)، والعديد من الميزات الأخرى. يمكن لمحاكي SHAREM أيضًا عرض الهياكل الكاملة (أو حتى الهياكل داخل الهياكل) ويمكنه السماح للشيلكود المشفر بإزالة التعتيم عن نفسه. يقوم SHAREM بتسجيل المخرجات من جميع WinAPIs واستدعاءات النظام التي تم تحليلها، كما يقوم بتقسيمها إلى العديد من الفئات والفئات الفرعية. كما تسمح تغطية الكود الكاملة لـ SHAREM باكتشاف الوظائف غير القابلة للوصول.
يستطيع مفكك SHAREM دمج الوظائف المكتشفة في التفكيك، مع تسمية كل منها في المفكك. كما سيعرض SHAREM الشكل المفكوك للشيلكود المشفر في المفكك، لذلك لا حاجة لتصحيح أخطاء الشيلكود.
لقد أنشأنا ويكي SHAREM الذي يوفر بعض المعلومات الإرشادية حول استخدام SHAREM، على الرغم من وجود أجزاء وميزات كبيرة غير موثقة حاليًا. تم تطوير SHAREM على مدى عامين بمشاركة عدة أشخاص. يعتبر مفكك SHAREM أكثر دقة بشكل ملحوظ من مفككات الأكواد الرائدة. بالإضافة إلى ذلك، يمكن لـ SHAREM دمج بيانات المحاكاة في المفكك، مما يسمح بالحصول على تفكيك شبه خالٍ من الأخطاء.
يرجى العلم أنه نظرًا لأن SHAREM قد تم إطلاقها للتو، فإن التوثيق هنا قليل نسبيًا. سنقوم بتحديث GitHub بمزيد من المعلومات في الأسابيع القادمة أيضًا.
إذا كنت جديدًا على SHAREM، فلا تتردد في مشاهدة فيديو عرض توضيحي قصير، يعرض بعضًا من قدراتها. انقر على الصورة لعرض الفيديو التوضيحي:

مارس 2026: سيقوم SHAREM بتحميل ما يصل إلى 61 DLL عند بدء التشغيل، ولكن مع آخر تحديث، أصبح بإمكانه الآن دعم 369 DLL و45538 WinAPI فريدة. بالإضافة إلى ذلك، يتم تحميل ملفات DLL عند الحاجة. سيتم تحديث الميزات الداخلية لنظام Windows (مثل قوائم الوحدات، التوصيلات الأمامية، التوصيلات الخلفية، إلخ.) تلقائيًا إذا احتاج الأمر إلى تحميل أي DLL إضافية، على سبيل المثال عبر LoadLibraryA. كانت هناك العديد من التحديثات الأخرى لتحسين الوظائف. تم إجراء تغييرات للمساعدة في تبسيط بعض المشكلات التي تم الإبلاغ عنها بخصوص تحديات التثبيت.
22 مارس 2026: تم تحسين منطق الخروج من الحلقات بمزيد من الدقة. تمت إعادة كتابة واختبار الكثير من هذا. لا نوصي عمومًا بتغيير الإعدادات الافتراضية في config.cfg إذا قررت استخدام هذه الميزة.
2024/2025: يمكن لـ SHAREM اختياريًا توظيف الذكاء الاصطناعي لتحليل النتائج، باستخدام مفتاح OpenAI (يوفره المستخدم). لاحظ أن SHAREM تم إنشاؤها قبل التطورات الأخيرة في الذكاء الاصطناعي، واستخدامها للذكاء الاصطناعي يحدث فقط بعد اكتمال التحليل الأولي لـ SHAREM. يمكن لهذه الميزة الاختيارية أن تسمح لها بفحص ما تم اكتشافه وتطبيقه على إطار عمل MITRE ATT&CK وغير ذلك الكثير.
يتم تثبيت SHAREM كحزمة Python محلية، بحيث يمكننا الوصول إليها في مشاريع أخرى. يتيح ذلك استيراد أجزاء من SHAREM. وبالتالي، يجب تثبيتها كحزمة. ملاحظة: لقد سمعت تقارير عن بعض مشكلات التثبيت. التغييرات الأخيرة قد تصحح هذه المشكلة على أمل.
Git مطلوب لتثبيت sharem. يمكن تثبيته من https://git-scm.com/download/win. بعد التثبيت، أعد تشغيل الكمبيوتر واستمر في تثبيت SHAREM. Git هي لأتمتة تثبيت Windows SSDeep. يمكنك أيضًا القيام بذلك يدويًا وتعديل ملف .bat لاستبعاد SSDeep، إذا قمت بذلك بنفسك. التثبيت اليدوي يتجنب الحاجة إلى استخدام Git. ملاحظة: بالنسبة لنظام Windows، ننتقل إلى fork من SSDeep على حساب Bw3ll الذي يصحح بعض مشكلات التثبيت في الإصدار السابق. هذا الإصدار والإصدار السابق كانا wrappers لـ SSDeep.
قم بتشغيل ملف .bat. سيقوم باستدعاء ملف setup.py. اعتمادًا على كيفية استدعاء Python، قد تحتاج إلى استدعاء ملف .bat البديل أو حتى تعديله قليلاً، إذا كنت تستخدم شيئًا غير قياسي.
قم بتشغيل
py -m pip list أو python3 -m pip list للتحقق من تثبيت SHAREM محليًا كحزمة. يجب أن تكون مثبتة كحزمة لكي تعمل. ماذا يحدث إذا لم ترها؟ فهذا يعني أنها غير مثبتة كحزمة، ولن يعمل SHAREM. تأكد من استخدام ملف (ملفات) .bat، وذلك في موجه أوامر Windows من دليل المثبتات. إذا لم يعمل، ابحث عن أي رسائل خطأ. إذا وجدت، فحاول تصحيحها. قد تجربها عدة مرات. إذا لم يعمل ذلك أيضًا، فافتح مشكلة وحاول تضمين كل هذه المعلومات، حتى نتمكن من معرفة الخطأ. عادةً، لن تحتاج إلى ذلك، ولكن قد يحدث أحيانًا. إذا قمت بإلغاء تثبيتها مرة ثم قررت تثبيتها مرة أخرى، فمن المحتمل أن تحتاج إلى تشغيل برنامج التثبيت مرة أخرى. بمجرد رؤية sharem تظهر عند تشغيل py -m pip list، يمكنك التأكد من تثبيتها بشكل صحيح كحزمة محلية.
بعد تثبيت SHAREM، عند تشغيل الشيلكود لأول مرة، يجب أن تكون داخل مجلد sharem_cli. على سبيل المثال، عندما تكون في ذلك الدليل، يمكنك تشغيل py main.py -r32 shellcode.bin. لا يوجد شيلكود؟ لا بأس، يمكنك العثور على بعض العينات في مستودع عينات الشيلكود الذي أستضيفه في مستودع منفصل.
ملاحظة: في المرة الأولى التي تحاول فيها محاكاة شيلكود على Windows، سيحاول جمع DLLs الخاصة بـ Windows وتضخيمها. تبدأ هذه العملية تلقائيًا عند محاولة محاكاة شيلكود لأول مرة. سيقوم بنسخها، ونقل DLLs المنسوخة (التي تم تضخيمها لاحقًا) إلى دليل SHAREM. هناك خطوات إضافية، لكن هذه العملية الأولية بأكملها قد تستغرق عدة دقائق، أو حتى 10-15 دقيقة، إذا كان المعالج قديمًا جدًا. بعد الانتهاء، لا ينبغي أن تضطر إلى القيام بذلك مرة أخرى. يجب القيام بذلك بشكل منفصل لكل من الشيلكود 32 بت و64 بت. يمكنك التنقل إلى sharem/sharem/sharem/sharem/DLLs/x86 - ويجب أن ترى ملفات DLL تظهر ببطء. يتم أخذها من نظام التشغيل، وتعديلها لمحاكاة ما قد يفعله نظام التشغيل بها، وحفظها في هذا الدليل. سيكون هناك ما يزيد قليلاً عن 60 ملفًا. إذا رأيت حوالي هذا العدد من DLLs، ولا يتم حفظ أي DLLs إضافية، فهذا يعني أنها ربما توقفت فقط. فقط اضغط على Enter مرة أخرى. إذا فشل ذلك، ببساطة أعد التشغيل وحاول المحاكاة مرة أخرى. بمجرد حفظ DLLs، لا يجب أن تحتاج إلى القيام بذلك مرة أخرى؛ هي فقط المرة الأولى التي قد تستغرق وقتًا للانتظار، اعتمادًا على سرعة المعالج. يجب أن ترى نتائج المحاكاة عند الانتهاء، مثل تعداد مختلف WinAPIs أو استدعاءات نظام Windows.
إذا كان الملف ينتهي بـ .txt، فسيفترض أن الشيلكود هو تمثيل ASCII للنظام الست عشري (وليس ست عشريًا نقيًا)، وسيقوم بتفسيره على هذا النحو. يعمل هذا مع شيء موجود عبر الإنترنت. إذا كنت تستخدم تمثيل ASCII للنظام الست عشري، فإن انتهاء اسم الملف بـ .txt هو شرط.
chmod +x linux_installer.sh تفعيل صلاحية تنفيذ المثبتsudo ./linux_installer.sh تشغيل المثبتستحتاج إلى إضافة ملفات DLL الخاصة بـ Windows. لا نملك حاليًا هذه الملفات متاحة للتحميل المنفصل لمستخدمي Linux. في الوقت الحالي، سيحتاج المستخدمون إلى جمعها عن طريق تثبيتها عبر Windows. (ملاحظة: يجب تضخيم هذه DLLs بواسطة SHAREM. لا يمكن استخدام DLLs إذا لم يتم تضخيمها. معظمها، إن لم يكن كلها، ستفشل إذا لم يتم تضخيمها بالمقدار الصحيح.) لاحقًا، قد نوفرها كتحميل منفصل في الأسابيع القادمة. لكن في الوقت الحالي، يمكن للمستخدم اتباع خطوات Windows لتوليدها ونقلها إلى Linux، ووضعها في sharem\sharem\sharem\DLLs\x64 و sharem\sharem\sharem\DLLs\x86. ستحتاج أيضًا إلى ملفي foundDLLAddresses32.json و FoundDLLAddresses64.json، والتي يجب أن توضع في sharem\sharem\sharem .
أضاف SHAREM في عام 2024 دعمًا لـ OpenAI، حتى نتمكن من الاستفادة من الذكاء الاصطناعي لأتمتة بعض مهام التحليل. يمكن تفعيل ذلك عبر A من القائمة الرئيسية - "الاستفادة من الذكاء الاصطناعي." للقيام بذلك، يجب أن يكون لديك مفتاح OpenAI، وتريد وضعه في ملف config.cfg، الموجود في sharem/sharem/sharem/sharem/config.cfg. بالإضافة إلى ذلك، يجب محاكاة شيلكود قبل أن يسمح لك بالاستفادة من الذكاء الاصطناعي. حاليًا هذه هي الطريقة الوحيدة لاستخدام الذكاء الاصطناعي - لا يعمل بطريقة headless - ولكن إذا كان لدى شخص حاجة لذلك، يرجى فتح مشكلة، وسأضيف دعمًا لذلك، كخيار آخر يمكن اختياره عبر الإعدادات. إذا كنت قد قمت بالفعل بتثبيت SHAREM وحصلت على الإصدار المحدث، فقد ترغب في تثبيت OpenAI يدويًا، على سبيل المثال pip install openai. لقد أضفته إلى المتطلبات أيضًا لملف setup.py الذي يتم تفعيله عند تشغيل نصوص التثبيت الأولية.
سكريبت Ghidra الممتاز من Max Kersten كما تم عرضه في Black Hat و DEFCON في أغسطس 2023 يمكن العثور عليه هنا: https://github.com/advanced-threat-research/GhidraScripts/blob/main/Sharem.java بعض تعليمات Max موجودة هنا: https://github.com/advanced-threat-research/GhidraScripts/ هذا المكون الإضافي لـ Ghidra مقدم من Trellix! لا يزال مطلوبًا منك استخدام SHAREM. يقوم هذا السكريبت باستيعاب مخرجات JSON التي ينتجها SHAREM وتحويلها إلى تنسيق مفيد لـ Ghidra. يمكن معرفة المزيد عن Max نفسه على https://maxkersten.nl/.
يمكن العثور على التوثيق في ويكي SHAREM، الذي يوفر بعض المعلومات الإرشادية حول استخدام SHAREM، على الرغم من وجود أجزاء وميزات كبيرة غير موثقة حاليًا.
SHAREM هو إطار عمل قوي جدًا مع العديد من القدرات، بعضها موثق جيدًا، وبعضها غير موثق. سيعرض هذا القسم عددًا صغيرًا من تلك القدرات.
يمكن لـ SHAREM أن تأخذ شيلكود مشفرًا وتزيل تعتيمه من خلال المحاكاة. لا يقتصر الأمر على التقاط جميع معلومات WinAPI أو استدعاءات النظام فحسب، بل إذا اخترت عرضها في المفكك، فإنه يظهر لك الشكل المفكوك للشيلكود:

لا يمكن لـ SHAREM تعداد أكثر من 12,000+ دالة WinAPI فحسب، بل يمكنها أيضًا القيام بذلك مع جميع استدعاءات النظام في وضع المستخدم لنظام Windows تقريبًا. بالإضافة إلى ذلك، بالنسبة للبعض، تعرض معلومات عن الهياكل. بالنسبة لمن يتعاملون مع التسجيل (registry)، ستقوم باستخراج معلومات التسجيل وإضافتها إلى مدير التسجيل الخاص بنا:

لدى SHAREM أيضًا القدرة على تنزيل الملفات عبر UrldownloadToFileA، إذا كانت موجودة. يتم تنزيلها في ذاكرة المحاكي - وليس حفظها على القرص. إذا نجحت، ستلتقط التجزئة (hash). يوجد أيضًا نظام ملفات زائف محدود، وبالتالي يمكنك رؤية الارتباطات، مثل تنزيل ملف كشيء واحد وإعادة تسميته إلى شيء آخر. إذا لم يكن التنزيل المطلوب متاحًا، فسيتم محاكاته ببساطة كتنزيل ناجح. التنزيل المباشر هو خيار يمكن تمكينه أو تعطيله في الإعدادات

الدكتور برامويل بريزندين، أوستن بابكوك، جيك هينس، شيلبي فاندينهوك، ساشا ووكر، إيفان ريد، ديلان بارك، كيد بروست، جيمس تيت فورسيلا، ويليام لوشتي، هانتر ميرفي، وتاريك عبد المطلب.
هذا البحث وبعض المؤلفين المشاركين مدعومون من منحة وكالة الأمن القومي الأمريكية رقم H98230-20-1-0326.