
MD5-Monomorphic Shellcode Packer - جميع الحمولات لها نفس تجزئة MD5
════════════════════════════════════╦═══
╔═╦═╗ ╔═╗ ╔═╗ ╔═╗ ╔═╦═╗ ╔═╗ ╔══╔═╗ ╠═╗
═╩ ╩ ╩═╚═╝═╩ ╩═╚═╝═╩ ╩ ╩═╚═╝═╩ ╠═╝═╩ ╩═
════════════════════════════════╩═══════
By Retr0id
═══ MD5-Monomorphic Shellcode Packer ═══
USAGE: python3 monomorph.py input_file output_file [payload_file]
يقوم بتجميع ما يصل إلى 4 كيلوبايت من شيلكود مضغوط في ملف ثنائي قابل للتنفيذ، في وقت قريب من الفوري. سيكون لملف الإخراج دائمًا نفس تجزئة MD5: 3cebbe60d91ce760409bbe513593e401
حاليًا، يتم دعم Linux x86-64 فقط. سيكون من السهل نقل هذه التقنية إلى منصات أخرى، على الرغم من أن كل إصدار سينتهي بتجزئة MD5 مختلفة. سيكون من الممكن أيضًا استخدام ملف متعدد المنصات مثل APE.
مثال على الاستخدام:
$ python3 monomorph.py bin/monomorph.linux.x86-64.benign bin/monomorph.linux.x86-64.meterpreter sample_payloads/bin/linux.x64.meterpreter.bind_tcp.bin
سبق للآخرين استخدام تصادم واحد لتبديل الملف بين وضعي "جيد" و"شرير". يأخذ Monomorph هذا المفهوم إلى المستوى التالي.
لا يزال بعض الأشخاص يصرون على استخدام MD5 للإشارة إلى عينات الملفات، لأسباب مختلفة لا تبدو منطقية بالنسبة لي. إذا قام أي من هؤلاء الأشخاص بالتحقيق في كود معبأ باستخدام Monomorph، فسيصبحون في حيرة شديدة.
لكل بت نريد ترميزه، تم حساب كتلة MD5 متصادمة مسبقًا باستخدام FastColl. كما هو ملخص هنا، كل تصادم يمنحنا زوجًا من الكتل يمكننا استبداله دون تغيير تجزئة MD5 الإجمالية. يتحقق المحمل من أي كتلة تم اختيارها في وقت التشغيل، لفك تشفير البت.
لترميز 4 كيلوبايت من البيانات، نحتاج إلى إنشاء تصادمات بحجم 4*1024*8 (يستغرق ذلك بضع ساعات)، مما يستهلك 4 ميجابايت من المساحة في الملف النهائي.
لتسريع ذلك، أجريت بعض التعديلات الصغيرة على FastColl لجعله أسرع في الممارسة العملية، مما يمكنه من العمل بالتوازي. أنا متأكد من وجود طرق أكثر ذكاءً لتوزيعه، لكن طريقتي البسيطة هي تشغيل N من النسخ في وقت واحد وانتظار أول نسخة تكتمل، ثم قتل البقية.
بما أنني قمت بالفعل بالحساب المسبق، يمكن إعادة تكوين الحمولة في وقت قريب من الفوري. يتم تبديل حالة الكتل المحسوبة مسبقًا باستخدام تقنية نفذها Ange Albertini.
نعم. إنه ليس خفيًا على الإطلاق، ولا يحاول أن يكون كذلك. يمكنك اكتشاف كتل التصادم باستخدام detectcoll.