P01NT
Reverse-Engineering

Flare-On 2015: حل التحدي الأول

نحل أول تحدٍّ من تحديات Flare-On (2015): ملف x86 Assembly يعمل بواجهة DOS، تحليل ساكن عبر IDA Pro، وكسر خوارزمية تحقق بسيطة (XOR) لاستخراج كلمة السر.

· 3 دقائق قراءة · 466 كلمة  | الترجمات:
المحتويات

بسم الله الرحمن الرحيم.

في هذا المقال، سوف نحل التحدي الأول من تحديات 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):

نتيجة الفحص بأداة DIE شكل (3): معلومات الملف كما تظهرها أداة DIE

كما يظهر في الصورة، الملف من نوع PE32 ولغة البرمجة هي x86 Assembly.


2. أول تشغيل وملاحظة السلوك

جميل، لنقم بتشغيل البرنامج:

تشغيل البرنامج شكل (4): تشغيل البرنامج

حسناً، إنه ملف Console (DOS) وليس بواجهة رسومية. لنجرب أن نكتب أي شيء:

عندما نقوم بكتابة أي شيء، يتم إغلاق نافذة الـ CMD فوراً. السبب: البرنامج ينفذ بسرعة كبيرة ويُغلق في نفس اللحظة.

لذلك، نقوم بفتح الـ CMD بأنفسنا، ننتقل إلى مسار البرنامج، ونقوم بتشغيله فقط عبر كتابة اسم البرنامج، ثم نعيد تجربة كتابة أي شيء:

تشغيل البرنامج من الـ CMD شكل (5): تشغيل البرنامج من نافذة CMD

تظهر رسالة خطأ: you are failure.


3. استعراض النصوص (Strings)

رائع، معناها أن البرنامج يحتوي حتى الآن على نصّين (Strings):

  1. Enter the password
  2. you are failure

وبالتأكيد هناك نص ثالث يدل على أن كلمة السر التي أدخلناها صحيحة.

لنفتح الملف بأداة IDA Pro ونقوم بتحليل ساكن (Static Analysis) له:

فتح الملف في IDA Pro شكل (6): فتح الملف داخل IDA Pro

نقوم بفتح نافذة النصوص (Strings) بالضغط على SHIFT + F12:

نافذة النصوص في IDA شكل (7): نافذة النصوص (Strings Window)

هنا ظهرت جميع النصوص التي يحتوي عليها البرنامج. لندقق في النص الذي يدل على أن الكلمة صحيحة: you are success.


4. تتبع المراجع (Xrefs)

نقوم بالنقر نقراً مزدوجاً على نص Enter the password، فينقلنا IDA إلى الواجهة التالية:

موقع نص Enter the password شكل (8): موقع نص Enter the password في التفكيك

كما ظاهر أمامنا، نرى نصّي الصحة والخطأ، ويبدو أن هناك مصفوفة (Array) وكما هو متوقع تكون هي كلمة السر. ولكن نلاحظ أن IDA لا يتعرف على كامل المحارف — لذلك غالباً يوجد تشفير بسيط.

الآن، نقوم بالنقر على النص aYouAreSuccess:

النص aYouAreSuccess شكل (9): النص aYouAreSuccess

ثم نضغط على X لتظهر لنا نافذة المراجع المتقاطعة (Xrefs):

نافذة المراجع المتقاطعة شكل (10): نافذة الـ Xrefs

نضغط OK، فيرسلنا IDA إلى الدالة: loc_40104D:

الدالة loc_40104D شكل (11): دالة التحقق loc_40104D


5. تحليل الخوارزمية

كما هو واضح، يتم نقل المصفوفة التي يدخلها المستخدم — byte_402158 — إلى المسجل al، ثم يُطبَّق عليها عملية تشفير XOR بسيطة مع الرقم 0x7D، ويتم مقارنة الناتج مع المصفوفة التي ظهرت معنا سابقاً: byte_402140.

نقوم بالنقر مرتين على المصفوفة byte_402140:

المصفوفة byte_402140 شكل (12): بيانات المصفوفة byte_402140

نقوم بنسخ بيانات المصفوفة بالكامل، ونستعين بأي نموذج ذكاء اصطناعي لإجراء عملية XOR بقيمة 0x7D مع بيانات المصفوفة، فيظهر لدينا نص واضح:

bunny_sl0pe@flare-on.com

نقوم بتجربته:

تجربة كلمة السر الصحيحة شكل (13): التحقق من صحة كلمة السر

وهكذا نكون تمكنا من حل التحدي بالكامل، ونستمر إن شاء الله.