التّحديّ: حلّ مسابقة اكسر الكود

بعد أن تلقيت إجابتين صحيحتين قررت أن أضع حل الcrackme

أول واحد وجد الهاش كان الأخ h4ck3r#47 و يليه الأخ حاتم. الطريقتان اللتان إستخدماهها تقريبا متماثلتان لكن الأخ حاتم إقترح طريقة مثالية.
في هذه التدوينة سنقوم بشرح طريقتين لحل ال.crackme

الأولى هي طريقة الإخوة المشاركين أما الثانية فهي طريقة بسيطة و سريعة كذلك.

الطريقة الأولى:

– أول خطوة فحص الهدف: نلاحظ أنه عندنا نافذة Dialog بسيطة تحتوي على TextField من خلال هذه المعلومة سنقوم بالبحث عن الدالة المستخدمة في إلتقاط كلمة السر.

بإستخدام برنامج OllyDbg سنستعرض الدوال المستخدمة من طرف الملف s4a_cm1.exe

نضغط Ctrl+N لإستعراض الدوال (view names) فنلاحظ الدالة المطلوبة:

[cc lang=”c”]Names in s4a_cm1, item 30
Address=00406268
Section=.idata
Type=Import  (Known)
Name=USER32.GetWindowTextA[/cc]

الآن يجب معرفة من أين تم طلب الدالة يعني من أي عنوان تم عمل الCall  و هذا من خلال find reference to import

[cc lang=”c”]00401ABB CALL JMP.USER32.GetWindowTextA

00401DD8   JMP DWORD PTR DS:USER32.GetWindowTextA[/cc]

العنوان الأول هو المعني بالأمر لهذا سنضع نقطة توقف عند العنوان 00401ABB.

ندخل أي سلسلة حرفية  و سنصل عند نقطة التوقف و نبدأ في التتبع و سنلاحظ أن هناك كلمة “[email protected]

و سيتم عمل increment للحرف الأول الثالث و الخامس وبالتالي ستتشكل كلمة Sec4Arb و التي هي الكلمة المطلوبة.

[cc lang=”c”]00401AC9   . FE05 2E504000  INC BYTE PTR DS:[40502E]                 ; |
00401ACF   . FE05 30504000  INC BYTE PTR DS:[405030]                 ; |
00401AD5   . 80BD E8FEFFFF  CMP BYTE PTR SS:[EBP-118],0              ; |
00401ADC   . 74 19          JE SHORT s4a_cm1.00401AF7                ; |
00401ADE   . 893424         MOV DWORD PTR SS:[ESP],ESI               ; |
00401AE1   . B8 2C504000    MOV EAX,s4a_cm1.0040502C                 ; |ASCII “Sec4Arb”[/cc]

يمكنكم مشاهدة فيديو الأخ h4ck3r#47 لعمل تطبيق لحل الcrackme

http://www.mediafire.com/?ggvznoegtit

الطريقة الثانية:

عند ملاحظتنا للدوال المستخدمة من طرف الملف نلاحظ أن هناك طلب للدالة strcmp

[cc lang=”c”]Names in s4a_cm1, item 54
Address=0040623C
Section=.idata
Type=Import  (Known)
Name=msvcrt.strcmp
[/cc]

أول ما سنفكر فيه هو أنه هذه الدالة ستقوم بمقارنة الكلمة التي أدخلناها بالكلمة المطلوبة لذا نضع نقطة توقف عند أمر call

[cc lang=”c”]References in s4a_cm1:.text to msvcrt.strcmp
00401AEA   CALL JMP.msvcrt.strcmp
004024F8   JMP DWORD PTR DS:[msvcrt.strcmp] [/cc]

عند الوصول إلى نقطة التوقف سيكون الparameters الخاصة بالدالة strcmp و التي هي

الكلمة التي أدخلنها و الكلمة المطلوبة موجودة في المكدس

[cc lang=”c”]0022FA44   0022FA84  |s1 = “11111111111111111”
0022FA48   0040502C  \s2 = “Sec4Arb”[/cc]

مباشرة عرفنا الكلمة المطلوبة.

نبذة عن الكاتب

زكريّا. طالب جامعي، تخصص علوم الحاسب، باحث مهتم في فحص و إكتشاف الثغرات.

التعليقات:

أضف تعليقاً | عدد التعليقات: (5)

  1. يقول بشار:

    أخي زكريّا … في البداية اعتذر لتأخّري في الرّد على مشاركتك.

    مشكور أخي العزيز على طرح هذه المسابقة المفيدة والرّائعة.

    وتهانينا للأخوة h4ck3r#47 وحاتم.

  2. يقول Hit-Man:

    شكرا لكم أخي h4ck3r#47 وحاتم

  3. يقول 020:

    رائع جدا وان شاء الله ا”لأفادة للجيمع”

    وبأنتظار تحدي جديد ,,

    في امان الله و رعايته ,,

  4. يقول jago-dz:

    hacker assembler

    بتكون أفظل في الاستعراض

  5. يقول Dr.NaNo:

    عمل رائع وإن شاء الله الجميع يستفيد منه.

    وبالتوفيق للجميع.

أكتب تعليق