الدرس 7 من 9

تمييز الملفات بتواقيعها

هدف الدرس

أوّل البايتات يكشف صيغة الملف

01

الشرح

لا تثق باسم الملف ولا بامتداده، فالامتداد يتغيّر بنقرة. أمّا صيغة الملف الحقيقية فتخبرك بها بايتاته الأولى، إذ تبدأ كل صيغة تقريبًا بتوقيع ثابت (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)، وهي تقارن البداية وحدها، فلا يختلط عليك ملف يحمل التوقيع في وسطه بملف يبدأ به.

02

المطلوب

اكتب الدالة detect(data) لتُرجع نوع الملف نصًّا بأحرف صغيرة، وهو "png" أو "zip" أو "gif" أو "pdf" أو "elf"، فإن لم يطابق أيّ توقيع فأرجِع "unknown".

الفحوص

6 فحوص
  1. تمييز صورة PNG
  2. تمييز أرشيف ZIP
  3. تمييز صورة GIF
  4. تمييز ملف PDF دون خلطه بغيره
  5. تمييز الملف التنفيذي ELF
  6. المجهول وما يشبه التوقيع لا يُخدع به
03

تلميحات

0/3
main.py
المخرجاتPython (Pyodide)

نحمّل بيئة Python الآن. يحدث هذا مرّة واحدة فقط، ثم يحفظها متصفّحك.

–/6

يبدأ الفحص حين تجهز البيئة.

تجد 6 فحوص في بطاقة «المطلوب».