الدرس 8 من 9
استخراج النصوص
- 15 دقيقة
- 5 فحوص
- 3 تلميحات
- إلى المطلوب
هدف الدرس
النصوص الظاهرة بين البايتات
الشرح
أوّل ما يفعله المحلّل أمام ملف تنفيذي مجهول أن يستخرج منه النصوص، فرسائل الخطأ وأسماء الملفات والعناوين وما كُتب في الكود من كلمات تبقى داخل البرنامج نصوصًا ظاهرة بين بايتات لا تُقرأ. وهذا ما تفعله الأداة الشهيرة strings.
والفكرة بسيطة. المحرف (character) المطبوع في ASCII هو ما بين 0x20 وهو المسافة و0x7e وهو العلامة ~. فتمشي على البايتات وتجمع كل تتابع متّصل من المحارف المطبوعة، فإذا جاء بايت غير مطبوع انتهى التتابع. ولأن البيانات العشوائية تحوي بالصدفة محرفًا أو محرفين مطبوعين، تستبعد كل تتابع أقصر من حدّ أدنى، وهو أربعة في الأداة الأصلية:
blob = 00 01 'HELLO' 00 'ab' ff 'secret_key' 00 extract(blob) ['HELLO', 'secret_key'] extract(blob, min_len=2) ['HELLO', 'ab', 'secret_key']
وانتبه لآخر البيانات، فإن انتهت وأنت داخل تتابع طويل فهو نصّ أيضًا، فلا تنسَه بعد الحلقة.
المطلوب
اكتب الدالة extract(data, min_len=4) لتُرجع قائمة النصوص المطبوعة التي طولها min_len فأكثر، بترتيب ظهورها في البيانات، وكل نصّ فيها من النوع str.
الفحوص
5 فحوص- الدالة extract تستخرج النصوص الطويلة بترتيبها
- الدالة extract تحترم الحدّ min_len
- الدالة extract تعمل على كتلة أخرى
- النصّ الأخير يُلتقط وإن لم يتبعه فاصل
- الضجيج لا يُعدّ نصًّا