مقدمة
كان أول لقاء لي مع varints منذ عدة سنوات خلال فحص الطب الشرعي الرقمي لجهاز iPhone 3GS في تحقيق في جريمة قتل وحريق متعمد. حتى ذلك الحين، كان عملي في مجال الطب الشرعي يشمل في المقام الأول الهواتف ذات الميزات، وخاصة أجهزة CDMA التي تعمل بنظام BREW. كان يتم تخزين كل رسالة نصية في ملف خاص بها، مع إزاحة ثابتة وقيمة سداسية سداسية مباشرة تشير إلى طول الرسالة. كانت عملية مألوفة ويمكن التنبؤ بها.
ومع ذلك، قدم لي iPhone تحديًا جديدًا تمامًا. لم تعد الرسائل مخزنة كملفات فردية بل كسجلات داخل قاعدة بيانات. وعلى عكس بساطة الهواتف المميزة، لم يكن طول سلسلة الرسائل محددًا بقيمة سداسية سداسية واضحة. بدلاً من ذلك، وجدت نفسي أتصفح قواعد بيانات SQLite وأتعلم تحليل حمولات السجلات. وهنا واجهت متغيرات-أعداد صحيحة متغيرة الطول-طريقة مضغوطة وفعالة لترميز البيانات. أصبح فهم المتغيرات أمرًا حاسمًا أثناء قيامي بكشف بنية قاعدة البيانات واستخراج الأدلة الرئيسية. في هذه القضية، أدى إتقان استخدام المتغيرات إلى نتائج إدانة ساعدت في نهاية المطاف على إدانة المتهم بتهمة الحرق العمد والقتل.
تُعد المتغيرات مكونًا أساسيًا لقواعد بيانات SQLite، مما يتيح ترميزًا فعالاً للأعداد الصحيحة التي تحدد طول الخلايا والسجلات والحقول المحددة. بالنسبة لممارسي الطب الشرعي الرقمي، يعد فك تشفير المتغيرات أمرًا ضروريًا للكشف عن المعلومات الهامة داخل ملفات قواعد البيانات. تلعب هذه الأعداد الصحيحة المدمجة دورًا مهمًا في تعيين هياكل الجداول، وتحديد حمولات السجلات، واستعادة البيانات المحذوفة أو المخفية.
يستكشف منشور المدونة هذا الدور الحيوي الذي تلعبه المتغيرات في التحليل الجنائي لـ SQLite. سوف أعرض حاسبة VarInt، وهي أداة صممتها لتبسيط عملية فك التشفير، وإرشادك من خلال برنامج تعليمي لمساعدتك في تطبيق هذه المعرفة في تحقيقاتك. من تحليل إدخالات قاعدة بيانات SQLite إلى إعادة بناء السجلات المحذوفة، فإن فهم المتغيرات هو مهارة يجب أن يمتلكها كل فاحص جنائي في مجموعة أدواته.
فهم المتغيرات: اكتشافها وفك تشفيرها
للتعمق أكثر في SQLite والتحليل الجنائي الرقمي، فإن إحدى المهارات الأساسية التي ستحتاجها هي فهم الأعداد الصحيحة متغيرة الطول (متغيرات الطول). هذه الأرقام المدمجة موجودة في كل مكان في قواعد بيانات SQLite، مما يساعد النظام على توفير المساحة باستخدام أقل عدد ممكن من البايتات لتخزين القيم. ولكن يمكن أن يكون من الصعب أيضًا اكتشافها وفك تشفيرها إذا كنت لا تعرف ما الذي تبحث عنه. دعنا نحلل الأمر خطوة بخطوة.
ما هو فارينت؟
المتغير هو طريقة خاصة لتخزين الأرقام حيث يحدد حجم الرقم عدد البايتات المستخدمة. على عكس الأعداد الصحيحة ذات الطول الثابت (على سبيل المثال، 4 بايت أو 8 بايت)، يمكن أن يكون المتغير صغيرًا مثل بايت واحد أو كبيرًا مثل 9 بايت. هذه المرونة تجعل المتغيرات موفرة للمساحة ولكنها أيضًا أكثر صعوبة في التفسير.
أين ستجد فوارينتس؟
في قواعد بيانات SQLite، تُستخدم المتغيرات للتشفير:
- طول الخلايا أو السجلات في صفحة قاعدة البيانات.
- معرّفات الصفوف التي تحدد السجلات بشكل فريد.
- طول البيانات داخل حمولة السجل.
- قيم أخرى مختلفة تتعلق ببنية قاعدة البيانات.
مفتاح قراءة المتغيرات: قطعة العلامة
أول ما تحتاج إلى معرفته عند قراءة المتغير هو كيفية معرفة طوله. يحتوي كل بايت في المتغير على بت التأشير (البت الأكثر أهمية، أو MSB) الذي يخبرك ما إذا كان هناك بايت آخر إلى اليمين يمثل جزءًا من المتغير نفسه:
- إذا كان بت العلامة 1فإن البايت التالي هو أيضًا جزء من المتغير.
- إذا كان بت العلامة 0، لقد وصلت إلى نهاية varint.
طريقتان لفك تشفير طول الفوارينتس
هناك طريقتان لمعرفة طول المتغير: الطريقة الطويلة (باستخدام الثنائي) والطريقة السهلة (باستخدام الرقم السداسي السداسي). لنستعرض كلتا الطريقتين.
الطريق الطويل استخدام ثنائي
- ابدأ بالبايت الأول من المتغير.
- حوّل البايت إلى ثنائي. انظر إلى البت الأكثر أهمية (البت الموجود في أقصى اليسار).
- إذا كان البت 1، فإن البايت الموجود على اليمين هو جزء من المتغير.
- إذا كان البت 0، فهذا يعني أنك وصلت إلى النهاية.
- كرر هذه العملية مع كل بايت حتى تجد بايت مع MSB يساوي 0.
مثال على ذلك:
- بايت:
0xC2
→ ثنائي: 11000010 → MSB: 1 → استمر. - بايت:
0x7F
→ ثنائي: 01111111 → MSB: 0 → توقف هنا.
الطريقة السهلة استخدام الطرف الأيسر
- انظر إلى الخانة اليسرى (أول رقم سداسي عشري من البايت).
- إذا كانت قيمة البايت الأيسر 8 أو أعلى (8 أو 9 أو A أو B أو C أو D أو E أو F)، فإن البايت التالي هو جزء من المتغير.
- إذا كان الرقم الأيسر هو 7 أو أقل (من 0 إلى 7)، فقد وصلت إلى نهاية المتغير.
لماذا ينجح هذا الأمر: يعني أن الرقم الأيسر 8 أو أكثر يعني أن الرقم الأيسر 8 أو أكثر يعني أن الرقم الأيسر 7 أو أقل يعني أن الرقم الأيسر 7 أو أقل يعني أن الرقم الأيسر 0.
مثال على ذلك:
- بايت:
0xC2
→ القضم الأيسر: ج (أكبر من 8) → استمر. - بايت:
0x7F
→ القضم الأيسر: 7 (أقل من 8) → توقف هنا.

فهم التباينات في أطوال الخلايا: مثال عملي
تُستخدم المتغيرات في SQLite لتحديد حجم الخلايا على صفحات قاعدة البيانات. يمكن أن تحتوي هذه الخلايا على أي شيء من الجداول إلى سجلات الجداول، ويخبرنا البايت (البايتات) الأول (البايتات) في الخلية عن حجم الخلية. مؤشر الطول هذا هو في حد ذاته متغير، والذي يمكن أن يتراوح طوله من 1 إلى 9 بايت.
مثال من العالم الحقيقي: ملف WAL
في هذا المثال، تحتوي الخلية على جدول الرسائل. البايت الأول من الخلية هو 0x81
، مما يشير إلى متغير ثنائي البايت.
- التفاصيل:
- بايت 1:
0x81
→ ثنائي: 10000001 → بت علامة: 1 → متابعة. - بايت 2:
0x07
→ ثنائي: 00000111 → بت التأشير: 0 → إيقاف.
- بايت 1:
فك التشفيردخول فارينت
والآن، نحتاج إلى فك تشفير المتغير. إذا قمنا ببساطة بتحويل القيمة 0x8107
إلى عدد صحيح، فإننا سنحسب خطأً عددًا صحيحًا، وهو 33,031 وهو ما لا يتطابق بوضوح مع الحجم الفعلي للخلية.
لماذا؟
لا تساهم بتات العلامة في القيمة الفعلية للمتغير. لفك تشفير المتغير بشكل صحيح، نحتاج إلى تجريد قطع العلامات وتفسير الأجزاء ذات المعنى فقط من التمثيل الثنائي. إليك كيفية القيام بذلك:
- فك الشفرة:
- قم بإزالة علامات التأشير: 0000001 و 00000001 و 0000111.
- اجمع بين السباعي: 00000000 10000111 → العشري: 135.
- يبلغ طول الخلية 135 بايت (باستثناء المتغير و ROWID).
استخدام حاسبة فارينت للكفاءة
إن حاسبة فارينت يبسّط هذه العملية. أدخل القيمة السداسية السداسية (على سبيل المثال، 8107) لفك تشفير المتغير بسرعة. بالنسبة للمثال أعلاه، تُرجع الآلة الحاسبة 135، مما يؤكد الطول.

فك تشفير المتغيرات في رؤوس السجلات
في SQLite، تستخدم رؤوس السجلات متغيرات لتعريف المتغيرات:
- الطول: مقدار البيانات التي يجب قراءتها.
- النوع: كيفية تفسير البيانات (عدد صحيح، سلسلة، BLOB، إلخ).

مثال: طول السلسلة
دعنا نفك شفرة متغير في رأس السجل:- فارينت
0x25
- القيراط الأيسر: 2 (أقل من 8) → متغير بايت واحد.
- الرقم العشري: 37.
- الحمولة: طول السلسلة = 12 بايت (+97444455667).

خواطر ختامية
يعد فهم وفك تشفير المتغيرات مهارة أساسية لأي محقق جنائي رقمي يعمل مع قواعد بيانات SQLite. هذه الأعداد الصحيحة المدمجة هي مفتاح تفسير هياكل قواعد البيانات، وتحديد أحجام الخلايا، واستعادة البيانات بكفاءة.
وبفضل أدوات مثل حاسبة الفارنت، تصبح العملية أكثر سهولة، مما يسمح لممارسي الطب الشرعي بالتركيز على كشف الحقيقة المخفية في الأدلة الرقمية. إن إتقان المتغيرات أكثر من مجرد مهارة تقنية - إنها قدرة حيوية يمكن أن تؤثر بشكل مباشر على نتائج التحقيقات.
يمكنك قراءة المزيد وتنزيل حاسبة فارينت من هنا: