إنشاء نوع ملف مخصص معروف لبرنامج R-Studio. تحديد نوع الملف عن طريق التوقيع توقيعات تنسيق الملف

21.06.2020

يحدد رمز الوظيفة (FC) الموجود في رأس البرقية نوع البرقية، مثل برقية الطلب (طلب أو إرسال/طلب) وبرقية الإقرار أو الاستجابة (إطار الإقرار، إطار الاستجابة). بالإضافة إلى ذلك، يحتوي رمز الوظيفة على وظيفة الإرسال الفعلية ومعلومات التحكم التي تمنع فقدان الرسائل وتكرارها، أو نوع المحطة مع حالة FDL.

7 6 5 4 3 2 1 0 FC: طلب رمز الوظيفة
1 طلب برقية
X FCV = البت البديل قيد التشغيل
X href=”http://profibus.felser.ch/en/funktionscode.htm#aufruffolgebit”>FCB = البت البديل (من عدد الإطارات)
1 0 (0x0) السيرة الذاتية = قيمة الساعة ()
1 آخر محجوز
0 0 (0x0) TE = حدث الوقت (مزامنة الساعة)
0 3 (0x3) SDA_LOW = تم الإقرار بإرسال البيانات - أولوية منخفضة
0 4 (0x4) SDN_LOW = لم يتم الإقرار بإرسال البيانات - أولوية منخفضة
0 5 (0x5) SDA_HIGH = تم الإقرار بإرسال البيانات - أولوية عالية
0 6 (0x6) SDN_HIGH = لم يتم الإقرار بإرسال البيانات
0 7 (0x7) MSRD = إرسال بيانات الطلب مع رد البث المتعدد
0 9 (0x9) طلب حالة FDL
0 12(0×ج) SRD منخفض = إرسال البيانات وطلبها
0 13(0×د) SRD مرتفع = إرسال البيانات وطلبها
0 14(0xE) طلب الهوية مع الرد
0 15 (0xF) طلب حالة LSAP مع الرد 1)
0 آخر محجوز

1) لم تعد هذه القيمة في الإصدار الأخير من المعيار محددة ولكنها محفوظة فقط

7 6 5 4 3 2 1 0 FC: الاستجابة لرمز الوظيفة
0 برقية الرد
0 محجوز
0 0 عبد
0 1 سيد غير جاهز
1 0 سيد جاهز، دون رمز
1 1 سيد جاهز، في حلقة رمزية
0 (0x0) نعم
1 (0x1) UE = خطأ المستخدم
2 (0x2) RR = لا توجد موارد
3 (0x3) RS = SAP غير ممكّن
8 (0x8) DL = انخفاض البيانات (حالة عادية مع DP)
9 (0x9) NR = لا توجد بيانات استجابة جاهزة
10(0xأ) DH = ارتفاع البيانات (في انتظار تشخيص DP)
12(0×ج) RDL = البيانات غير المستلمة والبيانات منخفضة
13(0×د) RDH = البيانات غير المستلمة والبيانات عالية
آخر محجوز

بتة عدد الإطارات تمنع بتة عدد الإطارات FCB (b5) تكرار الرسالة من قبل محطة الإقرار أو الاستجابة (المستجيب) وأي خسارة من قبل محطة الاتصال (البادئ). تُستثنى من ذلك الطلبات بدون إقرار (SDN) وحالة FDL وطلبات الهوية وطلبات حالة LSAP.

بالنسبة للتسلسل الأمني، يجب على البادئ أن يحمل FCB لكل مستجيب. عند إرسال برقية طلب (طلب أو إرسال/طلب) إلى أحد المستجيبين للمرة الأولى، أو إذا تمت إعادة إرسالها إلى مستجيب تم وضع علامة عليه حاليًا على أنه غير عامل، فيجب تعيين FCB على النحو المحدد في المستجيب. يحقق البادئ ذلك في برقية طلب مع FCV=0 وFCB=1. يجب على المستجيب تقييم برقية من هذا النوع باعتبارها دورة الرسالة الأولى وتخزين FCB=1 مع عنوان البادئ (SA) (انظر الجدول التالي). لن يتم تكرار دورة الرسالة هذه بواسطة البادئ. في برقيات الطلب اللاحقة إلى نفس المستجيب، يجب على البادئ تعيين FCV=1 وتغيير FCB مع كل برقية طلب جديدة. يجب على أي مستجيب يتلقى برقية طلب موجهة إليه بـ FCV=1 تقييم FCB. إذا تغير FCB عند مقارنته بآخر برقية طلب من نفس البادئ (نفس SA)، فهذا تأكيد صحيح بأن دورة الرسالة السابقة قد اختتمت بشكل صحيح. إذا كانت برقية الطلب تنشأ من بادئ مختلف (SA مختلف)، فلن يعد تقييم FCB ضروريًا. في كلتا الحالتين، يجب على المستجيب حفظ FCB مع مصدر SA حتى استلام برقية جديدة موجهة إليه. في حالة فقدان أو ضعف الإقرار أو برقية الاستجابة، يجب ألا يقوم البادئ بتغيير FCB في إعادة محاولة الطلب: سيشير هذا إلى أن دورة الرسالة السابقة كانت خاطئة. إذا تلقى المستجيب برقية طلب تحتوي على FCV=1 ونفس FCB مثل برقية الطلب الأخيرة من نفس البادئ (نفس SA)، فسيشير هذا إلى إعادة محاولة الطلب. ويجب على المستجيب بدوره إعادة إرسال برقية الإقرار أو الرد التي كانت جاهزة. حتى التأكيد المذكور أعلاه أو استلام برقية بعنوان مختلف (SA أو DA) لم يتم الإقرار بها (إرسال البيانات بدون إقرار، SDN) يجب على المستجيب الاحتفاظ بآخر إقرار أو برقية استجابة استعدادًا لأي إعادة محاولة طلب محتملة . في حالة برقيات الطلب التي لم يتم الإقرار بها وبحالة طلب FDL والهوية وحالة LSAP، FCV=0 وFCB=0؛ التقييم من قبل المستجيب لم يعد ضروريا.

ب5 ب4 موقف بت
نادي برشلونة FCV حالة معنى فعل
0 0 دا = تيسي/127 الطلب دون الاعتراف
طلب حالة FDL/الهوية/حالة LSAP
حذف الإقرار الأخير
0/1 0/1 دا#TS طلب إلى مستجيب آخر
1 0 دا = تيسي الطلب الأول FCBM:= 1
سام:=سا
حذف الإقرار/الاستجابة الأخيرة
0/1 1 دا = تيسي
سا = سام
FCB#FCBM
طلب جديد حذف الإقرار/الاستجابة الأخيرة
FCBM:=FCB
احتفظ بالإقرار/الاستجابة استعدادًا لإعادة المحاولة
0/1 1 دا = تيسي
سا = سام
FCB = FCBM
إعادة محاولة الطلب FCBM:=FCB
كرر الإقرار/الاستجابة واستمر في الاستعداد
0/1 1 دا = تيسي
سا#سام
بادئ جديد FCBM:=FCB
SAM:= SA احتفظ بالإقرار/الاستجابة استعدادًا لإعادة المحاولة

FCBM يخزن FCB في الذاكرة SAM يخزن SA في الذاكرة

ربما سمع الكثيرون عن ملفات مثل rarjpeg، وهو نوع خاص من الملفات، وهو عبارة عن صورة بتنسيق jpeg وأرشيف rar ملتصقين معًا بشكل وثيق، وهو عبارة عن حاوية ممتازة لإخفاء حقيقة نقل المعلومات. يمكنك إنشاء ملف rarjpeg باستخدامه الأوامر التالية:

يونيكس: صورة القطة1.jpg archive.rar > image2.jpg
شبابيك: نسخ /ب image1.jpg+archive.rar image2.jpg

أو إذا كان لديك محرر سداسي عشري.

بالطبع، لإخفاء حقيقة نقل المعلومات، لا يمكنك استخدام تنسيق JPEG فحسب، بل يمكنك أيضًا استخدام العديد من التنسيقات الأخرى. كل تنسيق له خصائصه الخاصة، والتي قد تكون أو لا تكون مناسبة لدور الحاوية. سأصف كيف يمكنك العثور على الملفات الملصقة بالتنسيقات الأكثر شيوعًا أو الإشارة إلى حقيقة اللصق.

يمكن تقسيم طرق الكشف عن الملفات المدمجة إلى ثلاث مجموعات:

  1. طريقة فحص المنطقة بعد علامة EOF. تحتوي العديد من تنسيقات الملفات الشائعة على ما يسمى بعلامة نهاية الملف، وهي المسؤولة عن عرض البيانات المطلوبة. على سبيل المثال، يقرأ عارضو الصور كل وحدات البايت حتى هذه العلامة، ولكن يتم تجاهل المنطقة التي تليها. هذه الطريقة مثالية للتنسيقات التالية: JPEG، PNG، GIF، ZIP، RAR، PDF.
  2. طريقة التحقق من حجم الملف تتيح لك بنية بعض التنسيقات (حاويات الصوت والفيديو) حساب الحجم الفعلي للملف ومقارنته بالحجم الأصلي. التنسيقات: أفي، واف، MP4، موف.
  3. طريقة فحص ملفات CFB. CFB أو Compound File Binary Format هو تنسيق مستند تم تطويره بواسطة Microsoft، وهو عبارة عن حاوية لها نظام ملفات خاص بها. تعتمد هذه الطريقة على اكتشاف الحالات الشاذة في الملف.

هل هناك حياة بعد انتهاء الملف؟

جبيغ

للعثور على إجابة لهذا السؤال، لا بد من الخوض في مواصفات التنسيق، وهو “سلف” الملفات المدمجة وفهم بنيتها. يبدأ أي ملف JPEG بالتوقيع 0xFF 0xD8.

بعد هذا التوقيع، توجد معلومات الخدمة، وأيقونة صورة اختياريًا، وأخيرًا الصورة المضغوطة نفسها. في هذا التنسيق، يتم تمييز نهاية الصورة بتوقيع ثنائي البايت 0xFF 0xD9.

بي إن جي

البايتات الثمانية الأولى من ملف PNG مشغولة بالتوقيع التالي: 0x89، 0x50، 0x4E، 0x47، 0x0D، 0x0A، 0x1A، 0x0A. توقيع النهاية الذي ينهي دفق البيانات: 0x49، 0x45، 0x4E، 0x44، 0xAE، 0x42، 0x60، 0x82.

رار

التوقيع المشترك لجميع أرشيفات rar: 0x52 0x61 0x72 0x21 (Rar!). بعد ذلك تأتي معلومات حول إصدار الأرشيف والبيانات الأخرى ذات الصلة. تم تحديد تجريبيًا أن الأرشيف ينتهي بالتوقيع 0x0A، 0x25، 0x25، 0x45، 0x4F، 0x46.

جدول التنسيقات وتوقيعاتها:
إن خوارزمية التحقق من اللصق بهذه التنسيقات بسيطة للغاية:

  1. ابحث عن التوقيع الأولي؛
  2. ابحث عن التوقيع النهائي؛
  3. إذا لم تكن هناك بيانات بعد التوقيع النهائي، فإن ملفك نظيف ولا يحتوي على مرفقات! بخلاف ذلك، فمن الضروري البحث عن تنسيقات أخرى بعد التوقيع النهائي.

GIF وPDF

قد يحتوي مستند PDF على أكثر من علامة EOF واحدة، على سبيل المثال بسبب إنشاء مستند غير صحيح. عدد التوقيعات النهائية في ملف GIF يساوي عدد الإطارات فيه. واستنادا إلى ميزات هذه التنسيقات، من الممكن تحسين الخوارزمية للتحقق من وجود الملفات المرفقة.
  1. تتكرر النقطة 1 من الخوارزمية السابقة.
  2. تتكرر النقطة 2 من الخوارزمية السابقة.
  3. عندما تجد التوقيع النهائي، تذكر موقعه وانظر إلى أبعد من ذلك؛
  4. إذا وصلت إلى علامة EOF الأخيرة بهذه الطريقة، فإن الملف نظيف.
  5. إذا لم ينتهي الملف بتوقيع نهائي، فإن الانتقال إلى هو موقع آخر توقيع نهائي تم العثور عليه.
يشير الاختلاف الكبير بين حجم الملف والموضع بعد التوقيع الأخير إلى وجود مرفق ثابت. يمكن أن يكون الفرق أكثر من عشرة بايت، على الرغم من إمكانية تعيين قيم أخرى.

أَزِيز

تكمن خصوصية أرشيفات ZIP في وجود ثلاثة توقيعات مختلفة: هيكل الأرشيف كما يلي:
رأس الملف المحلي 1
بيانات الملف 1
واصف البيانات 1
رأس الملف المحلي 2
بيانات الملف 2
واصف البيانات 2
...
رأس الملف المحلي
بيانات الملف ن
واصف البيانات ن
رأس فك تشفير الأرشيف
أرشفة سجل البيانات الإضافية
الدليل المركزي
الأكثر إثارة للاهتمام هو الدليل المركزي، الذي يحتوي على البيانات الوصفية حول الملفات الموجودة في الأرشيف. يبدأ الدليل المركزي دائمًا بالتوقيع 0x50 0x4b 0x01 0x02 وينتهي بالتوقيع 0x50 0x4b 0x05 0x06، متبوعًا بـ 18 بايت من البيانات الوصفية. ومن المثير للاهتمام أن الأرشيفات الفارغة تتكون فقط من التوقيع النهائي و18 صفر بايت. بعد 18 بايت، تأتي منطقة تعليق الأرشيف، وهي حاوية مثالية لإخفاء الملف.

للتحقق من أرشيف ZIP، تحتاج إلى العثور على التوقيع النهائي للدليل المركزي، وتخطي 18 بايت والبحث عن التوقيعات ذات التنسيقات المعروفة في منطقة التعليق. يشير الحجم الكبير للتعليق أيضًا إلى حقيقة الإلتصاق.

القياس يهم

أفي

بنية ملف AVI هي كما يلي: يبدأ كل ملف بتوقيع RIFF (0x52 0x49 0x46 0x46). يوجد في البايت 8 توقيع AVI يحدد التنسيق (0x41 0x56 0x49 0x20). تحتوي الكتلة عند الإزاحة 4، المكونة من 4 بايت، على الحجم الأولي لكتلة البيانات (ترتيب البايت - نهاية صغيرة). لمعرفة رقم الكتلة الذي يحتوي على الحجم التالي، تحتاج إلى إضافة حجم الرأس (8 بايت) والحجم الذي تم الحصول عليه في الكتلة 4-8 بايت. هذا يحسب الحجم الإجمالي للملف. من المقبول أن يكون الحجم المحسوب أصغر من حجم الملف الفعلي. بمجرد حساب الحجم، سيحتوي الملف على صفر بايت فقط (ضروري لمحاذاة حدود 1 كيلو بايت).

مثال لحساب الحجم:


واف

مثل AVI، يبدأ ملف WAV بتوقيع RIFF، ومع ذلك، يحتوي هذا الملف على توقيع من البايت 8 - WAVE (0x57 0x41 0x56 0x45). يتم حساب حجم الملف بنفس طريقة حساب AVI. يجب أن يتطابق الحجم الفعلي تمامًا مع الحجم المحسوب.

MP4

MP4 أو MPEG-4 هو تنسيق حاوية وسائط يستخدم لتخزين تدفقات الفيديو والصوت، كما يوفر أيضًا إمكانية تخزين الترجمات والصور.
عند الإزاحة 4 بايت توجد توقيعات: نوع الملف ftyp (66 74 79 70) (نوع ملف حاوية QuickTime) والنوع الفرعي للملف mmp4 (6D 6D 70 34). للتعرف على الملفات المخفية، نحن مهتمون بالقدرة على حساب حجم الملف.

لنلقي نظرة على مثال. حجم الكتلة الأولى عند الإزاحة صفر، وهو 28 (00 00 00 1C، ترتيب البايتات Big Endian)؛ ويشير أيضًا إلى الإزاحة التي يوجد بها حجم كتلة البيانات الثانية. عند الإزاحة 28 نجد أن حجم الكتلة التالي يساوي 8 (00 00 00 08). للعثور على حجم الكتلة التالي، تحتاج إلى إضافة أحجام الكتل السابقة التي تم العثور عليها. وبالتالي يتم حساب حجم الملف:

وسائل التحقق

هذا التنسيق المستخدم على نطاق واسع هو أيضًا حاوية MPEG-4. تستخدم MOV خوارزمية خاصة لضغط البيانات، ولها بنية مشابهة لـ MP4 وتستخدم لنفس الأغراض - لتخزين بيانات الصوت والفيديو، بالإضافة إلى المواد ذات الصلة.
مثل MP4، يحتوي أي ملف mov على توقيع ftyp 4 بايت عند الإزاحة 4، ومع ذلك، فإن التوقيع التالي له القيمة qt__ (71 74 20 20). لم تتغير قاعدة حساب حجم الملف: بدءًا من بداية الملف، نحسب حجم الكتلة التالية ونضيفها.

تتمثل طريقة التحقق من وجود ملفات "ثابتة" في هذه المجموعة من التنسيقات في حساب الحجم وفقًا للقواعد المذكورة أعلاه ومقارنتها بحجم الملف الذي يتم فحصه. إذا كان حجم الملف الحالي أصغر بكثير من الحجم المحسوب، فهذا يشير إلى حقيقة الإلتصاق. عند فحص ملفات AVI، من المقبول أن الحجم المحسوب قد يكون أصغر من حجم الملف بسبب وجود أصفار مضافة لمحاذاة الحدود. في هذه الحالة، من الضروري التحقق من وجود الأصفار بعد حجم الملف المحسوب.

التحقق من التنسيق الثنائي للملف المركب

يُعرف تنسيق الملف هذا، الذي طورته Microsoft، أيضًا باسم OLE (ربط الكائنات وتضمينها) أو COM (نموذج كائن المكون). تنتمي ملفات DOC وXLS وPPT إلى مجموعة تنسيقات CFB.

يتكون ملف CFB من رأس بحجم 512 بايت وقطاعات متساوية الطول تقوم بتخزين تدفقات البيانات أو معلومات الخدمة. كل قطاع له رقمه غير السالب، باستثناء الأرقام الخاصة: "-1" - أرقام القطاع الحر، "-2" - أرقام القطاع الذي يغلق السلسلة. يتم تعريف جميع سلاسل القطاعات في جدول FAT.

لنفترض أن أحد المهاجمين قام بتعديل ملف .doc معين وقام بلصق ملف آخر في نهايته. هناك عدة طرق مختلفة لاكتشافه أو الإشارة إلى حالة شاذة في المستند.

حجم الملف غير طبيعي

كما ذكر أعلاه، يتكون أي ملف CFB من رأس وقطاعات متساوية الطول. لمعرفة حجم القطاع، تحتاج إلى قراءة رقم ثنائي البايت عند الإزاحة 30 من بداية الملف ورفع 2 إلى قوة هذا الرقم. يجب أن يكون هذا الرقم مساويًا إما 9 (0x0009) أو 12 (0x000C)، على التوالي، ويكون حجم قطاع الملف 512 أو 4096 بايت. بعد العثور على القطاع، عليك التحقق من المساواة التالية:

(حجم الملف - 512) حجم القطاع = 0

إذا لم تكن هذه المساواة راضية، فيمكنك الإشارة إلى حقيقة لصق الملفات. ومع ذلك، فإن هذه الطريقة لها عيب كبير. إذا كان المهاجم يعرف حجم القطاع، فهو يحتاج فقط إلى لصق ملفه و n بايت أخرى بحيث يكون حجم البيانات الملصقة مضاعفًا لحجم القطاع.

نوع القطاع غير معروف

إذا كان المهاجم يعرف طريقة لتجاوز الفحص السابق، فيمكن لهذه الطريقة اكتشاف وجود قطاعات ذات أنواع غير محددة.

دعونا نحدد المساواة:

FileSize = 512 + CountReal * SectorSize، حيث FileSize هو حجم الملف، SectorSize هو حجم القطاع، CountReal هو عدد القطاعات.

نحدد أيضًا المتغيرات التالية:

  1. CountFat – عدد قطاعات FAT. يقع عند الإزاحة 44 من بداية الملف (4 بايت)؛
  2. CountMiniFAT – عدد قطاعات MiniFAT. يقع عند الإزاحة 64 من بداية الملف (4 بايت)؛
  3. CountDIFAT – عدد قطاعات DIFAT. يقع عند الإزاحة 72 من بداية الملف (4 بايت)؛
  4. CountDE – عدد قطاعات إدخال الدليل. للعثور على هذا المتغير، تحتاج إلى العثور على القطاع الأول DE، والذي يقع عند الإزاحة 48. ثم من الضروري الحصول على تمثيل كامل لـ DE من FAT وإحصاء عدد قطاعات DE؛
  5. CountStreams – عدد القطاعات التي تحتوي على تدفقات البيانات؛
  6. CountFree – عدد القطاعات الحرة؛
  7. CountClassified – عدد القطاعات ذات نوع معين؛
CountClassified = CountFAT + CountMiniFAT + CountDIFAT + CountDE + CountStreams + CountFree

من الواضح أنه إذا كان CountClassified وCountReal غير متساويين، فيمكننا استنتاج إمكانية دمج الملفات.

المفهوم " رقم سحري"في البرمجة له ​​ثلاثة معانٍ:

  • توقيع البيانات
  • القيم الفريدة المحددة التي لا ينبغي أن تكون مماثلة للقيم الأخرى (مثل UUID)
  • ممارسة البرمجة السيئة.

توقيع البيانات

رقم سحري، أو إمضاء، - عدد صحيح أو ثابت نصي يستخدم لتعريف مورد أو بيانات بشكل فريد. مثل هذا الرقم في حد ذاته ليس له أي معنى ويمكن أن يسبب ارتباكًا إذا ظهر في كود البرنامج دون السياق أو التعليق المناسب، في حين أن محاولة تغييره إلى آخر، حتى ولو كان قريبًا من القيمة، يمكن أن تؤدي إلى عواقب غير متوقعة تمامًا. لهذا السبب، من المفارقات أن هذه الأرقام كانت تسمى أرقام سحرية. حاليا، هذا الاسم راسخ كمصطلح. على سبيل المثال، أي فئة لغة Java مترجمة تبدأ بالرقم السحري الست عشري 0xCAFEBABE. المثال الثاني المعروف هو أن أي ملف قابل للتنفيذ في Microsoft Windows بامتداد .exe يبدأ بتسلسل البايت 0x4D5A (الذي يتوافق مع أحرف ASCII MZ - الأحرف الأولى من Mark Zbikowski، أحد منشئي MS-DOS). أحد الأمثلة الأقل شهرة هو المؤشر غير المهيأ في Microsoft Visual C++ (منذ إصدار 2005 من Microsoft Visual Studio)، والذي له العنوان 0xDEADBEEF في وضع التصحيح.

في أنظمة التشغيل المشابهة لنظام UNIX، يتم تحديد نوع الملف عادةً من خلال توقيع الملف، بغض النظر عن امتداد اسمه. أنها توفر أداة مساعدة قياسية للملف لتفسير توقيع الملف.

ممارسة البرمجة السيئة

تُسمى أيضًا "الأرقام السحرية" وهي ممارسة برمجة سيئة عندما تظهر قيمة رقمية في النص المصدر وليس من الواضح ما تعنيه. على سبيل المثال، قد يكون مقتطف مثل هذا، مكتوبًا بلغة Java، سيئًا:

drawSprite(53, 320, 240);

العدد النهائي SCREEN_WIDTH = 640؛ العدد النهائي SCREEN_HEIGHT = 480؛ كثافة العمليات النهائية SCREEN_X_CENTER = SCREEN_WIDTH / 2؛ كثافة العمليات النهائية SCREEN_Y_CENTER = SCREEN_HEIGHT / 2؛ العدد النهائي SPRITE_CROSSHAIR = 53؛ ... drawSprite(SPRITE_CROSSHAIR, SCREEN_X_CENTER, SCREEN_Y_CENTER);

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

بالإضافة إلى ذلك، تعد الأرقام السحرية مصدرًا محتملاً للأخطاء في البرنامج:

  • إذا تم استخدام نفس الرقم السحري أكثر من مرة في برنامج (أو من الممكن استخدامه)، فإن تغييره سيتطلب تعديلات على كل تكرار (بدلاً من تعديل واحد فقط لقيمة الثابت المسمى). إذا لم يتم تصحيح كافة الأحداث، سيحدث خطأ واحد على الأقل.
  • في إحدى الحالات على الأقل، قد يكون هناك خطأ إملائي في الرقم السحري في البداية، وهذا أمر يصعب اكتشافه.
  • قد يعتمد الرقم السحري على معلمة ضمنية أو رقم سحري آخر. إذا لم يتم استيفاء هذه التبعيات، التي لم يتم تحديدها بشكل واضح، فسيحدث خطأ واحد على الأقل.
  • عند تعديل تكرارات رقم سحري واحد، من الممكن عن طريق الخطأ تغيير رقم سحري آخر مستقل ولكن له نفس القيمة العددية.

أرقام سحرية ومنصات مشتركة

في بعض الأحيان، تضر الأرقام السحرية بالرمز المشترك بين الأنظمة الأساسية. الحقيقة هي أنه في لغة C، في أنظمة التشغيل 32 و 64 بت، يتم ضمان حجم الأنواع char والأنواع القصيرة والطويلة، في حين يمكن تغيير حجم int و long و size_t و ptrdiff_t (للنوعين الأولين، اعتمادًا على تفضيلات مطوري المترجمين، بالنسبة للاثنين الأخيرين - اعتمادًا على سعة البت للنظام المستهدف). في التعليمات البرمجية القديمة أو المكتوبة بشكل سيئ، قد تكون هناك "أرقام سحرية" تشير إلى حجم النوع - عند الانتقال إلى أجهزة ذات سعة بت مختلفة، يمكن أن تؤدي إلى أخطاء طفيفة.

على سبيل المثال:

حجم ثابت NUMBER_OF_ELEMENTS = 10 ؛ طويلة [NUMBER_OF_ELEMENTS]؛ memset(a, 0, 10 * 4); // غير صحيح - من المفترض أن يكون الطول 4 بايت، ويتم استخدام العدد السحري للعناصر memset(a, 0, NUMBER_OF_ELEMENTS * 4); // غير صحيح - من المفترض أن يكون الطول 4 بايت memset(a, 0, NUMBER_OF_ELEMENTS * sizeof(long)); // غير صحيح تمامًا - تكرار لاسم النوع (إذا تغير النوع، فسيتعين عليك تغييره هنا أيضًا) memset (أ، 0، NUMBER_OF_ELEMENTS * حجم (أ [ 0 ]))؛ // صحيح، وهو الأمثل للمصفوفات الديناميكية ذات الحجم غير الصفري memset(a, 0, sizeof(a)); // صحيح، وهو الأمثل للمصفوفات الثابتة

أرقام ليست سحرية

ليس من الضروري تحويل جميع الأرقام إلى ثوابت. على سبيل المثال، رمز ل

يعد البحث عند فحص الملفات من الأنواع المعروفة (أو، كما يقال غالبًا، البحث عن الملفات عن طريق التوقيع) أحد أكثر الطرق فعالية المستخدمة في الأداة المساعدة لاستعادة البيانات R-Studio. يتيح لك استخدام توقيع معين استعادة ملفات من نوع معين في الحالات التي تكون فيها المعلومات المتعلقة ببنية الدليل وأسماء الملفات مفقودة جزئيًا أو كليًا (تالفًا).

عادةً ما يتم استخدام جدول تقسيم القرص لتحديد موقع الملفات. إذا قمت بمقارنة قرص بكتاب، فسيكون جدول الأقسام مشابهًا لجدول محتوياته. عند المسح، يبحث برنامج R-Studio عن أنواع الملفات المعروفة في جدول أقسام القرص باستخدام توقيعات محددة معينة. أصبح هذا ممكنًا بفضل حقيقة أن كل نوع ملف تقريبًا له توقيع فريد أو نمط بيانات. يتم العثور على توقيعات الملف في مكان محدد في بداية الملف وفي كثير من الحالات أيضًا في نهاية الملف. عند المسح، يقوم R-Studio بمطابقة البيانات التي تم العثور عليها مع توقيعات أنواع الملفات المعروفة، مما يسمح بالتعرف عليها واستعادة بياناتها.

باستخدام تقنية فحص أنواع الملفات المعروفة، يسمح لك برنامج R-Studio باستعادة البيانات من الأقراص التي تمت إعادة تهيئتها والتي تمت الكتابة فوق جداول الأقسام الخاصة بها. علاوة على ذلك، إذا تمت الكتابة فوق أحد أقسام القرص أو تلفه أو حذفه، فإن فحص أنواع الملفات المعروفة هو الخيار الوحيد.

لكن كل شيء تقريبًا له عيوبه، وأنواع الملفات المعروفة المستخدمة في R-Studio ليست استثناءً. لذلك، عند فحص أنواع الملفات المعروفة، يسمح لك برنامج R-Studio باستعادة الملفات غير المجزأة فقط، ولكن، كما ذكرنا سابقًا، تكون هذه هي أحدث طريقة ممكنة في معظم الحالات.

يتضمن R-Studio بالفعل توقيعات لأنواع الملفات الأكثر شيوعًا (يمكنك عرض القائمة الكاملة لأنواع الملفات المعروفة في قسم تعليمات R-Studio Online.)

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

الملفات المخصصة للأنواع المعروفة
يتم تخزين التوقيعات المخصصة لأنواع الملفات المعروفة في ملف XML المحدد في مربع حوار الإعدادات. تتكون إضافة التوقيع من جزأين:

  1. تحديد توقيع الملف الموجود في بداية الملف، وفي حال وجوده، في نهايته.
  2. قم بإنشاء ملف XML يحتوي على توقيع الملف ومعلومات أخرى حول نوع الملف.

كل هذا يمكن القيام به باستخدام برنامج R-Studio. في الوقت نفسه، لا تحتاج إلى أن تكون خبيرًا في مجال إنشاء (تحرير) مستندات XML أو في مجال التحرير السداسي العشري - سيناقش هذا الدليل (المقالة)، الذي يستهدف المستخدم الأكثر مبتدئًا، بالتفصيل جميع مراحل هذه العملية.

مثال: إضافة توقيع لملف MP4 (XDCam-EX Codec)
دعونا نلقي نظرة على إضافة توقيع ملف باستخدام مثال ملف .MP4 الذي تم إنشاؤه باستخدام Sony XDCAM-EX. يمكنك استخدامه، على سبيل المثال، في حالة تلف بطاقة SD للملفات التي لم تتمكن بعد من حفظها على القرص الصلب لجهاز الكمبيوتر الخاص بك.

المرحلة الأولى: تحديد توقيع الملف
لتحديد توقيع الملف، خذ بعين الاعتبار أمثلة لملفات بنفس التنسيق.

فلتكن هذه أربعة ملفات فيديو من Sony XDCAM-EX:
ZRV-3364_01.MP4
ZRV-3365_01.MP4
ZRV-3366_01.MP4
ZRV-3367_01.MP4

ولتسهيل النظر، فلتكن هذه ملفات صغيرة. من الصعب عرض الملفات الأكبر حجمًا بالتنسيق السداسي العشري.

1. افتح الملفات في برنامج R-Studio. للقيام بذلك، انقر بزر الماوس الأيمن على كل ملف وحدد عرض/تحرير من قائمة السياق.

2. دعونا نقارن الملفات. سوف نبحث عن نفس النمط الموجود في الملفات الأربعة. سوف يظهر توقيع الملف. عادة، يتم العثور على توقيعات الملف في بداية الملف، ولكن في بعض الأحيان في النهاية.

3. حدد توقيع الملف في بداية الملف. في مثالنا، يقع في بداية الملف. لاحظ أن هذا لا يحدث دائمًا - غالبًا ما يكون توقيع الملف في بداية الملف، ولكن ليس في السطر الأول (الإزاحة).

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


انقر على الصورة لتكبيرها


انقر على الصورة لتكبيرها


انقر على الصورة لتكبيرها


انقر على الصورة لتكبيرها

المنطقة المميزة في الصور هي توقيع الملف لهذا النوع من الملفات. يتم تقديمه في كل من النص والتنسيق الست عشري.

في النموذج النصي، يبدو توقيع الملف كما يلي:
....ftypmp42....mp42........مجاناً

تشير النقاط (".") إلى الأحرف التي لا يمكن تمثيلها في نموذج نصي. لذلك، من الضروري أيضًا توفير الشكل السداسي العشري لتوقيع الملف:
00 00 00 18 66 74 79 6D 70 34 32 00 00 00 00 6D 70 34 32 00 00 00 00 00 00 00 08 66 72 65 65

4. وبنفس الطريقة سنحدد توقيع الملف ولكن في نهاية الملف. قد يكون توقيع ملف مختلفًا وطولًا مختلفًا.

توضح الصور أدناه توقيع الملف في نهاية الملف:


انقر على الصورة لتكبيرها


انقر على الصورة لتكبيرها


انقر على الصورة لتكبيرها


انقر على الصورة لتكبيرها

يرجى ملاحظة أن البيانات الموجودة قبل المنطقة المحددة (توقيع الملف) هي نفسها في جميع الملفات الأربعة. هذه معلومات فنية لا تمثل توقيع ملف، ولكنها تشير إلى أن جميع الصور (الملفات) الأربع تم التقاطها باستخدام نفس الكاميرا وبنفس المعلمات. من الممكن عادةً التمييز بين أنماط المطابقة والمعلومات التقنية من توقيع الملف. في مثالنا، في السطر الأخير قبل بدء توقيع الملف، نرى النص "RecordingMode type="normal""، والذي يشير بوضوح إلى أن هذا نوع من معلمات الملف، وليس توقيعًا. انتبه دائمًا لهذا السطر حتى لا تقوم بتضمين معلومات فنية عن طريق الخطأ في توقيع الملف.

في حالتنا، توقيع الملف هو النص التالي:
...
دعنا نذكرك أن النقاط تشير إلى أحرف لا يمكن تمثيلها في شكل نص.

في النظام الست عشري، يبدو توقيع الملف كما يلي:
3N 2F 4E 6F 6E 52 65 61 6N 54 69 6A 65 4A 65 74 61 3E 0D 0A 00
يرجى ملاحظة: التوقيع لن يكون دائمًا في نهاية الملف.

المرحلة الثانية: إنشاء ملف XML يصف نوع الملف المعروف
الآن، بعد تحديد توقيع الملف، يمكنك إنشاء ملف XML وتضمين نوع الملف المقابل في R-Studio. ويمكن أن يتم ذلك بطريقتين:

2.1 استخدام محرر توقيع الملف الرسومي المدمج:
حدد عنصر الإعدادات من القائمة "أدوات"، وفي مربع الحوار "الإعدادات" الذي يفتح، انقر فوق علامة التبويب "أنواع الملفات المعروفة" ثم انقر فوق الزر "تحرير أنواع ملفات المستخدم".

انقر على الصورة لتكبيرها

انقر فوق الزر "إنشاء نوع ملف" في مربع الحوار "تحرير أنواع ملفات المستخدم".
اضبط الخيارات التالية:

  • المعرف - معرف رقمي فريد. سيتم اختيار هذا الرقم بشكل عشوائي؛ الشيء الوحيد هو أنه لا ينبغي أن يتطابق مع المعرف الرقمي لأي نوع ملف آخر.
  • وصف المجموعة - المجموعة التي سيتم وضع الملفات الموجودة فيها في R-Studio. يمكنك تعيين إما مجموعة جديدة، أو تحديد واحدة من تلك الموجودة بالفعل. بالنسبة لنا ستكون هذه مجموعة "فيديو الوسائط المتعددة (الوسائط المتعددة: فيديو)".
  • الوصف - وصف موجز لنوع الملف. في مثالنا، يمكنك استخدام، على سبيل المثال، "Sony cam video, XDCam-EX".
  • الامتداد - امتداد الملفات من هذا النوع. في حالتنا - mp4.

تعد معلمة الميزات اختيارية، وفي حالتنا لا نحتاج إلى استخدامها.

انقر على الصورة لتكبيرها

بعد ذلك، تحتاج إلى إدخال توقيع ملف البداية والنهاية. للقيام بذلك، حدد "ابدأ" ثم في قائمة السياق أمر "إضافة توقيع".

انقر على الصورة لتكبيرها

ثم انقر مرتين على الحقل<пустая сигнатура> () وأدخل النص المناسب.

انقر على الصورة لتكبيرها

ثم قم بإنشاء توقيع الملف النهائي. تأكد من إدخال 21 في العمود من.

انقر على الصورة لتكبيرها

لقد نجحت في إنشاء توقيعك الخاص لأنواع الملفات المعروفة.

الآن أنت بحاجة إلى حفظه. هناك طريقتان: يمكنك إما حفظه في الملف الافتراضي المحدد في علامة التبويب الرئيسية في مربع الحوار "الإعدادات" بالنقر فوق الزر "حفظ". أو انقر فوق الزر "حفظ باسم..." واحفظ التوقيع في ملف آخر.

2.2 إنشاء ملف XML يدويًا يصف نوع ملف معروف:
لإنشاء هذا الملف، سوف نستخدم XML الإصدار 1.0 وترميز UTF-8. لا تيأس إذا كنت لا تعرف ما هو هذا - فقط افتح أي محرر نصوص (على سبيل المثال، Notepad.exe) وأدخل النص التالي في السطر الأول:

بعد ذلك، سنقوم بإنشاء علامة XML تحدد نوع الملف (FileType). مع الأخذ بعين الاعتبار سمات XML الموضحة مسبقًا، ستبدو العلامة كما يلي:

دعونا ندرجه مباشرة بعد ذلك

بعد ذلك، نحدد توقيع الملف (tag ). سيكون التوقيع الأولي (في بداية الملف) داخل العلامة بدون أي صفات. نحن نستخدم نوع نص التوقيع، ولكن في نفس الوقت نستبدل الأحرف السداسية العشرية التي لا يمكن تمثيلها في شكل نص. قبل كل حرف سداسي عشري نقوم بإدخال "\x" وبالتالي العلامة مع توقيع الملف سيبدو كما يلي:

إذا كان موجودًا، فيجب عليك أيضًا تحديد التوقيع النهائي (في نهاية الملف). يستخدم هذا نفس العلامة، ولكن مع عنصر "من" وسمة "النهاية". سوف يبدو مثل هذا:

تذكر أن توقيع الملف النهائي لم يحتوي على أحرف غير نصية، ولكنه يحتوي على خطوط مائلة وأقواس مثلثة. لتجنب الارتباك والأخطاء في بناء جملة XML، سنقوم باستبدال الأحرف "/" في التوقيع<" и ">"قيمها السداسية العشرية.

في النهاية، بعد توقيع الملف، يجب أن تكون هناك علامات إغلاق FileType وFileTypeList:

لذلك يجب أن يبدو الملف بأكمله كما يلي:


\x00\x00\x00\x18ftypmp42\x00\x00\x00\x00mp42\x00\x00\x00\x00\x00\x00\x00\x08free
\x3C\x2FNonRealTimeMeta\x3E\x0D\x0A\x00

تذكر: بناء جملة XML حساس لحالة الأحرف، لذا ستكون العلامة الصحيحة ، لكن لا .

لنحفظ الملف بتنسيق نصي بالملحق .xml. على سبيل المثال: SonyCam.xml.

لقد نجحنا في إنشاء توقيعنا الخاص لأنواع الملفات المعروفة. هذا المثال كافٍ لفهم المبادئ الأساسية لإنشاء نوع ملف مخصص. يمكن للمستخدمين الأكثر خبرة استخدام XML الإصدار 2.0. يمكنك قراءة المزيد حول هذا الأمر في قسم تعليمات R-Studio عبر الإنترنت.

الخطوة 3: فحص وإضافة ملف يصف نوع ملف معروف
الخطوة التالية هي إضافة (تحميل) ملف XML الخاص بك إلى R-Studio. في هذه الحالة، سيتم فحصه تلقائيا.

لنقم بتحميل ملف XML الذي تم إنشاؤه في المرحلة السابقة إلى R-Studio. للقيام بذلك، حدد عنصر الإعدادات في قائمة الأدوات. في منطقة أنواع ملفات المستخدم ضمن علامة التبويب الرئيسية في مربع حوار الإعدادات، أضف ملف XML الذي أنشأناه (SonyCam.xml). انقر فوق الزر "تطبيق".

انقر على الصورة لتكبيرها

2. أجب بنعم على طلب تنزيل نوع ملف جديد.

انقر على الصورة لتكبيرها

3. للتحقق من أنه تم تحميل نوع الملف بنجاح، انقر فوق علامة التبويب أنواع الملفات المعروفة في مربع حوار الإعدادات. تذكر أننا أضفنا نوع الملف إلى مجموعة فيديو الوسائط المتعددة. بعد توسيع هذه المجموعة (المجلد)، يجب أن نرى عنصرًا بالوصف الذي حددناه عند إنشاء ملف XML: Sony cam video, XDCam-EX (.mp4).

انقر على الصورة لتكبيرها


انقر على الصورة لتكبيرها

إذا كان هناك أي أخطاء في بناء جملة الملف، فسترى الرسالة المقابلة:

انقر على الصورة لتكبيرها

في هذه الحالة، تحقق من ملف XML الخاص بك مرة أخرى بحثًا عن الأخطاء. تذكر: بناء جملة XML حساس لحالة الأحرف ويجب أن تحتوي كل علامة على علامة إغلاق في النهاية.

الخطوة 4: اختبار الملف الذي يصف نوع ملف معروف
للتحقق من صحة نوع الملف المخصص الذي أنشأناه، فلنحاول العثور على ملفات .mp4 على محرك أقراص USB محمول قابل للإزالة.

1. ضمن نظام التشغيل Windows Vista أو Windows 7، قم بإجراء تنسيق كامل (ليس سريعًا) للقرص أو استخدم أداة مساعدة لتنظيف مساحة القرص (على سبيل المثال، R-Wipe & Clean) لحذف كافة البيانات الموجودة على القرص بالكامل. دع قرص USB يتم تنسيقه بتنسيق FAT32 (لا يتجاوز حجم الملفات التي تم البحث عنها 2 جيجابايت).

2. انسخ ملفات الاختبار إلى القرص وأعد تشغيل الكمبيوتر بحيث يتم حفظ محتويات ذاكرة التخزين المؤقت على القرص. يمكنك أيضًا فصل محرك الأقراص الخارجي ثم توصيله مرة أخرى.

3. في نظام التشغيل، سيتم تعريف محرك الأقراص، على سبيل المثال، محرك الأقراص المنطقي F:\.

4. لنبدأ برنامج R-Studio. حدد محرك الأقراص الخاص بنا (F:\) وانقر فوق الزر "مسح".

انقر على الصورة لتكبيرها

5. في مربع حوار المسح الضوئي، في منطقة (نظام الملفات)، انقر فوق الزر تغيير... وقم بإلغاء تحديد جميع المربعات. بهذه الطريقة سنقوم بتعطيل البحث عن أنظمة الملفات والملفات باستخدام جدول الأقسام.
انقر على الصورة لتكبيرها

6. حدد خانة الاختيار بحث إضافي عن أنواع الملفات المعروفة. سيسمح هذا لبرنامج R-Studio بالبحث عن أنواع الملفات المعروفة عند المسح.

7. لبدء المسح، انقر فوق زر المسح الضوئي.

8. دعنا ننتظر بينما يقوم برنامج R-Studio بفحص القرص. ستعرض علامة التبويب معلومات المسح تقدم المسح (التقدم).


انقر على الصورة لتكبيرها

9. بعد اكتمال المسح، حدد عنصر Extra Found Files وانقر عليه نقرًا مزدوجًا.


انقر على الصورة لتكبيرها

10. ستكون ملفات الاختبار الخاصة بنا موجودة في مجلد Sony cam video أو XDCam-EX (أو في مجلد باسم آخر يتوافق مع وصف نوع الملف المحدد في المرحلة الثانية).


انقر على الصورة لتكبيرها

يمكنك أن ترى أنه لم تتم استعادة أسماء الملفات والتواريخ والمواقع (المجلدات) لأن هذه المعلومات مخزنة في نظام الملفات. لذلك، سيعرض برنامج R-Studio تلقائيًا كل ملف باسم جديد.

ومع ذلك، فمن الواضح أن محتويات الملفات ليست معطوبة. للتأكد من ذلك، دعونا نفتحها في البرنامج المناسب، على سبيل المثال مشغل الوسائط VLC.


انقر على الصورة لتكبيرها

خاتمة
تتيح لك قدرة R-Studio على البحث عن أنواع الملفات المعروفة استعادة البيانات حتى من القرص الذي تمت الكتابة فوق أنظمة ملفاته. يمكنك البحث عن الملفات بشكل فعال باستخدام توقيعاتها، وهو أمر مفيد بشكل خاص إذا كنت تعرف بالضبط نوع الملفات التي يتم استعادتها، كما هو الحال في مثالنا. تتيح لك القدرة على إنشاء أنواع ملفات مخصصة إضافة أي ملف يحتوي على توقيع ملف محدد إلى قائمة أنواع الملفات المعروفة.

لقد كلفني مديري بمهمة مثيرة للاهتمام إلى حد ما. في وقت قصير، قم بكتابة محلل ملفات قابل للتنفيذ يمكنه العثور على أجسام الفيروسات بناءً على التوقيعات وتحديد أداة التعبئة/التشفير المستخدمة. ظهر النموذج الأولي النهائي في غضون ساعتين.

كلمة المؤلف

تحليل التوقيع

يعد البحث عن كائن ضار باستخدام التوقيعات أمرًا يمكن لأي برنامج مكافحة فيروسات القيام به. بشكل عام، التوقيع هو وصف رسمي لخصائص معينة يمكن من خلالها تحديد أن الملف الذي يتم فحصه هو فيروس وفيروس محدد جيدًا.

هناك تقنيات مختلفة هنا. البديل هو استخدام توقيع مكون من N بايت لكائن ضار. في هذه الحالة، لا يمكنك إجراء مقارنة غبية، ولكن المقارنة باستخدام بعض القناع (مثل البحث عن البايتات EB ؟؟ ؟؟ CD 13). أو وضع شروط إضافية مثل "يجب أن تكون مثل هذه البايتات عند نقطة الدخول إلى البرنامج" وهكذا. يعد توقيع البرامج الضارة أمرًا خاصًا.

بنفس الطريقة، يتم وصف بعض العلامات التي يمكنك من خلالها تحديد أن الملف القابل للتنفيذ مملوء بواحد أو آخر من التشفير أو باكر (على سبيل المثال، ASPack العادي). إذا قرأت مجلتنا بعناية، فمن المؤكد أنك سمعت عن أداة مثل PEiD، القادرة على تحديد أدوات الحزم والتشفير والمترجمين الأكثر استخدامًا (تحتوي قاعدة البيانات على عدد كبير من التوقيعات) لملف PE المنقول إليها . للأسف، لم يتم إصدار إصدارات جديدة من البرنامج لفترة طويلة، ومؤخرا ظهرت رسالة على الموقع الرسمي مفادها أن المشروع لن يكون لديه مزيد من التطوير. إنه لأمر مؤسف، لأن إمكانيات PEiD (خاصة بالنظر إلى نظام البرنامج المساعد) يمكن أن تكون مفيدة للغاية بالنسبة لي. وبعد تحليل قصير، أصبح من الواضح أن هذا لم يكن خيارا. ولكن بعد البحث في المدونات باللغة الإنجليزية، وجدت بسرعة ما يناسبني. مشروع يارا (code.google.com/p/yara-project).

ما هي يارا؟

منذ البداية، كنت مقتنعًا بأنه في مكان ما على الإنترنت يوجد بالفعل تطوير مفتوح المصدر يتولى مهمة تحديد المراسلات بين توقيع معين والملف الذي يتم فحصه. إذا تمكنت من العثور على مثل هذا المشروع، فيمكن وضعه بسهولة على قضبان تطبيق الويب وإضافة توقيعات مختلفة هناك والحصول على ما هو مطلوب مني. بدأت الخطة تبدو أكثر واقعية عندما قرأت وصف مشروع YARA.

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

إذا تم استيفاء شروط إحدى القواعد للملف الذي يتم فحصه، فسيتم تحديده وفقًا لذلك (على سبيل المثال، دودة كذا وكذا). مثال بسيط لقاعدة لفهم ما نتحدث عنه:

القاعدة Silent_banker: مصرفي
{
التعريف:
وصف = "هذا مجرد مثال"
مستوى_الخيط = 3
in_the_wild = صحيح
سلاسل:
$أ = (6أ 40 68 00 30 00 00 6 أ 14 8 د 91)
$ ب = (8D 4D B0 2B C1 83 C0 27 99 6A 4E 59 F7 F9)
$c = "UVODFRYSIHLNWPEJXQZAKCBGMT"
حالة:
$a أو $b أو $c
}

في هذه القاعدة، نخبر YARA أن أي ملف يحتوي على واحد على الأقل من نماذج السلاسل الموضحة في المتغيرات $a، $b، $c يجب أن يتم تصنيفه على أنه حصان طروادة Silent_banker. وهذه قاعدة بسيطة للغاية. في الواقع، يمكن أن تكون القواعد أكثر تعقيدًا (سنتحدث عن هذا أدناه).
وحتى قائمة المشاريع التي تستخدمه تتحدث عن سلطة مشروع YARA، وهي:

  • خدمات استخبارات البرامج الضارة من VirusTotal (vt-mis.com)؛
  • jsunpack-n (jsunpack.jeek.org);
  • نحن نشاهد موقع الويب الخاص بك (wewatchyourwebsite.com).

تتم كتابة جميع التعليمات البرمجية بلغة Python، ويتم تقديم الوحدة نفسها للمستخدم لاستخدامها في تطويره، وببساطة ملف قابل للتنفيذ لاستخدام YARA كتطبيق مستقل. كجزء من عملي، اخترت الخيار الأول، ولكن من أجل البساطة في هذه المقالة، سنستخدم المحلل ببساطة كتطبيق وحدة تحكم.

بعد بعض البحث، اكتشفت بسرعة كيفية كتابة قواعد لـ YARA، بالإضافة إلى كيفية إرفاق توقيعات الفيروسات من البرامج المجانية والحزم من PEiD بها. لكننا سنبدأ بالتثبيت.

تثبيت

كما قلت سابقًا، المشروع مكتوب بلغة Python، لذلك يمكن تثبيته بسهولة على Linux وWindows وMac. في البداية، يمكنك فقط أن تأخذ الثنائي. إذا قمنا باستدعاء التطبيق في وحدة التحكم، فسنحصل على قواعد التشغيل.

$ يارا
الاستخدام: يارا ... ... ملف | معرف المنتج

أي أن تنسيق استدعاء البرنامج هو كما يلي: أولا يوجد اسم البرنامج، ثم قائمة الخيارات، وبعد ذلك تتم الإشارة إلى الملف الذي يحتوي على القواعد، وفي النهاية - اسم الملف الجاري فحصها (أو الدليل الذي يحتوي على الملفات)، أو معرف العملية. الآن أود أن أشرح بطريقة جيدة كيفية وضع هذه القواعد ذاتها، لكنني لا أريد أن أثقل كاهلك على الفور بنظرية جافة. لذلك، سنفعل الأشياء بشكل مختلف ونستعير توقيعات أشخاص آخرين حتى تتمكن YARA من تنفيذ إحدى المهام التي حددناها - الكشف الكامل عن الفيروسات عن طريق التوقيعات.

مكافحة الفيروسات الخاصة بك

السؤال الأهم: من أين يمكن الحصول على قاعدة بيانات توقيعات الفيروسات المعروفة؟ تقوم شركات مكافحة الفيروسات بمشاركة قواعد البيانات هذه فيما بينها بشكل نشط (بعضها أكثر سخاءً والبعض الآخر أقل). لأكون صادقًا، في البداية كنت أشك في أن شخصًا ما سينشر مثل هذه الأشياء علانية في مكان ما على الإنترنت. ولكن، كما اتضح، هناك أناس طيبون. قاعدة البيانات المناسبة من برنامج مكافحة الفيروسات ClamAV الشهير متاحة للجميع (clamav.net/lang/en). في قسم "أحدث إصدار ثابت"، يمكنك العثور على رابط لأحدث إصدار من منتج مكافحة الفيروسات، بالإضافة إلى روابط لتنزيل قواعد بيانات فيروسات ClamAV. سنهتم في المقام الأول بملفات main.cvd (db.local.clamav.net/main.cvd) وdaily.cvd (db.local.clamav.net/daily.cvd).

الأول يحتوي على قاعدة البيانات الرئيسية للتوقيعات، والثاني يحتوي على قاعدة البيانات الأكثر اكتمالا في الوقت الراهن مع إضافات مختلفة. يعد Daily.cvd، الذي يحتوي على أكثر من 100000 ظهور للبرامج الضارة، كافيًا تمامًا لهذا الغرض. ومع ذلك، فإن قاعدة بيانات ClamAV ليست قاعدة بيانات YARA، لذلك نحتاج إلى تحويلها إلى التنسيق المطلوب. ولكن كيف؟ بعد كل شيء، نحن لا نعرف حتى الآن أي شيء عن تنسيق ClamAV أو تنسيق Yara. لقد تم بالفعل التعامل مع هذه المشكلة أمامنا من خلال إعداد برنامج نصي صغير يحول قاعدة بيانات توقيع فيروس ClamAV إلى مجموعة من قواعد YARA. يسمى البرنامج النصي clamav_to_yara.py وكتبه ماثيو ريتشارد (bit.ly/ij5HVs). تنزيل البرنامج النصي وتحويل قواعد البيانات:

$ بيثون clamav_to_yara.py -f daily.cvd -o clamav.yara

نتيجة لذلك، في ملف clamav.yara، سنتلقى قاعدة بيانات التوقيع التي ستكون جاهزة للاستخدام على الفور. دعونا الآن نجرب الجمع بين YARA وقاعدة بيانات ClamAV عمليًا. يتم إجراء مسح مجلد باستخدام التوقيع باستخدام أمر واحد:

$ yara -r clamav.yara /pentest/msf3/data

يحدد الخيار -r أنه يجب إجراء الفحص بشكل متكرر عبر كافة المجلدات الفرعية للمجلد الحالي. إذا كانت هناك أي أجسام فيروسات في المجلد /pentest/msf3/data (على الأقل تلك الموجودة في قاعدة بيانات ClamAV)، فسوف تقوم YARA بالإبلاغ عن ذلك على الفور. من حيث المبدأ، هذا ماسح ضوئي جاهز للتوقيع. لمزيد من الراحة، كتبت نصًا بسيطًا يتحقق من تحديثات قاعدة بيانات ClamAV، وينزل التوقيعات الجديدة ويحولها إلى تنسيق YARA. لكن هذه تفاصيل بالفعل. اكتمل جزء واحد من المهمة، ويمكنك الآن البدء في وضع قواعد لتحديد أدوات الحزم/التشفير. ولكن للقيام بذلك كان علي أن أتعامل معهم قليلاً.

إلعبوا وفق القواعد

لذا، القاعدة هي الآلية الرئيسية للبرنامج التي تسمح لك بتخصيص ملف معين لفئة معينة. يتم وصف القواعد في ملف (أو ملفات) منفصل وهي في المظهر تشبه إلى حد كبير بنية struct() من لغة C/C++.

حكم باد بوي
{
سلاسل:
$a = "win.exe"
$b = "http://foo.com/badfi le1.exe"
$c = "http://bar.com/badfi le2.exe"
حالة:
$a و$b أو $c)
}

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

1. تبدأ كل قاعدة بقاعدة الكلمة الأساسية، متبوعة بمعرف القاعدة. يمكن أن تحتوي المعرفات على نفس أسماء المتغيرات في C/C++، أي أنها يمكن أن تتكون من أحرف وأرقام، ولا يمكن أن يكون الحرف الأول رقمًا. الحد الأقصى لطول اسم المعرف هو 128 حرفًا.

2. عادةً، تتكون القواعد من قسمين: قسم التعريف (السلاسل) وقسم الشرط (الشرط). يحدد قسم السلاسل البيانات التي على أساسها سيقرر قسم الشرط ما إذا كان ملف معين يفي بشروط معينة.

3. كل سطر في قسم السلاسل له معرف خاص به، والذي يبدأ بعلامة $ - بشكل عام، مثل إعلان المتغير في PHP. يدعم YARA السلاسل العادية المحاطة بعلامات اقتباس مزدوجة ("") والسلاسل السداسية العشرية المحاطة بأقواس متعرجة (())، بالإضافة إلى التعبيرات العادية:

$my_text_string = "النص هنا"
$my_hex_string = ( E2 34 A1 C8 23 فيسبوك )

4. يحتوي قسم الشرط على كل منطق القاعدة. يجب أن يحتوي هذا القسم على تعبير منطقي يحدد متى يتطابق الملف أو العملية مع القاعدة. عادةً ما يشير هذا القسم إلى الخطوط المعلنة مسبقًا. ويتم التعامل مع معرف السلسلة كمتغير منطقي يُرجع صحيحًا إذا تم العثور على السلسلة في الملف أو ذاكرة العملية، ويُرجع خطأً بخلاف ذلك. تحدد القاعدة أعلاه أنه يجب تصنيف الملفات والعمليات التي تحتوي على السلسلة win.exe وأحد عنواني URL على أنها BadBoy (حسب اسم القاعدة).

5. تسمح السلاسل السداسية العشرية بثلاث بنيات تجعلها أكثر مرونة: أحرف البدل، والقفزات، والبدائل. البدائل هي أماكن في سلسلة غير معروفة ويمكن استبدالها بأي قيمة. يشار إليها بالرمز "؟":

$hex_string = ( E2 34 ؟؟ C8 A؟ FB )

يعد هذا الأسلوب مناسبًا جدًا عند تحديد سلاسل طولها معروف، ولكن قد يختلف المحتوى. إذا كان من الممكن أن يكون جزء من السلسلة بأطوال مختلفة، فمن الملائم استخدام النطاقات:

$hex_string = ( F4 23 62 B4 )

يعني هذا الإدخال أنه في منتصف السطر يمكن أن يكون هناك من 4 إلى 6 بايتات مختلفة. يمكنك أيضًا تنفيذ خيار بديل:

$hex_string = ( F4 23 (62 B4 | 56) 45 )

هذا يعني أنه بدلاً من البايت الثالث يمكن أن يكون هناك 62 B4 أو 56، مثل هذا الإدخال يتوافق مع الأسطر F42362B445 أو F4235645.

6. للتحقق من أن سلسلة معينة موجودة في إزاحة معينة في ملف أو مساحة عنوان العملية، يتم استخدام عامل التشغيل at:

$a عند 100 و $b عند 200

إذا كان من الممكن أن تكون السلسلة ضمن نطاق عنوان معين، فسيتم استخدام عامل التشغيل in:

$a في (0..100) و$b في (100..fi lesize)

في بعض الأحيان تنشأ مواقف عندما تحتاج إلى تحديد أن الملف يجب أن يحتوي على رقم معين من مجموعة معينة. يتم ذلك باستخدام عامل التشغيل:

قاعدة المثال 1
{
سلاسل:
$foo1 = "الدمية1"
$foo2 = "الدمية2"
$foo3 = "dummy3"
حالة:
2 من ($foo1،$foo2،$foo3)
}

تتطلب القاعدة المذكورة أعلاه أن يحتوي الملف على أي سطرين من المجموعة ($foo1,$foo2,$foo3). بدلاً من تحديد عدد محدد من الأسطر في الملف، يمكنك استخدام المتغيرات أي (سطر واحد على الأقل من مجموعة معينة) والجميع (جميع الأسطر من مجموعة معينة).

7. حسنًا، الاحتمال الأخير المثير للاهتمام الذي يجب أخذه في الاعتبار هو تطبيق شرط واحد على العديد من الصفوف. هذه الميزة تشبه إلى حد كبير عامل التشغيل، ولكن العامل الأكثر قوة هو عامل التشغيل for..of :

للتعبير عن string_set: (boolean_expression)

يجب قراءة هذا الإدخال على النحو التالي: من السلاسل المحددة في مجموعة string_، يجب أن تفي أجزاء التعبير على الأقل بشرط التعبير المنطقي. أو بمعنى آخر: يتم تقييم التعبير المنطقي لكل سلسلة في string_set، ويجب أن تُرجع التعبيرات الواردة منها True. بعد ذلك، سننظر إلى هذا البناء باستخدام مثال محدد.

صنع PEiD

لذلك، عندما يصبح كل شيء أكثر أو أقل وضوحًا فيما يتعلق بالقواعد، يمكننا البدء في تنفيذ كاشف الحزم والتشفير في مشروعنا. في البداية، كمواد مصدرية، قمت باستعارة توقيعات شركات التعبئة المعروفة من نفس PEiD. يوجد في مجلد المكونات الإضافية ملف userdb.txt، والذي يحتوي على ما نحتاجه. كان هناك 1850 توقيعًا في قاعدة البيانات الخاصة بي.

كثيرًا جدًا، لذا من أجل استيرادها بالكامل، أنصحك بكتابة نوع من البرامج النصية. تنسيق قاعدة البيانات هذه بسيط - يتم استخدام ملف نصي عادي يقوم بتخزين السجلات مثل:


التوقيع = 50E8؟؟ ؟؟ ؟؟ ؟؟ 58 25؟؟ F0 FF FF 8B C8 83 C1 60 51 83 C0 40 83 EA 06 52 FF 20 9D C3
ep_only = صحيح

يحدد السطر الأول اسم أداة التعبئة، والذي سيتم عرضه في PEiD، ولكنه سيكون معرف القاعدة بالنسبة لنا. والثاني هو التوقيع نفسه. والثالث هو علامة ep_only، التي تشير إلى ما إذا كان سيتم البحث عن سطر معين فقط عند عنوان نقطة الإدخال، أو عبر الملف بأكمله.

حسنًا، دعنا نحاول إنشاء قاعدة، على سبيل المثال، لـ ASPack؟ وكما تبين، لا يوجد شيء معقد في هذا الشأن. أولاً، لنقم بإنشاء ملف لتخزين القواعد ونطلق عليه، على سبيل المثال، packers.yara. ثم نقوم بالبحث في قاعدة بيانات PEiD عن جميع التوقيعات التي تتضمن ASPack في أسمائها وننقلها إلى القاعدة:

قاعدة ASPack
{
سلاسل:
$ = ( 60 E8 ?? ?? ?? 5D 81 ED ?? ?? (43 | 44) ?? B8 ?? ?? (43 | 44) ?? 03 C5 )
$ = ( 60 EB ?? 5D EB ?? FF ??? ?? ?? ?? E9 )
[.. يقطع..]
$ = ( 60 E8 03 00 00 00 E9 EB 04 5D 45 55 C3 E8 01 )
حالة:
لأي منهم: (عند نقطة الدخول)
}

تحتوي جميع السجلات التي تم العثور عليها على علامة ep_only مضبوطة على true، أي أن هذه السطور يجب أن تكون موجودة في عنوان نقطة الإدخال. ولذلك نكتب الشرط التالي: "لأي منهم: (عند نقطة الدخول)".

وبالتالي، فإن وجود واحد على الأقل من الأسطر المحددة في عنوان نقطة الإدخال يعني أن الملف مزود بـ ASPack. يرجى أيضًا ملاحظة أنه في هذه القاعدة يتم تحديد جميع الأسطر ببساطة باستخدام علامة $، بدون معرف. هذا ممكن لأنه في قسم الحالة لا نصل إلى أي شروط محددة، ولكننا نستخدم المجموعة بأكملها.

للتحقق من وظائف النظام الناتج، فقط قم بتشغيل الأمر في وحدة التحكم:

$ yara -r packers.yara somefi le.exe

بعد أن قمت بإطعام عدد من التطبيقات المجمعة مع ASPack هناك، كنت مقتنعًا بأن كل شيء يعمل!

نموذج أولي جاهز

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