البحث باستخدام السلاسل والقيم السداسية عشرية
مطابقة آثار البرمجيات الخبيثة.
البحث باستخدام السلاسل والقيم السداسية عشرية درس مجاني في Cyber Security Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Cyber Security Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Cyber Security Academy 4 دروس في المجموع.
من العينة إلى القاعدة
يبدأ البحث بعينة. تستخرجون الآثار المميزة، وتحددون أيها أكثر ثباتًا، ثم تحوّلونها إلى قاعدة تكتشف العائلة من دون الإبلاغ عن الملفات السليمة.
سير العمل هو: فرز العينة أوليًا، واستخراج السلاسل والسمات البنيوية، وفصل الإشارات عن الضجيج، وصياغة القاعدة، ثم اختبارها على العائلة وعلى مجموعة ملفات سليمة قبل نشرها.
استخراج السلاسل المرشحة
ابدؤوا بأداة strings لسرد التسلسلات القابلة للطباعة، مع التقاط النصوص بصيغتي ASCII وUTF-16 (wide). غالبًا ما تخزّن البرمجيات الخبيثة على Windows السلاسل بصيغة wide.
افحصوا المخرجات بحثًا عن عناوين URL الخاصة بـC2، وأسماء mutex، ومسارات السجل، ورسائل الأخطاء المخصصة، ومسارات PDB، والنصوص المحددة على نحو غير معتاد. تجاهلوا السلاسل العامة الخاصة بوقت التشغيل والمصرّف.
strings -a sample.bin > ascii.txt
strings -e l sample.bin > wide.txt # UTF-16LE
grep -iE 'http|mutex|\\\\pipe\\\\|\.pdb' ascii.txt wide.txtاختيار السلاسل الثابتة
لا تنتمي كل سلسلة إلى قاعدة. فضّلوا الآثار التي لا يستطيع الكاتب تغييرها دون بذل جهد:
- أسماء mutex أو pipe المضمّنة في الشيفرة والفريدة للعائلة
- علامات البروتوكول المخصصة أو مفاتيح الإعدادات
- رسائل تصحيح أو panic غير معتادة
- مسارات PDB المضمّنة التي تكشف بيئة البناء
تجنّبوا القوالب البرمجية الجاهزة للمكتبات، وأسماء API الشائعة، وسلاسل الإصدارات المشتركة بين البرمجيات المشروعة، لأنها تولّد إيجابيات كاذبة.
strings:
$mutex = "Global\\Zx7yQ_lock" wide
$cfgkey = "x0r_cfg_begin" ascii
$pdb = "C:\\build\\loader\\release\\loader.pdb"التغلب على التعمية البسيطة
تستخدم عائلات برمجية كثيرة XOR أو تعمية خفيفة من نوع آخر للسلاسل. إذا كانت السلاسل الواضحة قليلة، فابحثوا عن الشكل المشفّر أو عن روتين فك التشفير.
يمكنكم حساب البايتات المشفّرة بـXOR لنص واضح معروف ومطابقتها، أو استخدام معدّل xor في YARA لمطابقة سلسلة باستخدام أي مفتاح XOR من بايت واحد تلقائيًا.
strings:
// matches "http://" under any single-byte XOR key
$u = "http://" xor
// or a fixed key range
$k = "config" xor(0x01-0xff)البحث باستخدام الأنماط السداسية عشرية
عندما تكون السلاسل محجّبة بينما الشيفرة ليست كذلك، طابقوا أنماط البايتات المستمدة من منطق البرمجية الخبيثة نفسها: روتين فك تشفير تمهيدي، أو حلقة فك حزم، أو ثابت فريد.
فكّكوا العينة، واعثروا على تسلسل مميز من التعليمات، ثم حوّلوا رموز التشغيل إلى سلسلة سداسية عشرية. استبدلوا بالبدل البايتات التي تتغير، مثل العناوين والقيم الفورية، حتى يبقى النمط صالحًا بعد إعادة الترجمة.
strings:
// XOR decrypt loop with wildcarded counter/address
$decrypt = { 8A ?? 34 ?? 88 ?? 4? 4? 75 ?? }محارف البدل والقفزات عمليًا
يكمن إتقان البحث السداسي عشري في اختيار البايتات التي ستستبدلونها بالبدل. إذا كان النمط صارمًا جدًا، أفسدت إعادة الترجمة القاعدة؛ وإذا كان متساهلًا جدًا، فإنه سيطابق كل شيء.
- استبدلوا الإزاحات النسبية والقيم الفورية بالبدل، لأنها تتغير بتغيّر المصرّف
- أبقوا رموز التشغيل ثابتة، لأن الخوارزمية مستقرة
- استخدموا القفزات
[n-m]عندما تختلف أطوال التعليمات
استهدفوا نمطًا طويلًا بما يكفي ليكون فريدًا، وغالبًا ما يعني ذلك 8 بايتات ذات معنى أو أكثر، مع إبقائه مرنًا حيث يلزم.
strings:
$stub = { 55 8B EC 83 EC [1-4] E8 ?? ?? ?? ?? 33 C0 }المؤشرات البنيوية ومؤشرات PE
توفر السمات الثابتة التي تتجاوز البايتات الخام شروطًا قوية قليلة الضجيج. وباستخدام وحدة pe يمكنكم المطابقة بناءً على:
- imphash — تجزئة جدول الواردات، وغالبًا ما تكون مستقرة عبر إصدارات العائلة
- أسماء الأقسام — تضيف أدوات التغليف المخصصة أقسامًا كاشفة
- واردات محددة — يشير استخدام VirtualAllocEx + WriteProcessMemory + CreateRemoteThread إلى الحقن
import "pe"
condition:
pe.imphash() == "4e3a9f..." or
for any s in pe.sections : ( s.name == ".x0rsec" )الإنتروبيا كمؤشر
تتميز المناطق المضغوطة أو المشفّرة بـإنتروبيا مرتفعة. تقيسها وحدة math، مما يتيح لكم تمييز العينات التي يبدو قسم الحمولة فيها مشفّرًا، وهي سمة مميزة لبرامج التغليف.
الإنتروبيا وحدها تسبب ضجيجًا، إذ تتميز أدوات التثبيت المضغوطة أيضًا بإنتروبيا مرتفعة؛ لذلك اجمعوها مع مؤشرات أخرى بدلًا من إطلاق تنبيه بناءً عليها وحدها.
import "math"
condition:
math.entropy(0, filesize) >= 7.2 and $loader_stubدمج المؤشرات
تتطلب أقوى القواعد مؤشرات مستقلة متعددة حتى لا تؤدي مصادفة واحدة إلى حدوث تطابق. اخلطوا بين سلسلة، ونمط شيفرة، وسمة بنيوية.
يقاوم هذا الشرط متعدد الطبقات كلًا من الإيجابيات الكاذبة، إذ يجب أن تتفق جميع الأجزاء، ومحاولات التهرب، إذ يتعين على الكاتب تغيير عدة سمات دفعة واحدة.
condition:
uint16(0) == 0x5A4D and
filesize < 800KB and
$mutex and
$decrypt and
pe.imports("kernel32.dll", "CreateRemoteThread")التسمية والبيانات الوصفية والإصدارات
لا تكون قاعدة البحث مفيدة إلا إذا استطاع الآخرون الوثوق بها وصيانتها. امنحوا كل قاعدة اسمًا واضحًا ذا مساحة أسماء، وأكملوا meta.
- سجّلوا قيم التجزئة للعينات التي بُنيت القاعدة عليها
- دوّنوا العائلة والكاتب والتاريخ والمرجع
- زيدوا حقل الإصدار عند تحسين المنطق
عندما تُطلِق القاعدة إنذارًا بعد أشهر، تخبر هذه البيانات الوصفية المستجيب بما يعنيه ذلك ومدى موثوقيته، فتحوّل عملية بحث لمرة واحدة إلى كشف مستدام قابل للمشاركة.
meta:
family = "X0rLoader"
author = "ir-team"
date = "2026-06-04"
hash = "9f1c...e2"
version = "2"اختبروا قبل أن تثقوا
تحققوا دائمًا من القاعدة الجديدة باستخدام مجموعتي عينات:
- الإيجابيات الحقيقية — يجب أن تنجح المطابقة مع كل عينة معروفة من العائلة
- البرمجيات السليمة — يجب ألا تحقق مجموعة كبيرة ونظيفة، مثل ثنائيات النظام والتطبيقات الشائعة، أي تطابق
قد يؤدي إيجابي كاذب واحد في ملف DLL على Windows إلى عزل ملفات مهمة عبر بيئة المؤسسة بأكملها. شغّلوا القاعدة، واحصوا النتائج، وراجعوا حالات الإخفاق والتطابق، ثم حسّنوها قبل نشرها على نطاق واسع.
yara -r family.yar /malware_corpus/ # expect all to hit
yara -r family.yar /clean_corpus/ # expect zero hitsتحقق سريع
اختاروا المؤشر الأكثر مقاومة للتغييرات.
مراجعة
البحث العملي باستخدام YARA من البداية إلى النهاية:
- استخرجوا السلاسل بصيغتي ASCII وwide؛ واحتفظوا بالآثار الثابتة، مثل mutex ومفاتيح الإعدادات ومسارات PDB
- تغلبوا على التعمية الخفيفة باستخدام معدّل xor أو الأنماط المشفّرة
- طابقوا أنماط بايتات الشيفرة، مثل روتينات فك التشفير أو فك الحزم، عندما تكون السلاسل مخفية
- استبدلوا البايتات المتغيرة بالبدل، وأبقوا رموز التشغيل ثابتة، واستخدموا القفزات للأطوال المتغيرة
- استخدموا imphash وأقسام وواردات PE والإنتروبيا كمؤشرات بنيوية
- اجمعوا مؤشرات متعددة لمقاومة الإيجابيات الكاذبة ومحاولات التهرب
- اختبروا دائمًا القاعدة على مجموعتي عينات العائلة والبرمجيات السليمة قبل نشرها
التالي: تشغيل هذه القواعد على بيئة المؤسسة بأكملها.
الأسئلة الشائعة
هل درس «البحث باستخدام السلاسل والقيم السداسية عشرية» مجاني؟
نعم — نص درس «البحث باستخدام السلاسل والقيم السداسية عشرية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Cyber Security Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Cyber Security Academy 4 دروس في المجموع.
ماذا ستتعلم في «البحث باستخدام السلاسل والقيم السداسية عشرية»؟
مطابقة آثار البرمجيات الخبيثة. تتمرن على Cyber Security Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Cyber Security Academy؟
لا تُشترط خبرة سابقة. Cyber Security Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «البحث باستخدام السلاسل والقيم السداسية عشرية»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Cyber Security Academy هذا؟
نعم. كل درس في Cyber Security Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- ما用途 YARA
- صياغة قواعد YARA
- البحث باستخدام السلاسل والقيم السداسية عشرية
- توسيع نطاق الفحوصات وأتمتتها