يحدد رمز الوظيفة (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 فحسب، بل يمكنك أيضًا استخدام العديد من التنسيقات الأخرى. كل تنسيق له خصائصه الخاصة، والتي قد تكون أو لا تكون مناسبة لدور الحاوية. سأصف كيف يمكنك العثور على الملفات الملصقة بالتنسيقات الأكثر شيوعًا أو الإشارة إلى حقيقة اللصق.
يمكن تقسيم طرق الكشف عن الملفات المدمجة إلى ثلاث مجموعات:
بعد هذا التوقيع، توجد معلومات الخدمة، وأيقونة صورة اختياريًا، وأخيرًا الصورة المضغوطة نفسها. في هذا التنسيق، يتم تمييز نهاية الصورة بتوقيع ثنائي البايت 0xFF 0xD9.
جدول التنسيقات وتوقيعاتها:
إن خوارزمية التحقق من اللصق بهذه التنسيقات بسيطة للغاية:
رأس الملف المحلي 1 |
بيانات الملف 1 |
واصف البيانات 1 |
رأس الملف المحلي 2 |
بيانات الملف 2 |
واصف البيانات 2 |
... |
رأس الملف المحلي |
بيانات الملف ن |
واصف البيانات ن |
رأس فك تشفير الأرشيف |
أرشفة سجل البيانات الإضافية |
الدليل المركزي |
للتحقق من أرشيف ZIP، تحتاج إلى العثور على التوقيع النهائي للدليل المركزي، وتخطي 18 بايت والبحث عن التوقيعات ذات التنسيقات المعروفة في منطقة التعليق. يشير الحجم الكبير للتعليق أيضًا إلى حقيقة الإلتصاق.
مثال لحساب الحجم:
لنلقي نظرة على مثال. حجم الكتلة الأولى عند الإزاحة صفر، وهو 28 (00 00 00 1C، ترتيب البايتات Big Endian)؛ ويشير أيضًا إلى الإزاحة التي يوجد بها حجم كتلة البيانات الثانية. عند الإزاحة 28 نجد أن حجم الكتلة التالي يساوي 8 (00 00 00 08). للعثور على حجم الكتلة التالي، تحتاج إلى إضافة أحجام الكتل السابقة التي تم العثور عليها. وبالتالي يتم حساب حجم الملف:
تتمثل طريقة التحقق من وجود ملفات "ثابتة" في هذه المجموعة من التنسيقات في حساب الحجم وفقًا للقواعد المذكورة أعلاه ومقارنتها بحجم الملف الذي يتم فحصه. إذا كان حجم الملف الحالي أصغر بكثير من الحجم المحسوب، فهذا يشير إلى حقيقة الإلتصاق. عند فحص ملفات AVI، من المقبول أن الحجم المحسوب قد يكون أصغر من حجم الملف بسبب وجود أصفار مضافة لمحاذاة الحدود. في هذه الحالة، من الضروري التحقق من وجود الأصفار بعد حجم الملف المحسوب.
يتكون ملف CFB من رأس بحجم 512 بايت وقطاعات متساوية الطول تقوم بتخزين تدفقات البيانات أو معلومات الخدمة. كل قطاع له رقمه غير السالب، باستثناء الأرقام الخاصة: "-1" - أرقام القطاع الحر، "-2" - أرقام القطاع الذي يغلق السلسلة. يتم تعريف جميع سلاسل القطاعات في جدول FAT.
لنفترض أن أحد المهاجمين قام بتعديل ملف .doc معين وقام بلصق ملف آخر في نهايته. هناك عدة طرق مختلفة لاكتشافه أو الإشارة إلى حالة شاذة في المستند.
(حجم الملف - 512) حجم القطاع = 0
إذا لم تكن هذه المساواة راضية، فيمكنك الإشارة إلى حقيقة لصق الملفات. ومع ذلك، فإن هذه الطريقة لها عيب كبير. إذا كان المهاجم يعرف حجم القطاع، فهو يحتاج فقط إلى لصق ملفه و n بايت أخرى بحيث يكون حجم البيانات الملصقة مضاعفًا لحجم القطاع.
دعونا نحدد المساواة:
FileSize = 512 + CountReal * SectorSize، حيث FileSize هو حجم الملف، SectorSize هو حجم القطاع، CountReal هو عدد القطاعات.
نحدد أيضًا المتغيرات التالية:
من الواضح أنه إذا كان CountClassified وCountReal غير متساويين، فيمكننا استنتاج إمكانية دمج الملفات.
المفهوم " رقم سحري"في البرمجة له ثلاثة معانٍ:
رقم سحري، أو إمضاء، - عدد صحيح أو ثابت نصي يستخدم لتعريف مورد أو بيانات بشكل فريد. مثل هذا الرقم في حد ذاته ليس له أي معنى ويمكن أن يسبب ارتباكًا إذا ظهر في كود البرنامج دون السياق أو التعليق المناسب، في حين أن محاولة تغييره إلى آخر، حتى ولو كان قريبًا من القيمة، يمكن أن تؤدي إلى عواقب غير متوقعة تمامًا. لهذا السبب، من المفارقات أن هذه الأرقام كانت تسمى أرقام سحرية. حاليا، هذا الاسم راسخ كمصطلح. على سبيل المثال، أي فئة لغة 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 المحدد في مربع حوار الإعدادات. تتكون إضافة التوقيع من جزأين:
كل هذا يمكن القيام به باستخدام برنامج 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 استخدام محرر توقيع الملف الرسومي المدمج:
حدد عنصر الإعدادات من القائمة "أدوات"، وفي مربع الحوار "الإعدادات" الذي يفتح، انقر فوق علامة التبويب "أنواع الملفات المعروفة" ثم انقر فوق الزر "تحرير أنواع ملفات المستخدم".
انقر على الصورة لتكبيرها
انقر فوق الزر "إنشاء نوع ملف" في مربع الحوار "تحرير أنواع ملفات المستخدم".
اضبط الخيارات التالية:
تعد معلمة الميزات اختيارية، وفي حالتنا لا نحتاج إلى استخدامها.
انقر على الصورة لتكبيرها
بعد ذلك، تحتاج إلى إدخال توقيع ملف البداية والنهاية. للقيام بذلك، حدد "ابدأ" ثم في قائمة السياق أمر "إضافة توقيع".
انقر على الصورة لتكبيرها
ثم انقر مرتين على الحقل<пустая сигнатура> (
انقر على الصورة لتكبيرها
ثم قم بإنشاء توقيع الملف النهائي. تأكد من إدخال 21 في العمود من.
انقر على الصورة لتكبيرها
لقد نجحت في إنشاء توقيعك الخاص لأنواع الملفات المعروفة.
الآن أنت بحاجة إلى حفظه. هناك طريقتان: يمكنك إما حفظه في الملف الافتراضي المحدد في علامة التبويب الرئيسية في مربع الحوار "الإعدادات" بالنقر فوق الزر "حفظ". أو انقر فوق الزر "حفظ باسم..." واحفظ التوقيع في ملف آخر.
2.2 إنشاء ملف XML يدويًا يصف نوع ملف معروف:
لإنشاء هذا الملف، سوف نستخدم XML الإصدار 1.0 وترميز UTF-8. لا تيأس إذا كنت لا تعرف ما هو هذا - فقط افتح أي محرر نصوص (على سبيل المثال، Notepad.exe) وأدخل النص التالي في السطر الأول:
بعد ذلك، سنقوم بإنشاء علامة XML تحدد نوع الملف (FileType). مع الأخذ بعين الاعتبار سمات XML الموضحة مسبقًا، ستبدو العلامة كما يلي:
دعونا ندرجه مباشرة بعد ذلك
بعد ذلك، نحدد توقيع الملف (tag
إذا كان موجودًا، فيجب عليك أيضًا تحديد التوقيع النهائي (في نهاية الملف). يستخدم هذا نفس العلامة، ولكن مع عنصر "من" وسمة "النهاية". سوف يبدو مثل هذا:
تذكر أن توقيع الملف النهائي لم يحتوي على أحرف غير نصية، ولكنه يحتوي على خطوط مائلة وأقواس مثلثة. لتجنب الارتباك والأخطاء في بناء جملة XML، سنقوم باستبدال الأحرف "/" في التوقيع<" и ">"قيمها السداسية العشرية.
في النهاية، بعد توقيع الملف، يجب أن تكون هناك علامات إغلاق FileType وFileTypeList:
لذلك يجب أن يبدو الملف بأكمله كما يلي:
تذكر: بناء جملة 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، وهي:
تتم كتابة جميع التعليمات البرمجية بلغة 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. يوجد في مجلد المكونات الإضافية ملف 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 أداة واضحة وشفافة للغاية. لم يكن من الصعب بالنسبة لي أن أكتب مسؤول ويب لها وأقوم بإعدادها للعمل كخدمة ويب. مع القليل من الإبداع، يتم بالفعل تلوين النتائج الجافة للمحلل بألوان مختلفة، مما يشير إلى درجة خطورة البرامج الضارة المكتشفة. تحديث صغير لقاعدة البيانات، ويتوفر وصف قصير للعديد من برامج التشفير، وفي بعض الأحيان تعليمات لتفريغ الحزمة. تم إنشاء النموذج الأولي وهو يعمل بشكل مثالي، والرؤساء يرقصون بسعادة!