أداة hexdump هي رفيقتك المخلصة عندما تريد رؤية الحقيقة العارية لأي ملف على نظام التشغيل. إذا كانت أداة strings التي شرحناها سابقاً تقوم بتصفية الملف لإظهار النصوص فقط، فإن hexdump لا تخفي عنك شيئاً؛ إنها تعرض لك كل بايت (Byte) داخل الملف بتنسيق الستة عشري (Hexadecimal)، وبجانبه التمثيل النصي له إن وُجد.
في عالم الهندسة العكسية واختبار الاختراق، البرامج والملفات ليست مجرد نصوص، بل هي هيكل من البايتات المرتبة بدقة. أداة hexdump تتيح لك قراءة هذا الهيكل مباشرة.
hexdump؟ (سياق الاستخدام)عندما تفتح ملفاً تنفيذياً أو صورة أو ملفاً تالفاً في محرر نصوص عادي (مثل Notepad أو nano)، يحاول المحرر ترجمة كل بايت إلى حرف، فيظهر لك ملف مليء بالرموز الغريبة وغير المفهومة لأن معظم البايتات ليست أحرفاً من الأساس، بل هي تعليمات برمجية للـ CPU (Machine Code).
أداة hexdump تحل هذه المشكلة بتحويل هذه البيانات الثنائية (Binary Data) إلى أرقام هكس (Hex) مرتبة وسهلة القراءة، مما يتيح لك:
0x00).عند تشغيل الأداة بالخيار الأكثر شهرة واستخداماً وهو -C (الذي يسمى التنسيق المعياري أو Canonical Hex+ASCII Display)، تظهر المخرجات مقسمة دائماً إلى ثلاثة أجزاء رئيسية من اليسار إلى اليمين.
لنلقِ نظرة على هذا المثال لمخرجات فحص ملف تنفيذي من نوع Linux (ملف ELF):
00000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 |.ELF............|
00000010 03 00 3e 00 01 00 00 00 60 10 00 00 00 00 00 00 |..>.....`.......|
الجزء الأول (العمود الأيسر): الإزاحة (Offset / Address)
في المثال أعلاه: 00000000 و 00000010. هذا يمثل عنوان أو موقع البايت الأول في هذا السطر بالنسبة لبداية الملف (بالنظام السداسي عشر). السطر الأول يبدأ من البايت رقم 0، والسطر الثاني يبدأ من البايت رقم 16 (والذي يكتب 10 في نظام الـ Hex)، لأن كل سطر يعرض 16 بايت بالضبط.
الجزء الثاني (العمود الأوسط): البيانات بالهكس (Hexadecimal Bytes)
في المثال: 7f 45 4c 46 02 01 01 00 .... هذه هي القيمة الفعلية لكل بايت داخل الملف. كل بايت يتكون من خانتين من نظام الـ Hex (مثلاً 7f). يتم فصل كل 8 بايتات بمسافة إضافية لتسهيل العد بالعين.
الجزء الثالث (العمود الأيمن بين علامتي |): التمثيل النصي (ASCII Representation)
في المثال: |.ELF............|. هنا تحاول الأداة ترجمة الـ 16 بايت الموجودة في المنتصف إلى أحرف ASCII مقروءة. إذا كان البايت يمثل حرفاً حقيقياً (مثل 45 التي تمثل حرف E) فستطبعه. أما إذا كان البايت عبارة عن أمر برمي أو بايت غير مقروء (مثل 00 أو 02)، تضع الأداة مكانه نقطة . لحفظ المحاذاة.
hexdump -C <file>
هذا هو التنسيق الأهم والأساسي (Canonical). يعرض لك الـ Hex والـ ASCII معاً وبدونه ستكون المخرجات صعبة الفهم ومكدسة.
hexdump -n <length> <file>
لتحديد عدد البايتات التي تريد قراءتها فقط (Length). ممتاز جداً إذا كنت تريد فحص أول 50 بايت فقط من ملف كبير جداً.
hexdump -C -n 64 target_binary
hexdump -s <offset> <file>
لتخطي (Skip) عدد معين من البايتات والبدء بالقراءة من منتصف الملف أو من عنوان محدد.
hexdump -C -s 0x100 target_binary