إنتقل إلى المحتوى الرئيسي

نظرة عامة على الهندسة

نظرة عميقة على الهندسة الداخلية لباطن، وقرارات التصميم، وسبب وجود كل مكون.

الهندسة عالية المستوى

مبادئ التصميم الأساسية

1. صفر كود غير آمن

#![forbid(unsafe_code)]

لماذا؟ أدوات الأمان يجب أن تكون آمنة بنفسها. أخطاء فساد الذاكرة في محلل الملفات يمكن استغلالها بملفات خبيثة مصممة.

2. الدفاع في العمق

باطن لا يثق أبداً بطريقة كشف واحدة:

  • البايتات السحرية
  • التحقق من الامتداد
  • التحقق من البنية
  • فحص الإنتروبيا
  • فحص المحتوى

3. استخدام الموارد المحدود

كل عملية محدودة الموارد:

الموردالحدالتكوين
الذاكرةmax_read_bytes3KB افتراضياً
الوقتtimeout_ms5 ثوانٍ افتراضياً
إدخالات الأرشيفMAX_ARCHIVE_ENTRIES10,000
حجم الأرشيفMAX_TOTAL_EXTRACTED_SIZE100MB

4. ضمان عدم التوقف

مختبر ضد أي إدخال لضمان عدم التوقف:

// جميع واجهات البرمجة العامة تعيد Result<T, DetectionError>
pub fn from_bytes(data: &[u8], config: &DetectionConfig) -> Result<Self>

تنظيم الوحدات

src/
├── lib.rs # الأنواع الأساسية، واجهة البرمجة الرئيسية
├── main.rs # نقطة دخول CLI
├── utils.rs # أدوات البايت

├── detection/ # كشف الملفات
│ ├── signatures.rs # قاعدة بيانات البايتات السحرية
│ ├── entropy.rs # إنتروبيا شانون
│ ├── polyglot.rs # كشف الصيغ المتعددة
│ └── embedded.rs # التهديدات المضمنة

├── analysis/ # التحليل العميق
│ ├── validation.rs # التحقق من البنية
│ ├── forensics.rs # تصنيف الأجزاء
│ └── binary.rs # تحليل PE/ELF

├── io/ # عمليات I/O
│ ├── batch.rs # المعالجة المتوازية
│ ├── archive.rs # فحص الأرشيف
│ └── hasher.rs # هاش الملفات

└── cli/ # واجهة سطر الأوامر
├── scanner.rs # أمر الفحص
├── watcher.rs # أمر المراقبة
└── console.rs # تنسيق الواجهة

سلامة الخيوط

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

pub static SIGNATURE_DB: LazyLock<RwLock<SignatureDatabase>> = 
LazyLock::new(|| RwLock::new(SignatureDatabase::default()));

لماذا LazyLock<RwLock<...>>?

  1. LazyLock: التهيئة مرة واحدة، عند أول وصول
  2. RwLock: قراء متعددون، كاتب واحد
  3. آمن: لا حاجة للتزامن اليدوي

للمساهمين

فهم الهندسة يساعدك على:

  • معرفة أين تضيف ميزات جديدة
  • الحفاظ على أنماط تصميم متسقة
  • كتابة كود فعال وآمن
  • فهم لماذا اتُخذت القرارات

راجع دليل المساهمة للبدء في المساهمة!