
أداة فك تغليف ديناميكية
Shinigami هي أداة تجريبية مصممة لكشف وفك تغليف الزرعات الخبيثة (malware implants) التي يتم حقنها عبر تفريغ العملية (process hollowing) أو إجراءات التغليف العامة (generic packer routines).
تعمل الأداة عن طريق ربط (hooking) دوال NT المتعلقة بتفريغ العملية (Process Hollowing) ووضع علامة حارس الصفحة (page guard bit) على صفحات الذاكرة القابلة للتنفيذ الجديدة. تتيح هذه التقنية لـ Shinigami اكتشاف تغيّرات تدفق التنفيذ غير المباشرة، التي تسببها عادةً شيفرة القشرة (shellcode) أو الكود المفكوك التغليف، والتي غالبًا ما تدل على وجود برمجيات خبيثة. يُنشئ Shinigami الملف التنفيذي الهدف في حالة معلّقة (suspended) ويحقن مكتبة DLL تُسمى "Ichigo". تقوم هذه المكتبة تلقائيًا بربط جميع الدوال الضرورية لاكتشاف الزرعة واستخراجها. وبمجرد استخراج الأثر (artefact) بالكامل، تقوم الأداة بقتل العملية.
مهم: هذه أداة فك تغليف ديناميكي ويجب عدم تشغيلها على جهازك الشخصي أو في مختبر التحليل الساكن (static analysis)
تعتمد الطريقة الأساسية لـ Shinigami في استخراج الزرعات المحقونة باستخدام تفريغ العملية على ربط دالّتين من دوال NT: NtResumeThread و NtWriteVirtualMemory. وإليك كيف تعمل:
ربط NtResumeThread
ربط NtWriteVirtualMemory
--stop-at-write.وحدة فك التغليف العامة في Shinigami تضع علامة بِت PAGE_GUARD على مناطق الذاكرة المخصصة حديثًا، وتطبّق هذا البِت أيضًا إذا تم استبدال حمايات أي منطقة ذاكرة موجودة بشيء قابل للتنفيذ. وباستخدام صفحات الحارس (guard pages)، يمكنها تتبّع منطقة الذاكرة التي سيُستخدم لتخصيص شيفرة قشرة أو صور PE.
لكل شيفرة قشرة يتم اكتشافها، يحفظ Shinigami شيفرة القشرة الخام نفسها على القرص. كما يقوم بفحص منطقة الذاكرة هذه للعثور على أي ملفات PE ويحفظها أيضًا. يتعامل Shinigami مع كل تنفيذ مختلف لشيفرة القشرة كمرحلة جديدة، ولهذا في النهاية، سيكون لديك في مجلد عملك ملفات باسم filename_shellcode_STAGENUM.bin or .exe.
توفر الأداة عدّة خيارات:
Usage: Shinigami [--help] [--version] [--output VAR] [--stop-at-write] [--verbose] [--only-executables] [--exported VAR] program_name
Positional arguments:
program_name Name of the program to execute
Optional arguments:
-h, --help shows help message and exits
-v, --version prints version information and exits
-o, --output Directory to dump artefacts
--stop-at-write Unhollow: Stop the execution when the PE file is being to be written
--verbose Display a verbose output
-p, --only-executables Only extract PE artefacts
-e, --exported Exported Function: Choose a exported function to execute if the target is a DLL (rundll will be used)
بعض الخيارات المهمة هي:
-o, --output: يحدد الدليل الذي سيتم فيه حفظ المستخرجات. افتراضيًا، سيتم حفظ المستخرجات في مجلد باسم output في مجلد العمل الحالي. يمكنك تحديد مجلد مختلف عن طريق تمرير مساره كوسيط.
--stop-at-write: تُستخدم هذه الوسيطة أثناء فك تغليف عملية مُفرَّغة. عندما يكتشف Shinigami أن ملف PE يُكتب في العملية المُفرَّغة، سيوقف التنفيذ ويحفظ ملف PE المستخرج. يمكن أن يكون هذا الخيار مفيدًا إذا أردت تجنّب تنفيذ العملية المُفرَّغة بالكامل واكتفيت باستخراج الكود المفكوك التغليف.
--verbose: يعرض مخرجات مفصّلة (verbose). يمكن أن يكون هذا مفيدًا لتصحيح الأخطاء أو لفهم الآليات الداخلية لـ Shinigami.
![]() |
|---|
| اختبار ضد Dridex |
بعد اكتمال الاستخراج، يتم قتل العملية وسيكون لديك (آمل ذلك) ملف PE المستخرج:
![]() |
|---|
| الزرعة المُفرَّغة |
سيتم تفريغ الزرعة المكتشفة وفق التنسيق الموضح في قسم طرق الكشف.
![]() |
|---|
| فك تغليف مُحمِّل عشوائي موصوف هنا |
في المثال أعلاه، اكتشف Shinigami تلقائيًا سلوك مُحمِّل عام واستخرج جميع شيفرات القشرة والصور المنفّذة داخله، دون الحاجة إلى أي مفاتيح خاصة لتفعيل أو تعطيل روتين فك التغليف. كان ذلك ممكنًا لأن Shinigami يشارك بعض الدوال مع وحدة إلغاء التفريغ، مستخدمًا خطافات (hooks) مشتركة مقدمة من مكتبة Gancho.
![]() |
|---|
| فك تغليف DLL الخاص بـ Emotet |
يدعم Shinigami أيضًا ملفات DLL ولديه القدرة على إعادة بناء الملفات الثنائية المحقونة باستخدام ترويسات DOS منفصلة (detached DOS headers). ومن الجدير بالذكر أن عينات البرمجيات الخبيثة مثل Emotet تستخدم هذه التقنية للتهرب من فاحصات PE في الذاكرة. يكتشف Shinigami هذه الأجزاء المفقودة (ترويسة DOS) ويستخدم استدلالات (heuristics) لإعادة بنائها.
احصل على نسختك المفضلة من صفحة الإصدارات.
سيكون من الرائع أن تساعد في هذا المشروع، لذا إن أردت، إليك التبعيات والخطوات:
يرجى فتح issue أو طلب سحب (pull request) لأي تغييرات ترغب في إجرائها.
صورة التميمة الرائعة هذه مستوحاة من Bleach وتم توليدها بواسطة Dall-E.