Kaspersky تفك غموض اللغة البرمجية التي كُتب بها تروجان Duqu
تم كشف الستار أخيراً عن اللغة البرمجية الغامضة التي ذكرت Kaspersky من فترة قريبة، أن أجزاء كثيرة من إطار عمل Duqu قد كتبت بها، هذا وقد دفع غموض الرماز البرمجي شركة Kaspersky إلى دعوة مجتمع المبرمجين إلى المساهمة بما لديهم من معلومات قد تفيد بمعرفة اللغة التي كتبت بها تلك الأجزاء من Duquتم كشف الستار أخيراً عن اللغة البرمجية الغامضة التي ذكرت Kaspersky من فترة قريبة، أن أجزاء كثيرة من إطار عمل Duqu قد كتبت بها، هذا وقد دفع غموض الرماز البرمجي شركة Kaspersky إلى دعوة مجتمع المبرمجين إلى المساهمة بما لديهم من معلومات قد تفيد بمعرفة اللغة التي كتبت بها تلك الأجزاء من Duqu. إقراء المقال السابق
بعد حصول Kaspersky على أكثر من 200 تعليق و 60 رسالة برريد إلكتروني حول اللغات وأطر العمل المحتمل أنه قد تم استخدامها في كتابة Duqu، تعود Kaspersky علينا بتدوينة بقلم Igor Soumenkov تقول فيها “شكراً جزيلاً!” لكل من ساهم بأي معلومات قد تفيد في تحديد الرماز الغامض. لنستعرض اللغات التي كانت الأكثر اقتراحاً من قبل المشاركين:
وبفضل بعض التعليقات المفيدة جدًا والتي تدل على خبرة كاتبيها، أمكن القول الآن، وبدرجة كبيرة من الوثوق بأن Kaspersky وجدت إجابتها المنشودة.
فيما يلي نقتبس بعض المشاركات التي ساعدت بحل هذا اللغز:
حصلت Kaspersky أيضاً على رسالتي بريد إلكتروني ملفتتين للانتباه، حيث اقترح كل من Pascal Bertrand المعروف بـ bps وكاتب آخر -فضل أن تبقى هويته غير معروفة- اقتراحا بأن الكود تمت كتابته بواسطة لغة كائنية التوجه، متفرعة عن لغة C، تدعى “OO C”. هذا وقد كانت التعليقات مهمة جدًا حيث ساعدت فريق Kaspersky على تتبع المترجم Compiler الذي تم استخدامه في المشروع: Microsoft Visual Studio compiler. ويقول Igor بأنه قضى بعض الوقت يقوم بتجربة نسخ مختلفة من MSVC compilers وشفرات برمجية مختلفة وخيارات ربط مختلفة، في محاولة منه لتوليد الرماز المصدري الخاص بالتابع الباني المذكور في تدوينته السابقة التي دعى فيها للمساعدة بمعرفة اللغة. الكود السابق، عند ترجمته باستخدام MSVC 2008 والخيارات /O1 (minimize size) /Ob1 (expand only __inline) يقوم بتوليد opcodes مطابقة للتي تمت مشاهدتها في النسخة التنفيذية من Duqu. ويضيف Igor بأنه في حال تم تغيير ترتيب العمليات وكُتل if/else فإن الكود الناتج سيختلف نوعًا ما عند استخدام MSVC 2005. لذلك يمكنهم القول وبدرجة عالية من الوثوق بأن اللغة المستخدمة كانت C وأنه تم استخدام MSVC 2008 مع الخيارات /O1 /Ob1. ما يعنيه هذا الكلام بشكل مختصر، أنه يوجد احتمالان للسؤال الأساسي:
ونظرًا للتشابه الكبير في التعليمات في التوابع البناءة والتوابع الأعضاء، أمكن الافتراض بأن الاحتمال الأول هو الأقرب للواقع. لكن لماذا OO C بدلاً من C++ ؟ بمناقشة الفكرة مع بعض الأشخاص الذين يفضلون هذه التقنيات، أمكن استخلاص سببين لهذا الأمر:
هذان السببان يقترحان بشكل غير مباشر أن الفريق المسؤول عن برمجة Duqu مؤلف من مبرمجين مخضرمين، يتبعون لنمط “المدرسة القديمة” في البرمجة. |