الدرس 7 من 9
تمييز الملفات بتواقيعها
- 13 دقيقة
- 6 فحوص
- 3 تلميحات
- إلى المطلوب
هدف الدرس
أوّل البايتات يكشف صيغة الملف
الشرح
لا تثق باسم الملف ولا بامتداده، فالامتداد يتغيّر بنقرة. أمّا صيغة الملف الحقيقية فتخبرك بها بايتاته الأولى، إذ تبدأ كل صيغة تقريبًا بتوقيع ثابت (magic number) يكتبه البرنامج الذي أنشأ الملف:
PNG 89 50 4e 47 0d 0a 1a 0a b"\x89PNG\r\n\x1a\n" ZIP 50 4b 03 04 b"PK\x03\x04" GIF 47 49 46 38 39 61 b"GIF89a" PDF 25 50 44 46 b"%PDF" ELF 7f 45 4c 46 b"\x7fELF"
ومن هذه التواقيع ما رأيته دون أن تنتبه، فالحرفان PK في أوّل كل ملف ZIP هما أوّل حرفين من اسم مخترع الصيغة، وملفات Word وExcel الحديثة أرشيفات ZIP في الحقيقة. والصيغة ELF هي صيغة البرامج التنفيذية في لينكس.
والتمييز في Python سهل بالطريقة data.startswith(sig)، وهي تقارن البداية وحدها، فلا يختلط عليك ملف يحمل التوقيع في وسطه بملف يبدأ به.
المطلوب
اكتب الدالة detect(data) لتُرجع نوع الملف نصًّا بأحرف صغيرة، وهو "png" أو "zip" أو "gif" أو "pdf" أو "elf"، فإن لم يطابق أيّ توقيع فأرجِع "unknown".
الفحوص
6 فحوص- تمييز صورة PNG
- تمييز أرشيف ZIP
- تمييز صورة GIF
- تمييز ملف PDF دون خلطه بغيره
- تمييز الملف التنفيذي ELF
- المجهول وما يشبه التوقيع لا يُخدع به