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

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

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

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

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

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

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

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

drawSprite (53 ، 320 ، 240) ؛

النهائي int SCREEN_WIDTH = 640 ؛ النهائي int SCREEN_HEIGHT = 480 ؛ النهائي int SCREEN_X_CENTER = SCREEN_WIDTH / 2 ؛ النهائي int SCREEN_Y_CENTER = SCREEN_HEIGHT / 2 ؛ النهائي int SPRITE_CROSSHAIR = 53 ؛ ... drawSprite (SPRITE_CROSSHAIR ، SCREEN_X_CENTER ، SCREEN_Y_CENTER) ،

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

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

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

أرقام سحرية ومتعددة المنصات

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

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

حجم ثابت_ NUMBER_OF_ELEMENTS = 10 ؛ طويلة [NUMBER_OF_ELEMENTS] ؛ memset (أ ، 0 ، 10 * 4) ؛ // خطأ - يفترض أن الطول 4 بايت ، ويستخدم العدد السحري للعناصر memset (a، 0، NUMBER_OF_ELEMENTS * 4) ؛ // خطأ - يفترض أن طول long هو 4 بايت memset (a، 0، NUMBER_OF_ELEMENTS * sizeof (long)) ؛ // ليس صحيحًا تمامًا - تكرار اسم النوع (إذا تغير النوع ، فسيتعين عليك تغييره هنا أيضًا) memset (a، 0، NUMBER_OF_ELEMENTS * sizeof (a [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 e المحدد في مربع الحوار "خيارات". تتكون إضافة التوقيع من جزأين:

  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 6D 70 34 32 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. يمكنك تعيين إما مجموعة جديدة، أو اختر واحدة من تلك الموجودة بالفعل. بالنسبة لنا ستكون مجموعة "Multimedia Video (Multimedia: Video)".
  • وصف- وصف قصيرنوع الملف. في مثالنا ، يمكنك استخدام ، على سبيل المثال ، "Sony cam video، XDCam-EX".
  • الامتداد - امتداد الملف من هذا النوع. في حالتنا - mp4.

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

اضغط على الصورة لتكبيرها

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

اضغط على الصورة لتكبيرها

ثم انقر نقرًا مزدوجًا فوق الحقل<пустая сигнатура> () وأدخل النص المناسب.

اضغط على الصورة لتكبيرها

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

اضغط على الصورة لتكبيرها

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

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

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

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

أدخله بعد ذلك مباشرة

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

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

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

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

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

4. قم بتشغيل برنامج R-Studio. حدد محرك الأقراص الخاص بنا (F: \) وانقر فوق الزر Scan

اضغط على الصورة لتكبيرها

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

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

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

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


اضغط على الصورة لتكبيرها

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


اضغط على الصورة لتكبيرها

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


اضغط على الصورة لتكبيرها

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

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


اضغط على الصورة لتكبيرها

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

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

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

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

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

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

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

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

JPEG

للعثور على إجابة لهذا السؤال ، من الضروري الخوض في مواصفات التنسيق ، وهو "سلف" الملفات الملصقة وفهم هيكلها. يبدأ أي ملف 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. إذا كان الملف لا ينتهي بالتوقيع النهائي ، فإن goto هو موقع آخر توقيع نهائي تم العثور عليه.
يشير الاختلاف الكبير بين حجم الملف والموضع بعد التوقيع الأخير إلى وجود مرفق لاصق. يمكن أن يكون الفرق أكثر من عشرة بايت ، على الرغم من إمكانية تعيين قيم أخرى.

أَزِيز

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

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

القياس يهم

AVI

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

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


WAV

مثل 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 ، ترتيب بايت Endian الكبير) ؛ يشير أيضًا إلى الإزاحة حيث يوجد حجم كتلة البيانات الثانية. في الإزاحة الثامنة والعشرين ، نجد أن حجم الكتلة التالي يساوي 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.

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

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

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

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

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

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

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

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

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

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

  1. CountFat - عدد قطاعات الدهون. يقع عند إزاحة 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 متساويين ، فيمكننا أن نستنتج أنه قد يتم دمج الملفات.

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

كلمة المؤلف

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

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

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

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

ما هو يارا؟

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

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

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

حكم silent_banker: مصرفي
{
ميتا:
وصف = "هذا مجرد مثال"
thread_level = 3
in_the_wild = صحيح
سلاسل:
أ = (6A 40 68 00 30 00 00 6A 14 8D 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 Malware Intelligence Services (vt-mis.com) ؛
  • jsunpack-n (jsunpack.jeek.org) ؛
  • نحن نشاهد موقع الويب الخاص بك (wewatchyourwebsite.com).

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

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

تثبيت

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

يارا دولار
الاستعمال: yara ... ... FILE | PID

أي أن تنسيق استدعاء البرنامج هو كما يلي: يأتي أولاً اسم البرنامج ، ثم قائمة الخيارات ، وبعد ذلك يشار إلى الملف بالقواعد ، وفي النهاية - اسم الملف قيد التحقيق (أو الدليل الذي يحتوي على الملفات) ، أو معرف العملية. سيكون من الجيد الآن شرح كيفية وضع هذه القواعد بالذات ، لكنني لا أريد تحميلك على الفور بنظرية جافة. لذلك ، سوف نتصرف بشكل مختلف ونستعير توقيعات الأشخاص الآخرين حتى يتمكن 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). قم بتنزيل البرنامج النصي وتحويل قواعد البيانات:

$ python clamav_to_yara.py -f daily.cvd -o clamav.yara

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

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

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

العب بالقواعد

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

حكم الولد الشرير
{
سلاسل:
$ a = "win.exe"
$ b = "http://foo.com/badfile1.exe"
$ c = "http://bar.com/badfile2.exe"
حالة:
$ a و ($ b أو $ c)
}

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

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

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

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

$ my_text_string = "أرسل نصًا هنا"
$ my_hex_string = (E2 34 A1 C8 23 FB)

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

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

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

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

السلاسل السداسية بالدولار = (F4 23 62 B4)

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

السلاسل السداسية بالدولار = (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)

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

حكم من Example1
{
سلاسل:
$ foo1 = "dummy1"
$ foo2 = "dummy2"
$ foo3 = "dummy3"
حالة:
2 من (foo1 $ ، foo2 $ ، foo3 $)
}

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

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

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

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

صنع PEiD

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

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


التوقيع = 50 E8 ؟؟ ؟؟ ؟؟ ؟؟ 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 مضبوطة على صواب ، أي يجب وضع هذه السطور في عنوان نقطة الإدخال. لذلك نكتب الشرط التالي: "لأي منهم: ($ عند نقطة الدخول)".

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

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

$ yara -r packers.yara somefi le.exe

بعد تغذية عدة تطبيقات معبأة بـ ASPack هناك ، تأكدت من أن كل شيء يعمل!

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

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

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

7 6 5 4 3 2 1 0 FC: طلب رمز الوظيفة
1 طلب Telegramm
X FCV = تشغيل البت المتناوب
X href = "http://profibus.felser.ch/en/funktionscode.htm#aufruffolgebit"> FCB = بت بديل (من عدد الإطارات)
1 0 (0x0) CV = ClockValue ()
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 (0xC) SRD منخفض = إرسال البيانات وطلبها
0 13 (0xD) ارتفاع 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 إتقان جاهز ، في token ring
0 (0x0) نعم
1 (0x1) UE = خطأ المستخدم
2 (0x2) RR = لا توجد موارد
3 (0x3) RS = لم يتم تمكين SAP
8 (0x8) DL = بيانات منخفضة (حالة عادية مع DP)
9 (0x9) NR = لا توجد بيانات استجابة جاهزة
10 (0xA) DH = البيانات عالية (تشخيص DP معلق)
12 (0xC) RDL = لم يتم استلام البيانات والبيانات منخفضة
13 (0xD) 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 DA = TS / 127 طلب بدون إقرار
طلب حالة FDL / التعريف / حالة LSAP
حذف آخر إقرار
0/1 0/1 DA # TS طلب مجيب آخر
1 0 DA = TS أول طلب FCBM: = 1
SAM: = SA
حذف آخر إقرار / رد
0/1 1 DA = TS
SA = SAM
FCB # FCBM
طلب جديد حذف آخر إقرار / رد
FCBM: = FCB
عقد الإقرار / الاستجابة استعدادًا لإعادة المحاولة
0/1 1 DA = TS
SA = SAM
FCB = FCBM
طلب إعادة المحاولة FCBM: = FCB
كرر الإقرار / الاستجابة واستمر في الاستعداد
0/1 1 DA = TS
SA # SAM
بادئ جديد FCBM: = FCB
SAM: = إقرار تعليق / استجابة SA استعدادًا لإعادة المحاولة

قام FCBM بتخزين FCB في ذاكرة SAM المخزنة SA في الذاكرة




قمة