
سكربت IDA Python لفك التعتيم عن DLL الحاقن Astaroth/Guildma
سكربت IDA python لإزالة التعتيم عن DLL الحاقن Astaroth/Guildma
عند محاولة تحليل DLL الحاقن من حملة Astaroth/Guildma الأخيرة (بفضل هذا اليوميات من SANS ISC)، صادفت محاولة مزعجة حقاً للتعتيم.
يتم استدعاء دالة (أطلقت عليها time_waster_3000 في الصورة أدناه) أكثر من 1,000 مرة (!!!) عبر DLL. تأخذ هذه الدالة ست سلاسل نصية مكتوبة بثبات كوسائط، بالإضافة إلى word عشوائي. الدالة نفسها عبارة عن متاهة من العمليات الحسابية التي لا تخدم أي غرض عملي على حد علمي (بخلاف إضاعة وقت المحلل). إليك كيف يبدو DLLEntry مع تلك الاستدعاءات المزعجة:
الغرض من سكربت IDA python هذا هو إخفاء جميع كتل الكود التي تتضمن استدعاءً لهذه الدالة غير المفيدة، بالإضافة إلى وسائطها. إليك كيف يبدو DLLEntry بعد تشغيل السكربت:
يعمل السكربت عن طريق العثور على استدعاء لدالة الحشو، ممثلة بـ call sub_CHANGEME في السكربت. لذلك، تحتاج إلى إعادة تسميتها في السكربت باستخدام اسم الدالة الموجود في العينة التي تتعامل معها. على سبيل المثال، تغيير إلى .
idc.print_operand(x, 0) == 'sub_CHANGEME'idc.print_operand(x, 0) == 'sub_431000'اخترت التكرار على تعليمة call sub_CHANGEME بدلاً من التكرار على عمليات دفع الوسائط. السبب بسيط: السلاسل النصية المكتوبة بثبات موجودة في أماكن متعددة عبر الثنائي؛ لذا، عندما حاولت البحث عن تعليمات الدفع التي تتضمن عناوين تلك السلاسل، لم يعثر السكربت على جميع حالات هذه البيانات غير المفيدة.
كان السكربت يعمل سابقاً عن طريق إخفاء كل حالة من حالات تمرير الوسائط واستدعاء دالة الحشو ككتلة واحدة مطوية. وبما أن الدالة تُستدعى عدة مرات متتالية، فقد نتج عن ذلك مساحات فارغة ضخمة في عرض التفكيك. قمت بتحديثه لإخفاء الحالات المتتالية من هذا الحشو في كتلة واحدة مطوية واحدة، مما يحسّن readability حقاً.