التّحديّ: حلّ مسابقة اكسر الكود
الكاتب: زكريّا | يوم: 12 يوليو, 2010 | التعليقات: 5 | القراءات: - عدد المشاهدات 8٬256
بعد أن تلقيت إجابتين صحيحتين قررت أن أضع حل ال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.
ندخل أي سلسلة حرفية و سنصل عند نقطة التوقف و نبدأ في التتبع و سنلاحظ أن هناك كلمة “Reb4@rb”
و سيتم عمل 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)
أخي زكريّا … في البداية اعتذر لتأخّري في الرّد على مشاركتك.
مشكور أخي العزيز على طرح هذه المسابقة المفيدة والرّائعة.
وتهانينا للأخوة h4ck3r#47 وحاتم.
شكرا لكم أخي h4ck3r#47 وحاتم
رائع جدا وان شاء الله ا”لأفادة للجيمع”
وبأنتظار تحدي جديد ,,
في امان الله و رعايته ,,
hacker assembler
بتكون أفظل في الاستعراض
عمل رائع وإن شاء الله الجميع يستفيد منه.
وبالتوفيق للجميع.