بسم الله الرحمن الرحيم.
في هذا المقال، سوف نحل التحدي الأول من تحديات Flare-On (2015). سنعتمد كما هو معتاد على منهجية التعلم بالممارسة (Learning-by-Doing) ونهج التعلم في الوقت المناسب (Just-in-Time Learning).
1. تحميل التحدي وتشغيله
أولاً، نقوم بتحميل التحدي من الموقع الرسمي: flare-on.com
كلمة سر الملفات: flare.
بدايةً، نقوم بتشغيل الملف الظاهر أمامنا:
شكل (1): تشغيل الملف لأول مرة
نقوم بنسخ المسار المحدد الذي سنضع فيه ملف التحدي:
شكل (2): نسخ مسار ملف التحدي
يظهر ملف التحدي باسم: i_am_happy_you_are_to_playing_the_flareon_challenge.
نقوم بفحص الملف بأداة Detect It Easy (DIE):
شكل (3): معلومات الملف كما تظهرها أداة DIE
كما يظهر في الصورة، الملف من نوع PE32 ولغة البرمجة هي x86 Assembly.
2. أول تشغيل وملاحظة السلوك
جميل، لنقم بتشغيل البرنامج:
شكل (4): تشغيل البرنامج
حسناً، إنه ملف Console (DOS) وليس بواجهة رسومية. لنجرب أن نكتب أي شيء:
عندما نقوم بكتابة أي شيء، يتم إغلاق نافذة الـ CMD فوراً. السبب: البرنامج ينفذ بسرعة كبيرة ويُغلق في نفس اللحظة.
لذلك، نقوم بفتح الـ CMD بأنفسنا، ننتقل إلى مسار البرنامج، ونقوم بتشغيله فقط عبر كتابة اسم البرنامج، ثم نعيد تجربة كتابة أي شيء:
شكل (5): تشغيل البرنامج من نافذة CMD
تظهر رسالة خطأ: you are failure.
3. استعراض النصوص (Strings)
رائع، معناها أن البرنامج يحتوي حتى الآن على نصّين (Strings):
Enter the passwordyou are failure
وبالتأكيد هناك نص ثالث يدل على أن كلمة السر التي أدخلناها صحيحة.
لنفتح الملف بأداة IDA Pro ونقوم بتحليل ساكن (Static Analysis) له:
شكل (6): فتح الملف داخل IDA Pro
نقوم بفتح نافذة النصوص (Strings) بالضغط على SHIFT + F12:
شكل (7): نافذة النصوص (Strings Window)
هنا ظهرت جميع النصوص التي يحتوي عليها البرنامج. لندقق في النص الذي يدل على أن الكلمة صحيحة: you are success.
4. تتبع المراجع (Xrefs)
نقوم بالنقر نقراً مزدوجاً على نص Enter the password، فينقلنا IDA إلى الواجهة التالية:
شكل (8): موقع نص Enter the password في التفكيك
كما ظاهر أمامنا، نرى نصّي الصحة والخطأ، ويبدو أن هناك مصفوفة (Array) وكما هو متوقع تكون هي كلمة السر. ولكن نلاحظ أن IDA لا يتعرف على كامل المحارف — لذلك غالباً يوجد تشفير بسيط.
الآن، نقوم بالنقر على النص aYouAreSuccess:
شكل (9): النص aYouAreSuccess
ثم نضغط على X لتظهر لنا نافذة المراجع المتقاطعة (Xrefs):
شكل (10): نافذة الـ Xrefs
نضغط OK، فيرسلنا IDA إلى الدالة: loc_40104D:
شكل (11): دالة التحقق loc_40104D
5. تحليل الخوارزمية
كما هو واضح، يتم نقل المصفوفة التي يدخلها المستخدم — byte_402158 — إلى المسجل al، ثم يُطبَّق عليها عملية تشفير XOR بسيطة مع الرقم 0x7D، ويتم مقارنة الناتج مع المصفوفة التي ظهرت معنا سابقاً: byte_402140.
نقوم بالنقر مرتين على المصفوفة byte_402140:
شكل (12): بيانات المصفوفة byte_402140
نقوم بنسخ بيانات المصفوفة بالكامل، ونستعين بأي نموذج ذكاء اصطناعي لإجراء عملية XOR بقيمة 0x7D مع بيانات المصفوفة، فيظهر لدينا نص واضح:
bunny_sl0pe@flare-on.com
نقوم بتجربته:
شكل (13): التحقق من صحة كلمة السر
وهكذا نكون تمكنا من حل التحدي بالكامل، ونستمر إن شاء الله.