Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
Crawlector — Crawlector هو إطار عمل لصيد التهديدات مصمم لفحص المواقع الإلكترونية بحثًا عن الكائنات الضارة. | Kitploit
أدوات/GitHubGitHub/mfmokbel/crawlector
الاستخبارات مفتوحة المصدر (OSINT)ماسحات الثغرات الأمنيةموجزات ومجمعات التهديداتجمع المعلوماتأمن الويبتحليل البرمجيات الخبيثةاستخبارات التهديداتزاحف الويب
GitHubmfmokbel/crawlector

Crawlector

Crawlector هو إطار عمل لصيد التهديدات مصمم لفحص المواقع الإلكترونية بحثًا عن الكائنات الضارة.

عرض المستودع
1231016منذ 9 أشهرتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة
الموقع الإلكتروني

Crawlector

Crawlector (الاسم Crawlector هو مزيج من Crawler & Detector) هو إطار عمل لصيد التهديدات مصمم لفحص المواقع الإلكترونية بحثًا عن كائنات ضارة.

ملاحظة-1: تم تقديم الإطار لأول مرة في مؤتمر No Hat في بيرغامو، إيطاليا في 22 أكتوبر 2022 (الشرائح، تسجيل يوتيوب). كما تم تقديمه للمرة الثانية في مؤتمر AVAR في سنغافورة في 2 ديسمبر 2022.

ملاحظة-2: الأداة المصاحبة EKFiddle2Yara (وهي أداة تأخذ قواعد EKFiddle وتحولها إلى قواعد Yara) المذكورة في المحاضرة تم إصدارها أيضًا في كلا المؤتمرين.

ملاحظة-3: الإصدار 2.0 (Photoid Build:180923)، وهو إصدار رئيسي، تم إصداره في 18 سبتمبر 2023.

ملاحظة-4: الإصدار 2.1 (Universe-647 Build:031023) تم إصداره في 3 أكتوبر 2023. الإضافة الرئيسية هي ميزة إشعارات التنبيه عبر Slack.

ملاحظة-5: الإصدار 2.2 (Hallstatt Build:051123) تم إصداره في 5 نوفمبر 2023. الإضافة الرئيسية هي ميزة التحكم عن بعد عبر Slack.

ملاحظة-6: الإصدار 2.3 (Munich Build:241123) تم إصداره في 24 نوفمبر 2023. الإضافة الرئيسية هي ميزة خوادم أسماء DNS.

ملاحظة-6: الإصدار 2.3.1 {Nero Build:131225} تم إصداره في 13 ديسمبر 2025. هذا إصدار صيانة.

الميزات

  • يدعم تصفح المواقع (Spidering) للعثور على روابط إضافية للمسح (حتى مستويين فقط)
  • يدمج Yara كمحرك خلفي لفحص القواعد
  • يدعم المسح عبر الإنترنت وغير المتصل
  • يدعم التصفح (Crawling) للحصول على الشهادات الرقمية للمجالات/المواقع
  • يدعم الاستعلام عن URLhaus للعثور على عناوين URL ضارة في الصفحة
  • استخراج الكائنات العميق (Deep Object Extraction - DOE)
  • إشعارات التنبيه عبر Slack
  • دعم معلمات لإعادة التوجيه HTTP
  • استرجاع معلومات Whois
  • يدعم تجزئة محتوى الصفحة باستخدام TLSH (Trend Micro Locality Sensitive Hash)، ووظائف التجزئة التشفيرية القياسية الأخرى مثل md5 و sha1 و sha256 و ripemd128، وغيرها
    • لن يعيد TLSH قيمة إذا كان حجم الصفحة أقل من 50 بايت، أو إذا لم تكن هناك عشوائية كافية في البيانات
  • يدعم الاستعلام عن تقييم وفئة كل عنوان URL
  • يدعم التوسع في موقع معين من خلال محاولة العثور على جميع النطاقات عالية المستوى (TLDs) و/أو النطاقات الفرعية المتاحة لنفس المجال
    • تستخدم هذه الميزة واجهة برمجة تطبيقات Omnisint Labs (هذا الموقع معطل اعتبارًا من 10 مارس 2023) وواجهة برمجة تطبيقات RapidAPI
    • تنفيذ توسيع TLD هو تنفيذ أصلي
    • هذه الميزة، إلى جانب التقييم والتصنيف، توفر القدرة على العثور على مجالات احتيالية/تصيدية/ضارة للمجال الأصلي
  • يدعم حل المجال (IPv4 و IPv6)
  • يحفظ صفحات المواقع الممسوحة ضوئيًا للفحص لاحقًا (يمكن حفظها كملف مضغوط zip)
  • يتم التحكم في كامل إعدادات الإطار عبر ملف تكوين واحد قابل للتخصيص
  • يتم حفظ جميع جلسات المسح في ملف CSV منظم جيدًا يحتوي على ثروة من المعلومات حول الموقع الذي يتم مسحه، بالإضافة إلى معلومات حول قواعد Yara التي تم تفعيلها
  • العديد من الميزات الأخرى...
  • جميع اتصالات HTTP(S) تدعم الوكيل (Proxy-aware)
  • ملف تنفيذي واحد
  • مكتوب بلغة C++

مسح URLhaus وتكامل واجهة برمجة التطبيقات

هذا للتحقق من عناوين URL الضارة مقابل كل صفحة يتم مسحها. يمكن للإطار إما الاستعلام عن قائمة عناوين URL الضارة من خادم URLHaus (التكوين: url_list_web)، أو من ملف على القرص (التكوين: url_list_file)، وإذا تم تحديد الخيار الأخير، فإنه يأخذ الأولوية على الأول.

يعمل عن طريق البحث في محتوى كل صفحة مقابل جميع إدخالات URL في url_list_web أو url_list_file، والتحقق من جميع التكرارات. بالإضافة إلى ذلك، عند التطابق، وإذا تم تعيين خيار التكوين check_url_api على true، فإن Crawlector سيرسل طلب POST إلى عنوان URL لواجهة برمجة التطبيقات المحدد في خيار التكوين url_api، والذي يعيد كائن JSON بمعلومات إضافية حول عنوان URL المطابق. تتضمن هذه المعلومات urlh_status (مثل online, offline, unknown)، urlh_threat (مثل malware_download)، urlh_tags (مثل elf, Mozi)، و urlh_reference (مثل https://urlhaus.abuse.ch/url/1116455/). سيتم تضمين هذه المعلومات في ملف السجل cl_mlog_<current_date><current_time><(pm|am)>.csv (انظر أدناه)، فقط إذا تم تعيين check_url_api على true. وإلا، سيشمل ملف السجل الأعمدة urlh_url (قائمة عناوين URL الضارة المطابقة) و urlh_hit (عدد التكرارات لكل عنوان URL ضار مطابق)، بشرط أن يكون check_url مضبوطًا على true.

يمكن تعطيل ميزة URLHaus بالكامل عن طريق تعيين خيار التكوين check_url على false.

من المهم ملاحظة أن هذه الميزة قد تبطئ المسح، نظرًا للعدد الهائل من عناوين URL الضارة (~ 130 مليون إدخال وقت كتابة هذا) التي يجب التحقق منها، والوقت المستغرق للحصول على معلومات إضافية من خادم URLHaus (إذا تم تعيين الخيار check_url_api على true).

هياكل الملفات والمجلدات

  1. \cl_sites
    • هذا هو المكان الذي يتم فيه تخزين قائمة المواقع المراد زيارتها أو تصفحها.
    • يدعم ملفات وأدلة متعددة.
  2. \crawled
    • حيث يتم حفظ جميع عناوين URL الممسوحة/المزحفة إلى ملف نصي.
  3. \certs
    • حيث يتم تخزين جميع الشهادات الرقمية للمجالات/المواقع (بتنسيق .der).
  4. \results
    • حيث يتم حفظ المواقع التي تمت زيارتها. يمكن تكوين ذلك عبر الخيار results_dir
  5. \pg_cache
    • ذاكرة تخزين مؤقت للبرنامج للمواقع التي ليست جزءًا من وظيفة الزحف (Spider). يمكن تكوين ذلك عبر الخيار cache_dir، القسم [default].
  6. \cl_cache
    • ذاكرة تخزين مؤقت للزاحف للمواقع التي هي جزء من وظيفة الزحف. يمكن تكوين ذلك عبر الخيار cache_dir، القسم [spider].
  7. \yara_rules
    • هذا هو المكان الذي يتم فيه تخزين جميع قواعد Yara. سيتم تحميل جميع القواعد الموجودة في هذا الدليل بواسطة المحرك، وتحليلها، والتحقق من صحتها، وتقييمها قبل التنفيذ.
  8. cl_config.ini
    • يحتوي هذا الملف على جميع معلمات التكوين التي يمكن تعديلها للتأثير على سلوك الإطار.
  9. cl_mlog_<current_date><current_time><(pm|am)>.csv
    • ملف سجل يحتوي على ثروة من المعلومات حول المواقع التي تمت زيارتها
    • التاريخ، الوقت، حالة فحص Yara، قائمة قواعد Yara التي تم تفعيلها مع الإزاحات والأطوال لكل تطابق، المعرف، عنوان URL، رمز حالة HTTP، حالة الاتصال، رؤوس HTTP، حجم الصفحة، المسار إلى الصفحة المحفوظة على القرص، وأعمدة أخرى متعلقة بنتائج URLHaus.
    • اسم الملف فريد لكل جلسة.
  10. cl_offl_mlog_<current_date><current_time><(pm|am)>.csv
    • ملف سجل يحتوي على معلومات حول الملفات الممسوحة ضوئيًا دون اتصال.
    • قائمة قواعد Yara التي تم تفعيلها مع الإزاحات والأطوال للتطابقات، والمسار إلى الصفحة المحفوظة على القرص.
    • اسم الملف فريد لكل جلسة.
  11. cl_certs_<current_date><current_time><(pm|am)>.csv
    • ملف سجل يحتوي على ثروة من المعلومات حول الشهادات الرقمية التي تم العثور عليها
  12. \expanded\exp_subdomain_<pm|am>.txt
    • يحتوي على النطاقات الفرعية المكتشفة (جزء من القسم [site])
  13. \expanded\exp_tld_<pm|am>.txt
    • يحتوي على المجالات المكتشفة (جزء من القسم [site])

ملف التكوين (cl_config.ini)

يجب أن تتعرف على ملف التكوين cl_config.ini قبل تشغيل أي جلسة. جميع الأقسام والمعلمات موثقة في ملف التكوين نفسه.

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

  • اعتمادًا على إعدادات التكوين (log_to_file أو log_to_cons)، إذا كانت قاعدة Yara تشير فقط إلى سمات وحدة نمطية (مثل PE, ELF, Hash، إلخ)، فسيعرض Crawlector اسم القاعدة فقط عند التطابق، باستثناء بيانات الإزاحة والطول.

ملاحظة: لأي خيار يأخذ مسارًا، قدم دائمًا المسار المطلق.

تنسيق نمط المواقع

لزيارة/فحص موقع ويب، يجب تخزين قائمة عناوين URL في ملفات نصية، في الدليل “cl_sites”.

يقبل Crawlector ثلاثة أنواع من عناوين URL:

  1. النوع 1: عنوان URL واحد لكل سطر
    • سيعين Crawlector اسمًا فريدًا لكل عنوان URL، مشتقًا من اسم مضيف عنوان URL
  2. النوع 2: عنوان URL واحد لكل سطر، مع اسم فريد [a-zA-Z0-9_-]{1,128} = <url>
  3. النوع 3: لوظيفة الزحف (Spider)، يتم استخدام تنسيق فريد. عنوان URL واحد لكل سطر كما يلي:

<id>[depth:<0|1>-><\d+>,total:<\d+>,sleep:<\d+>] = <url>

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

mfmokbel[depth:1->3,total:10,sleep:0] = https://www.mfmokbel.com

وهو ما يعادل: mfmokbel[d:1->3,t:10,s:0] = https://www.mfmokbel.com

حيث، <id> := [a-zA-Z0-9_-]{1,128}

يمكن أيضًا استبدال depth و total و sleep بإصداراتها المختصرة d و t و s، على التوالي.

  • depth: يدعم الزاحف الذهاب إلى مستويين عمقًا للعثور على عناوين URL إضافية (هذا قرار تصميم).
  • تشير القيمة 0 إلى عمق المستوى 1، مع تجاهل القيمة التي تأتي بعد “->”.
  • يتم التحكم في عمق المستوى 1 بواسطة معلمة total. لذا، أولاً، يحاول الزاحف العثور على أكبر عدد ممكن من عناوين URL الإضافية من عنوان URL المحدد.
  • تمثل القيمة بعد “->” الحد الأقصى لعدد عناوين URL التي سيتم الزحف إليها لكل عنوان URL من العناوين الموجودة (وفقًا لقيمة معلمة total).
  • تشير القيمة 1 إلى عمق المستوى 2، مع تمثل القيمة بعد “->” الحد الأقصى لعدد عناوين URL التي سيتم العثور عليها، لكل عنوان URL موجود وفقًا لمعلمة total. للتوضيح، وكما هو موضح في المثال أعلاه، أولاً، سيبحث الزاحف عن 10 عناوين URL (كما هو محدد في معلمة total)، ثم، سيتم الزحف إلى كل من عناوين URL الموجودة حتى حد أقصى 3 عناوين URL؛ لذلك، وفي أفضل سيناريو، سننتهي بـ 40 (10 + (10*3)) عنوان URL.
  • تأخذ معلمة sleep قيمة صحيحة تمثل عدد الملي ثانية من النوم بين كل طلب HTTP.

ملاحظة 1: يمكن تحويل عنوان URL من النوع 3 إلى عنوان URL من النوع 1 عن طريق تعيين معلمة التكوين live_crawler على false في ملف التكوين، في قسم spider.

ملاحظة 2: يتم تجاهل الأسطر الفارغة والأسطر التي تبدأ بـ “;”، "#" أو “//”.

وظيفة الزحف (Spider)

وظيفة الزحف هي ما يعطي Crawlector القدرة على العثور على روابط إضافية على الصفحة المستهدفة. يدعم الزاحف الميزات التالية:

  • يجب أن يكون المجال من النوع 3 لكي تعمل وظيفة الزاحف
  • يمكنك تحديد قائمة من الأنماط باستخدام أحرف البدل (مفصولة بـ |) لمنع الزحف إلى عناوين URL المطابقة عبر خيار التكوين exclude_url. على سبيل المثال، *.zip|*.exe|*.rar|*.zip|*.7z|*.pdf|.*bat|*.db
  • يمكنك تحديد قائمة من الأنماط باستخدام أحرف البدل (مفصولة بـ |) للزحف فقط إلى عناوين URL التي تطابق النمط عبر خيار التكوين include_url. على سبيل المثال، */checkout/*|*/products/*
  • يمكنك استبعاد عناوين URL الخاصة بـ HTTPS عبر خيار التكوين exclude_https
  • يمكنك أيضًا مراعاة الروابط الخارجية/الخارجة، للصفحة الرئيسية فقط، عبر خيار التكوين add_ext_links. تحترم هذه الميزة خيار التكوين exclude_url و include_url.
  • يمكنك مراعاة الروابط الخارجية/الخارجة للصفحة الرئيسية فقط، باستثناء جميع عناوين URL الأخرى، عبر خيار التكوين ext_links_only. تحترم هذه الميزة خيار التكوين exclude_url و include_url.

أنواع المعرفات (IDs)

في الإصدار 2.0، المعرفات لها أنواعها المخصصة بشكل صريح عن طريق إلحاق أي من الأنواع التالية بالمعرف نفسه:

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

وظيفة ترتيب المواقع

  • هذا للتحقق من ترتيب الموقع
  • تعطيه ملفًا بقائمة مواقع ويب، مع ترتيبها، بتنسيق ملف CSV
  • الخدمات التي تقدم قوائم ترتيب المواقع تشمل Alexa top-1m (تم إيقافها اعتبارًا من مايو 2022)، Cisco Umbrella، Majestic، Quantcast، Farsight و Tranco، وغيرها
  • تنسيق ملف CSV (عمودان فقط): العمود الأول يحمل الترتيب، والعمود الثاني يحمل اسم المجال
  • إذا كانت الخلية تحتوي على بيانات مقتبسة، فسيتم إزالة الاقتباسات تلقائيًا
  • غير مسموح بفواصل الأسطر في النص المقتبس
  • يتم قص المسافات البادئة والتالية من الخلايا المقروءة
  • يتم تخطي الأسطر الفارغة وأسطر التعليقات
  • يوفر القسم site_ranking في ملف التكوين بعض الخيارات لتغيير كيفية قراءة ملف CSV
  • أداء هذا الاستعلام يعتمد على عدد السجلات في ملف CSV
  • يقارن Crawlector كل إدخال في ملف CSV مقابل المجال قيد التحقيق، وليس العكس
  • فقط المجال المسجل/على مستوى الدفع هو الذي تتم مقارنته

العثور على النطاقات عالية المستوى (TLDs) والنطاقات الفرعية - القسم [site]

  • يوفر القسم site القدرة على التوسع في موقع معين من خلال محاولة العثور على جميع النطاقات عالية المستوى (TLDs) و/أو النطاقات الفرعية المتاحة لنفس المجال. إذا تم العثور عليها، سيتم فحص النطاقات عالية المستوى/النطاقات الفرعية الجديدة مثل أي مجال آخر
  • تستخدم هذه الميزة واجهات برمجة تطبيقات Omnisint Labs (https://omnisint.io/) و RapidAPI
  • تعيد واجهة برمجة تطبيقات Omnisint Labs النطاقات الفرعية والنطاقات عالية المستوى، بينما تعيد RapidAPI النطاقات الفرعية فقط (واجهة برمجة تطبيقات Omnisint Labs معطلة اعتبارًا من 10 مارس 2023؛ ومع ذلك، لا يزال التنفيذ متاحًا في حال عاد الموقع للعمل)
  • بالنسبة لـ RapidAPI، أنت بحاجة إلى مفتاح API صالح لـ "Domains records" يمكنك طلبه من RapidAPI، وتوصيله بالمفتاح rapid_api_key في ملف التكوين
  • مع تمكين find_tlds، بالإضافة إلى نتائج TLDs من Omnisint Labs API، يحاول الإطار العثور على مجالات أخرى نشطة/مسجلة من خلال المرور عبر كل إدخال TLD، سواء في tlds_file أو tlds_url
  • إذا تم تعيين tlds_url، فيجب أن يشير إلى عنوان URL يستضيف النطاقات عالية المستوى، كل واحد في سطر جديد (يتم تجاهل الأسطر التي تبدأ بأي من الأحرف ';', '#' أو '//')
  • tlds_file، يحمل اسم الملف الذي يحتوي على قائمة النطاقات عالية المستوى (نفس الشيء بالنسبة لـ tlds_url؛ فقط TLD موجود، باستثناء '.'، على سبيل المثال، "com"، "org")
  • إذا تم تعيين tlds_file، فإنه يأخذ الأولوية على

وظيفة إعادة التوجيه

وظيفة إعادة توجيه URL في الإصدارات السابقة كانت معطلة. يوفر هذا الإصدار إعادة كتابة كاملة لميزة إعادة التوجيه، مع درجة عالية من تحديد المعلمات للتحكم في تشغيلها. في إصدار الإصدار 2.0، إعادة التوجيه لها قسم مخصص في ملف التكوين، اسمه [redirect]. يمكن تشغيل/إيقاف وظيفة إعادة التوجيه بالكامل عبر الخيار follow_redir، تحت القسم [default].

تتحقق وظيفة إعادة التوجيه من رموز حالة استجابة HTTP: 301، 302، 303، 307 و 308. في حالة التطابق، سيقوم Crawlector بتحليل رأس Location لإعادة التوجيه إلى URL، مع مراعاة عناوين URL النسبية والمطلقة لإعادة التوجيه. تم تصميم وظيفة إعادة التوجيه في Crawlector للأداء والسرعة. يوفر القسم [redirect] القائمة التالية من الخيارات:

[redirect]

  • depth = all ; (t: string)
  • max_redirect = 200 ; (t: uint16_t)
  • visit = true ; (t: bool)
  • skip_similar = true ; (t: bool)

يأخذ الخيار depth إما القيمة last أو all. يتحكم في عناوين URL المعاد توجيهها التي سيتم زيارتها، اعتمادًا على ما إذا كان الخيار visit ممكّنًا أم لا. all لزيارة جميع عناوين URL المعاد توجيهها التي تم العثور عليها. last لزيارة آخر عنوان URL معاد توجيهه. تحدث زيارة عناوين URL هذه في نفس الجلسة الحالية. ضع في اعتبارك أنه بغض النظر عن قيمة depth، سيسجل Crawlector قائمة جميع عمليات إعادة التوجيه إلى عناوين URL، بالإضافة إلى العدد الإجمالي، في شكل مطلق. سيتم كتابتها في ملف CSV cl_mlog، تحت الأعمدة redirect_urls و redirect_total.

يحدد الخيار max_redirect حدًا أعلى للعدد الإجمالي لعمليات إعادة توجيه URL التي سيتم اكتشافها.

يتم شرح الخيار skip_similar بشكل أفضل من خلال المثال التالي:

افترض أن عنوان URL الأصلي المعطى لـ Crawlector للزحف هو "https://www.mfa.gov.law" وأن أحد redirect_urls التي تم العثور عليها هو "https://mfa.gov.law/". كما ترى، الاختلاف الوحيد هو الشرطة المائلة للأمام في نهاية عنوان URL. هذان العنوانان متماثلان، وسيستجيب الخادم بنفس الصفحة. إذا تم تعيين الخيار visit على true، فسوف يزحف Crawlector إلى كلا العنوانين، مما يهدر الموارد ويؤدي نفس المهمة مرتين. قد لا تكون هذه مشكلة بالنسبة لـ 1 أو 2 من عناوين URL، ولكن إذا كان لديك آلاف عناوين URL التي تريد الزحف إليها، وتم تمكين الخيار visit، فإن احتمالات أن أكثر من نصفها سيكون لديها عنوان URL مكتشف مماثل مرتفعة جدًا، وفي هذه الحالة، تصبح هذه مشكلة ملحة يجب معالجتها. وبالتالي، فإن تعيين الخيار skip_similar على true سيساعد في حل هذه المشكلة عن طريق تخطي زيارة عناوين URL المتشابهة. بالإضافة إلى سيناريو الشرطة المائلة للأمام، يراعي الخيار skip_similar أيضًا السيناريوهين التاليين: إذا كان عنوان URL المعاد توجيهه يختلف فقط بأحد البادئتين أو كلتيهما، "https://" و "www.".

استخراج الكائنات العميق (Deep Object Extraction - DOE)

إحدى الإضافات الرئيسية في الإصدار 2.0 هي القدرة على استخراج أنواع مختلفة من الكائنات من الصفحة، وحفظها على القرص، وفحصها بواسطة Yara و URLHaus، وحفظ النتائج في ملف CSV. لتمكين هذه الميزة، قم بتعيين الخيار extract_obj على true، تحت القسم [page].تنفيذ ميزة استخراج الكائنات العميقة يعمل عن طريق إنشاء ملف أرشيف ويب MHT من صفحة الويب، بما في ذلك النصوص البرمجية الخارجية والصور وملفات CSS. سيتم استخراج جميع الملفات المضمنة إلى المسار المحدد بواسطة الخيار obj_dir (المسار: obj_dir/objects/)، حيث سيتم فحص كل ملف. لا ينبغي الخلط بين هذا التنفيذ ووظيفة المتصفح بدون واجهة رسومية. تختلف DOE ولا تتضمن تحميل الصفحة لاسترداد جميع عناوين URL المستردة ديناميكيًا. لذلك، لها حدودها.

ستتم كتابة بعض البيانات الوصفية لجميع الكائنات المستخرجة في ملف CSV. أشياء يجب مراعاتها عند قراءة ملف CSV: معرف النطاق مع الكائن المستخرج له تنسيق فريد، كما يلي، <domain_id>_<type>_p_obj_<counter> (على سبيل المثال، _mfa_gov_cef40bc5-ba6a-41_t1_p_obj_0_). وسيكون لعنوان URL التنسيق التالي، <url>__<object_filename> (على سبيل المثال، _https://www.mfa.gov.law\_\_bilmur.min.js\_).

إذا تم تعيين الخيار delete_obj على true، فسيتم حذف جميع الكائنات المستخرجة التي لم يتم اكتشافها بواسطة Yara من القرص. إذا تم تعيين الخيار log_all_objs على true، فسيتم تسجيل بيانات جميع الكائنات المستخرجة في نفس ملف CSV cl_mlog. إذا تم تعيين الخيار check_urlhaus تحت القسم [page] على true، فسيتم فحص كل كائن مستخرج عبر URLHaus. لاحظ أن خيارات هذا الخيار موروثة من القسم [urlhaus].

ملاحظة: إذا كان النطاق الذي يتم الزحف إليه يعيد التوجيه إلى نطاق آخر، فيجب تمرير آخر عنوان URL معاد توجيهه إلى DOE لكي يعمل. علاوة على ذلك، يجب أن يبدأ النطاق بـ "HTTP(S)://" لكي تعمل DOE.

إشعار تنبيه Slack

في بعض الأحيان، قد ترغب في تشغيل جلسات Crawlector التي قد تستغرق أيامًا لإكمالها، على سبيل المثال، عن طريق الزحف إلى أفضل مليون موقع Alexa، وفي مثل هذا السيناريو، تحتاج إلى طريقة لمراقبة تشغيل الإطار وتقدمه عن بُعد. لذلك، في الإصدار 2.1، أضفت ميزة إشعار تنبيه Slack لتوفير آلية لمراقبة تنفيذ Crawlector في الوقت الفعلي، عن طريق إرسال تنبيهات Yara، وأحداث std::exit()، وتحذيرات وأخطاء العملية، إلى قناة Slack من اختيارك. بالإضافة إلى ذلك، يقوم Crawlector بتثبيت معالج وحدة تحكم في محاولة لمراقبة أنواع معينة من الأحداث، بما في ذلك ctrl_c و ctrl_close و ctrl_break و ctrl_logoff و ctrl_shutdown. من المهم أن نضع في الاعتبار أن Crawlector لا يغير/يعدل سلوك المعالج الافتراضي؛ إنه يبلغ فقط قناة Slack باستلام أي من الأحداث المدرجة. يمكن توسيع هذا في المستقبل ليشمل أنواعًا أخرى من الأحداث.

تستخدم هذه الميزة Slack REST API، وللمصادقة مع الخادم، تستخدم OAuth 2.0. ستحتاج إلى رمز Slack API لاستخدامه، وقناة مهيأة بالأذونات الصحيحة. تقوم هذه الميزة فقط بنشر الرسائل إلى قناة Slack ولا تستقبل أو تعالج أي رسائل واردة.

يوفر القسم [slack_alert] قائمة الخيارات التالية:

[slack_alert]

  • alert = true ; (t: bool)
  • api_token = ; (t: string)
  • channel = ; (t: string)
  • sleep = ; (t: uint32_t) بالميلي ثانية

لتعطيل أو تمكين هذه الميزة، ما عليك سوى تعيين الخيار alert على true أو false. علاوة على ذلك، تحتاج إلى تحديد api_token، مع اسم channel.

ملاحظة-1: في مرحلة التهيئة لـ Crawlector، يختبر ما إذا كان رمز المصادقة المقدم صالحًا أم لا، أو إذا تم تعيين القناة، وفي حالة الفشل، يتم تعطيل هذه الميزة تلقائيًا.

يتم الإبلاغ عن جميع التنبيهات المبلغ عنها لقناة Slack تحت اسم المستخدم Crawlector v<version_number>، على سبيل المثال، Crawlector v2.1. لدى المستخدم أيقونة شبكة عنكبوت. بالإضافة إلى ذلك، جميع التنبيهات متسلسلة (threaded)، مما يعني أن جميع التنبيهات اللاحقة بعد رسالة البداية الأولى، يتم نشرها كردود. كان هذا قرارًا تصميميًا ويساعد في حال كنت تقوم بتشغيل جلسات متعددة في نفس الوقت، وجميعها تبلغ إلى نفس القناة. تستخدم بعض التنبيهات لغة ترميز markdown للتنسيق.

عندما تنتهي العملية بنجاح وتكون على وشك الخروج، تنشر الرسالة التالية:

Crawlector قد انتهى ويتم إيقاف التشغيل بنجاح

ملاحظة-2: حد معدل Slack لواجهة برمجة تطبيقات نشر الرسائل هو رسالة واحدة في الثانية، مع هامش لبعض الانفجارات. لا يقوم Crawlector بوضع الرسائل في قائمة انتظار لحساب المزيد من المنشورات في الثانية. قد يتغير هذا في المستقبل إذا لزم الأمر؛ ومع ذلك، يسمح الخيار sleep للعملية بالنوم لمدة زمنية محددة بعد كل رسالة منشورة بنجاح.

التحكم عن بُعد في Slack

مع الإصدار 2.2 (الاسم الرمزي Hallstatt)، أقدم القدرة على التحكم في Crawlector عن بُعد عبر مجموعة مختارة من أوامر التحكم المصممة خصيصًا. سبب تقديم هذه الوظيفة هو مراقبة والتحكم في سلوكيات معينة للجلسات التي من المفترض أن تستمر لساعات أو أيام. على سبيل المثال، قد ترغب في تشغيل/إيقاف وظيفة تنبيه Slack، إنهاء Crawlector، وتحميل ملف تكوين، من بين أمور أخرى.

تستخدم هذه الميزة Slack REST API، وللمصادقة مع الخادم، تستخدم OAuth 2.0. ستحتاج إلى رمز Slack API لاستخدامه، وقناة مهيأة بالأذونات الصحيحة. رمز API هو نفسه المستخدم في القسم [slack_alert]، الخيار api_token.

يوفر القسم [slack_alert] قائمة الخيارات الإضافية التالية لوظيفة التحكم عن بُعد:

[slack_alert] (خيارات التحكم)

  • control = true ; (t: bool)
  • ctrl_channel = ; (t: string) يجب أن يكون معرف القناة وليس اسم القناة
  • ctrl_sleep = ; (t: uint32_t) بالميلي ثانية

لتعطيل أو تمكين هذه الميزة، ما عليك سوى تعيين الخيار control على true أو false. يجب أن يكون اسم ctrl_channel هو اسم معرف القناة وليس اسم القناة. يمكنك الحصول عليه عن طريق النقر بزر الماوس الأيمن على اسم القناة -> عرض تفاصيل القناة -> التمرير إلى أسفل النافذة، وسترى حقل معرف القناة: <channel_id>.

يحدد الخيار ctrl_sleep تكرار الاتصال بقناة التحكم المحددة في خيار ctrl_channel لاسترداد أوامر التحكم. يمكنك أيضًا تحديث هذا الخيار عبر أمر التحكم cl_update_delay <time_in_ms>.

قائمة أوامر التحكم المدعومة هي كما يلي:

ملاحظة-1: في مرحلة التهيئة لـ Crawlector، يختبر ما إذا كان رمز المصادقة المقدم صالحًا أم لا، أو إذا تم تعيين القناة، وفي حالة الفشل، يتم تعطيل هذه الميزة تلقائيًا.

إذا تم تمكين هذه الوظيفة، وبمجرد اجتياز التحقق من صحة رمز API، يرسل Crawlector الرسالة "Crawlector جاهز لاستقبال أوامر التحكم. اكتب الأمر cl_help للحصول على قائمة بأوامر التحكم المدعومة." إلى ctrl_channel المحدد.

جميع الردود على أمر تحكم معين متسلسلة (threaded). علاوة على ذلك، تتم قراءة أوامر التحكم على أساس كل جلسة، من وقت بدء الجلسة.

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

خوادم أسماء DNS

مع الإصدار 2.3 (الاسم الرمزي Munich)، تم تقديم القدرة على تحديد قائمة بخوادم أسماء DNS لجميع استعلامات DNS وحلول DNS-to-IP التي يحاولها Crawlector بمستوى عالٍ من التحكم. هذا مهم في حالة الزحف إلى مواقع ويب محجوبة أو ضارة. تنطبق هذه الميزة على كل وظيفة في Crawlector حيث يتم إجراء استعلام DNS أو طلب DNS-to-IP. والأهم من ذلك، أنها توفر القدرة على أداء DNS عبر TLS لكل خادم أسماء يدعم ذلك.

يوفر القسم [dns_ns] قائمة الخيارات التالية لإدارة هذه الوظيفة:

[dns_ns]

  • enable = false ; (t: bool)
  • name_servers = 8.8.8.8(e_tls),12.13.14.15(d_tls) ; (t: string)
  • dns_tls = yes ; (t: string) (yes, no, أو force)
  • keep_default = false ; (t: bool)
  • conn_time_out = 3000 ; (t: uint32_t) بالميلي ثانية (0 للانتظار إلى أجل غير مسمى)

يأخذ الخيار name_servers قائمة معلمية من خوادم أسماء DNS لاستخدامها، مفصولة بفواصل. قيمة هذا الخيار لها التنسيق: <IPv4_address>(<tls_option>) حيث يأخذ <tls_option> إما القيمة "d_tls" أو "e_tls". تشير الخيارات "d_tls" أو "e_tls" إلى ما إذا كان خادم الأسماء المعني يدعم DNS عبر TLS أم لا، على التوالي. سيتم فرض هذا الخيار اعتمادًا على القيمة المحددة للخيار dns_tls. على سبيل المثال، يشير الإدخال 8.8.8.8(e_tls) إلى استخدام خادم DNS Google 8.8.8.8 مع دعم TLS، بينما يشير الإدخال 12.13.14.15(d_tls) إلى استخدام خادم DNS 12.13.14.15 بدون دعم TLS.

يحدد الخيار dns_tls المستوى المطلوب من فرض TLS. يأخذ هذا الخيار إحدى القيم، "yes" "no" أو "force".

  • yes
    • سيتم محاولة خوادم أسماء DNS مع دعم TLS أولاً، وإذا لم يتم العثور على NS مع دعم TLS، فسيتم محاولة حل UDP/TCP بدلاً من ذلك.
  • no
    • لا يوجد دعم TLS (لا تستخدم خوادم أسماء DNS مع دعم TLS)
  • force
    • سيتم استخدام خوادم أسماء DNS مع دعم TLS فقط، وأي استعلام DNS يبدأه Crawlector سيستخدم DoT (DNS عبر TLS).

الخيار keep_default هو لإضافة خادم (خوادم) الأسماء الافتراضي إلى قائمة خوادم الأسماء. يفترض أن خادم الأسماء الافتراضي لا يدعم TLS.

الخيار conn_time_out يحدد الوقت بالميلي ثانية للانتظار للحصول على إجابة لاستعلام DNS.

الخيار enable يقوم بتشغيل أو إيقاف تشغيل هذه الوظيفة.

تحسينات متنوعة في الإصدار 2.0

  • تمت إضافة خيارات سطر الأوامر "-v" و "-c". الخيار "-v" لطباعة معلومات الإصدار إلى وحدة التحكم. الخيار "-c" لقراءة ملف تكوين مختلف، غير ملف "cl_config.ini" الافتراضي.
  • تحسينات متعددة في الكود وتحسينات طفيفة
  • لكل نطاق مقروء (ليس مع نطاق فرعي)، سيقوم Crawlector بإضافة "www." في بداية كل إدخال موقع مقروء، إذا لم يكن موجودًا بالفعل. على سبيل المثال، في حالة استعلام تعداد النطاق الفرعي RapidAPI، يجب أن يبدأ النطاق الذي يتم الاستعلام عنه بـ "www.".
  • تمت إضافة الخيارين clear_dns و upg_2_https إلى القسم [default]. الأول يمسح ذاكرة التخزين المؤقت لـ DNS من اسم المضيف إلى IP، والثاني يقوم بترقية كل موقع إلى HTTPS عن طريق إضافة "https://" إليه. وبالمثل، تمت إضافة الخيار tld_upgrd_2_https إلى القسم [site]، لترقية النطاقات النشطة ذات TLDs المختلفة إلى https.
  • تمت إضافة الخيارين rapid_api_weeks و rapid_api_limit إلى القسم [site] لتكوين طلب API إلى RapidAPI. كلا الخيارين اختياريان. الأول يحدد عدد الأسابيع للاستعلام من قاعدة البيانات، بينما يحدد الثاني عدد النطاقات الفرعية المراد إرجاعها لكل موقع.
  • في الإصدار 2.0، يمكنك تحديد دليل ذاكرة تخزين مؤقت مختلف للقسمين [spider] و [default]، عبر الخيار cache_dir.
  • تمت إضافة العديد من الخيارات إلى القسم page في الإصدار 2.0، بما في ذلك:
  • الخيار whois_info يسترجع معلومات نطاق whois بما في ذلك، المسجل، registered_on، expires_on و updated_on. يتم سحب هذه البيانات من https://www.whois.com/whois/. يتم حفظ البيانات في ملف CSV cl_mlog.
  • الخيار page_title يحفظ عنوان الصفحة في ملف CSV cl_mlog.
  • تمت إضافة الخيار results_dir لتوفير القدرة على حفظ الصفحات تحت مسار مختلف. إذا لم يتم تعيينه، سيتم إنشاء المجلد "results" في نفس دليل Crawlector.
  • تمت ترقية محرك Yara إلى الإصدار 4.3.2

اعتبارات التصميم

  • يتم استرداد صفحة URL عن طريق إرسال طلب GET إلى الخادم، وقراءة نص استجابة الخادم، وتمريره إلى محرك Yara للكشف.
  • يتم تعريف بعض سمات طلب GET في القسم [default] في ملف التكوين، بما في ذلك رؤوس User-Agent وReferer، ومهلة الاتصال، من بين خيارات أخرى.
  • على الرغم من أن Crawlector يقوم بتسجيل بيانات الجلسة إلى ملف CSV، إلا أنه يوصى بتحويله إلى ملف SQL للحصول على أداء أفضل ومعالجة واسترجاع البيانات. يصبح هذا واضحًا عندما تقوم بالزحف إلى آلاف النطاقات.
  • يُسمح بتكرار النطاقات/عناوين URL في cl_sites.

القيود

  • أحادي الخيط (Single-threaded)
  • كشف ثابت (لا يوجد تقييم ديناميكي لمحتوى صفحة معينة). يرجى التحقق من ميزة DOE بدلاً من ذلك.
  • لا يوجد دعم للمتصفح بدون واجهة رسومية، بعد!

المكتبات الخارجية المستخدمة

  • Chilkat: مكتبة للزحف على مواقع الويب، اتصالات HTTP، التجزئة، تحليل JSON وضغط الملفات (ZIP)، من بين أمور أخرى
  • Yara: لفحص القواعد (v4.5.4)
  • CrossGuid: لتوليد GUID/UUID
  • Inih: لتحليل ملف التكوين
  • Rapidcsv: لتحليل ملفات CSV
  • Color Console: لتلوين وحدة التحكم
  • TLSH (Trend Micro Locality Sensitive Hash) (v4.8.2)

المساهمة

مفتوح لطلبات السحب (pull requests) والمشكلات (issues). التعليقات والاقتراحات موضع تقدير كبير.

المؤلف

محمد مكبل (@MFMokbel)

تنزيل الأداة
id_postfix (type)الوصف
_t1_pنوع 1 عادي بدون معرف
_sdنوع فرعي للنطاقات الفرعية
_tldنوع فرعي للنطاقات عالية المستوى
_t2_pنوع 2 عادي مع معرف
_t3_sنوع 3 مجالات مزحف إليها
_t3_scنوع 3 مجالات مزحف إليها مع عقدة فرعية
_t3_ssنوع 3 عندما يتم تحويل عنوان URL من نوع 3 (_t3_s) إلى عنوان URL من نوع 1
_t3_s_eنوع 3 روابط خارجية للمجالات المزحف إليها
_obj_للمسح العميق واستخراج الكائنات
_t4_ruلعنوان URL المعاد توجيهه (لجميع الأنواع)
tlds_url
  • tld_dl_time_out، هذا لتحديد المهلة الزمنية القصوى لوظيفة dnslookup عند محاولة التحقق مما إذا كان المجال المعني يتم حله أم لا
  • tld_use_connect، هذا الخيار يمكّن وظيفة الاتصال بالمجال المعني عبر قائمة من المنافذ، المحددة في الخيار tlds_connect_ports
  • يقبل الخيار tlds_connect_ports قائمة من المنافذ، مفصولة بفواصل، أو قائمة من النطاقات، مثل 25-40,90-100,80,443,8443 (بداية ونهاية النطاق شاملة)
    • tld_con_time_out، هذا لتحديد المهلة الزمنية القصوى لوظيفة الاتصال
  • tld_con_use_ssl، تمكين/تعطيل استخدام SSL عند محاولة الاتصال بالمجال
  • إذا تم تعيين save_to_file_subd على true، سيتم حفظ النطاقات الفرعية المكتشفة في "\expanded\exp_subdomain_<pm|am>.txt"
  • إذا تم تعيين save_to_file_tld على true، سيتم حفظ المجالات المكتشفة في "\expanded\exp_tld_<pm|am>.txt"
  • إذا تم تعيين exit_here على true، فسيخرج Crawlector بعد تنفيذ هذه الوظيفة [site]، بغض النظر عن الخيارات الأخرى الممكّنة. هذا يعني أنه لن يتم الزحف إلى المواقع التي تم العثور عليها أو تصفحها
  • أمر التحكمالوصف
    cl_get_dateيسترجع تاريخ ووقت بدء Crawlector والتاريخ والوقت الحاليين.
    cl_pingيرسل مرة أخرى الرسالة "Pong...". هذا للتحقق من أن قناة C&C تعمل.
    cl_get_configيقوم بتحميل ملف التكوين المستخدم حاليًا (مثل cl_config.ini) كملف نصي.
    cl_update_delay <عدد_صحيح_بالميلي_ثانية>يقوم بتحديث وقت تسجيل الوصول بين كل طلب سحب لأوامر التحكم.

    - يغير القيمة (ctrl_sleep) للجلسة الحالية فقط.

    cl_turn_off_slack_alertيقوم بإيقاف تشغيل ميزة تنبيه Slack للجلسة النشطة حاليًا.
    cl_turn_on_slack_alertيقوم بتشغيل ميزة تنبيه Slack للجلسة النشطة حاليًا.
    cl_helpيسرد رسالة المساعدة هذه.
    cl_exitينهي Crawlector، بقوة.