مقدمة
في الجزء الأول من سلسلة المدونة هذه، استكشفنا MBR الوقائي ودوره في حماية توافق الأقراص الحديثة ذات التقسيم GPT مع الأنظمة القديمة. لقد تعمقنا في كيفية عمل MBR الوقائي كحاجز لمنع الأنظمة القديمة من إساءة تفسير أقراص GPT، وبالتالي ضمان وضع علامة على القرص بأكمله على أنه قيد الاستخدام بواسطة GPT. يمهّد هذا الفهم التأسيسي الطريق للتعمق أكثر في قلب جدول أقسام GUID (GPT) نفسه - رأس GPT.
في هذا الجزء الثاني، سنقوم بتفريغ رأس GPT، وهو مكوّن أساسي في مخطط GPT الذي يوفّر معلومات حيوية حول بنية القرص. سنقوم بفحص كل حقل في رأس GPT، شارحين أهميته وكيفية مساهمته في الوظيفة العامة للقرص وسلامته. في نهاية هذا المقال، سيكون لديك فهم شامل لرأس GPT Header، مما يمكّنك من تحليل ومعالجة الأقراص المقسّمة إلى GPT بثقة في تحقيقات الطب الشرعي أو سيناريوهات استعادة البيانات.
نظرة عامة على رأس GPT
يُعد رأس جدول التقسيم GPT (جدول التقسيم GUID) مكوناً أساسياً في نظام تقسيم القرص. وهو يقسم القرص إلى أقسام منفصلة، يمكن لكل منها تخزين أنواع مختلفة من البيانات، مثل نظام التشغيل أو الملفات الشخصية أو بيانات التطبيق أو الألعاب. يمكن أن تكون هذه الأقسام عبارة عن محركات أقراص مختلفة (مثل محرك الأقراص C: أو محرك الأقراص D: أو محرك الأقراص E: أو محرك الأقراص E: إلخ).
يشتمل رأس GPT على نسخة احتياطية في نهاية القرص، مثل وجود مفتاح احتياطي لفهرس المكتبة في حالة فقدان المفتاح الرئيسي أو تلفه. يضمن ذلك إمكانية العثور على بياناتنا والوصول إليها حتى في حالة حدوث خطأ ما.
يوفر رأس GPT Header موقع النسخة الاحتياطية الخاصة به وموقع مصفوفة إدخال جدول التقسيم GUID، وهي قائمة بإدخالات أقسام GPT التي تشير إلى مكان وجود تلك الأقسام (الأقسام) على القرص.

الشكل 1: تخطيط لتثبيت افتراضي لنظام ويندوز 10 بوحدة تخزين واحدة (n = القطاع الأخير من محرك الأقراص)
يبدأ رأس GPT بتوقيعه، EFI Part. يتم تقسيم بقية القيم في الجدول أدناه:
هيكل رأس GPT
يبدأ رأس GPT بتوقيعه "EFI Part." يتم تقسيم بقية القيم في الجدول أدناه:


المصدر: https://uefi.org/specs/UEFI/2.10/05_GUID_Partition_Table_Format.html

حتى الآن، ستظل أول 16 بايت من رأس GPT ثابتًا عبر أقراص GPT المختلفة.
رأس GPT CRC

فيما يلي مثال على كيفية حساب CRC32 لرأس GPT:

يمكنك استخدام برنامج Python النصي لحساب البايت المعزول CRC:

يمكن العثور على نص بايثون النصي على: https://github.com/eichbaumj/Python

سيأخذ البرنامج النصي Python قيمة CRC32 الناتجة ويحولها إلى التنسيق المطلوب لرأس GPT. القيمة المحسوبة، في هذه الحالة، هي 0x1B2C37BC. ولكن لتخزينها في الحقل داخل رأس GPT، تتم قراءة القيمة بالصيغة الهندية الصغيرة: 0xBC372C1B.

القرص GUID

تُظهر لقطة الشاشة أدناه معرّف GUID المميز في رأس GPT:

المعرّف الجغرافي هو قيمة سداسية عشرية سداسية عشرية مكونة من 16 بايت، ولكن إذا كنت تعتقد أنه يمكنك فقط نسخ القيم وفصلها بشكل مناسب مع وضع أقواس معقوفة حولها، فستكون مخطئًا. سينتهي بك الأمر بقيمة خاطئة.
يمكنك رؤية HxD يوفر تحويل GUID في مفتش البيانات على اليمين. لكن كيف يحدث ذلك؟ كيف يحدث ذلك:
55 ب أ ب 55 51 51 2 ب ب 8 د 8 59 41 ب س 1 ف 4 17 80 0 ف 7 د 7 63
كن:
{5155BA55-D82B-4159-BC1F-C417800FD763}
تنسيق GUID
XX XX XX XX | XX XX | XX XX | XX XX | XX XX XX XX XX XX
55 ب ب أ 55 51 51 | 2 ب د 8 | 59 41 | ب س 1 و | ج 4 17 17 80 0 و د 7 63
يتم تحويل المجموعة الأولى المكونة من أربع بايتات إلى سداسي عشري صغير: 51 55 BA 55
يتم تحويل المجموعة الثانية المكونة من 2 بايت إلى سداسي عشري صغير: D8 2B 2B
يتم تحويل المجموعة الثالثة المكوّنة من 2 بايت إلى سداسي عشري صغير: 59 41
تُترك المجموعتان المتبقيتان من القيم السداسية كما هي، أي من الأعداد الكبيرة: BC 1F | C4 17 17 80 80 0F D7 63
بمجرد اكتمال جميع التحويلات، يمكننا تجميعها جميعًا معًا، ووضع الواصلات في المكان الذي يجب أن تكون فيه ووضعها بين أقواس معقوفة:
{5155BA55-D82B-4159-BC1F-C417800FD763}
يمكننا التأكد من أن هذا هو الترميز الصحيح لمعرف GUID من خلال تشغيل diskpart من سطر الأوامر والتحقق من المعرف الفريد للقرص:


المجموع الاختباري لجدول أقسام GPT CRC

يمكننا استخدام نفس برنامج Python النصي ولكن مع استبدال القيم السداسية بتلك الموجودة في مصفوفة إدخال القسم.



ويمكننا أن نرى أن القيمة تتوافق مع ما هو موجود في رأس GPT.
إصلاح رأس GPT
حسناً، الآن بعد أن عرفنا كيف يتم تنظيم رأس GPT وأن هناك نسخة احتياطية موجودة في القطاع الأخير من القرص، كيف يمكننا إصلاح رأس GPT في حالة تلفه أو مسحه؟
لإصلاح رأس GPT، انسخ آخر 512 بايت من نهاية القرص والصقها في LBA 1 (القطاع #2). لاحظ أن بعض التعديلات ضرورية.
فيما يلي مثال لما يبدو عليه رأس GPT الاحتياطي في نهاية القرص:

يمكننا أن نرى أن بعض القيم تظل ثابتة مقارنةً برأس GPT الأصلي. هذه الثوابت مظللة باللون الأحمر أدناه:

هناك أربع قيم يجب تغييرها.
الأولى هي CRC لرأس GPT، والتي سنعود إليها. في الوقت الحالي، يمكن حذف هذه القيم لأننا سنحتاج إلى استخدام CRC المحسوبة بعد تعديل القيم الأخرى للحصول على القيم الصحيحة مرة أخرى.

القيمة التالية هي قيمة MyLBA الموجودة عند الإزاحة 24 لـ 4 بايت. تشير هذه القيمة إلى موقع رأس GPT (حيث توجد حاليًا) وموضعها الحالي هو LBA 1 أو 0x0100000000000000000000000.

القيمة 8 بايت عند الإزاحة 32 هي القيمة التي تشير إلى موقع رأس GPT الاحتياطي. تشير النسخة الاحتياطية حاليًا إلى النسخة الأصلية، لكننا نحتاج إلى تغيير هذه القيمة لتمثل القطاع الأخير من القرص. حدث هذا للقيم السداسية التي قمنا بتغييرها للتو في الخطوة السابقة. في هذا المثال، يجب تغيير القيمة في هذا المثال إلى 0xAFD23B7777000000000000.

يجب أن تعكس القيمة 8 بايت الموجودة عند الإزاحة 72 موقع وبداية مصفوفة إدخال قسم GPT. في الوقت الحالي، يشير رأس GPT الاحتياطي إلى النسخة الاحتياطية لتلك المصفوفة. يجب أن تكون مصفوفة قسم GPT الفعلية في LBA 2. يجب تغيير هذه القيمة إلى 0x0200000000000000000000000000.

بعد تغيير هذه القيم الثلاث، حان الوقت لحساب قيمة CRC32.
المجموع الاختباري الناتج هو:

لذا يمكننا الآن استبدال قيم 0x000000000000 عند الإزاحة 16 بـ 0xBC372C1B:

يحتوي HxD على حاسبة المجموع الاختباري CRC32 مدمجة ضمن التحليل -> المجموع الاختباري. القيمة الناتجة تحتاج فقط إلى إضافة القيمة الناتجة كقيمة هندسية صغيرة.
من باب الفضول، إذا قمنا بعزل تلك ال 512 بايت للنسخة الأصلية والنسخة الاحتياطية التي استعدناها، فإن قيم التجزئة تتطابق بالفعل مما يشير إلى أننا نجحنا في إعادة إنتاج رأس GPT الأصلي باستخدام النسخة الاحتياطية.

الخاتمة
يُعدّ فهم تعقيدات رأس GPT أمرًا ضروريًا لأي شخص يعمل في مجال الطب الشرعي الرقمي، أو استعادة البيانات، أو إدارة النظام. لا يحدد رأس GPT Header تخطيط وهيكل القرص فحسب، بل يضمن أيضًا تكامل البيانات من خلال آليات مثل المجموع الاختباري CRC32 ورؤوس النسخ الاحتياطي. من خلال إتقانك لتفاصيل رأس GPT، تكون مجهزًا بشكل أفضل لاستكشاف مشكلات القرص وإصلاحها، مما يضمن موثوقية البيانات الهامة وإمكانية الوصول إليها.
مع استمرارنا في هذه السلسلة، سيكون تركيزنا التالي على مصفوفة إدخالات جدول أقسام GPT. سنستكشف كيفية هيكلة إدخالات التقسيم وكيفية عملها بالتنسيق مع رأس GPT للحفاظ على تنظيم وتكامل أقسام القرص. ترقبوا معنا دليلاً شاملاً حول تحليل وإصلاح مصفوفة إدخال جدول أقسام GPT، مما سيمكنك من الحصول على المزيد من المعرفة للتعامل مع الأقراص المقسمة إلى GPT بثقة.
هل فاتك الجزء 1؟
ابدأ من البداية فهم MBR الواقي في أقراص GPT المقسّمة إلى أقسام (الجزء 1) - حيث نغطي كيف يضمن GPT التوافق مع الأنظمة القديمة.
هل أنت مستعد للخطوة التالية؟
تابع إلى الجزء 3: التنقل في مصفوفة إدخال قسم GPT - حيث نستكشف كيفية هيكلة إدخالات التقسيم وكيفية تكاملها مع رأس GPT.
استجابات 2
صفحات رائعة (هذه الصفحة والجزء 1).
شكراً جزيلاً!