هيكل الوحدات
دليل لتنظيم الكود المصدري لباطن ومسؤوليات الوحدات.
تخطيط المجلدات
src/
├── lib.rs # نقطة دخول المكتبة، الأنواع الأساسية
├── main.rs # نقطة دخول الـ CLI الثنائي
├── utils.rs # وظائف المرافق المشتركة
│
├── detection/ # كشف نوع الملف
│ ├── mod.rs # تصدير الوحدة
│ ├── signatures.rs # قاعدة بيانات البايتات السحرية
│ ├── entropy.rs # حسابات الإنتروبيا
│ ├── polyglot.rs # كشف الصيغ المتعددة
│ └── embedded.rs # فحص التهديدات المضمنة
│
├── analysis/ # تحليل الملفات العميق
│ ├── mod.rs # تصدير الوحدة
│ ├── validation.rs # التحقق من البنية
│ ├── forensics.rs # تصنيف الأجزاء
│ └── binary.rs # تحليل PE/ELF/Mach-O
│
├── io/ # عمليات الإدخال/الإخراج
│ ├── mod.rs # تصدير الوحدة
│ ├── batch.rs # معالجة الملفات المتوازية
│ ├── archive.rs # استخراج الأرشيفات
│ └── hasher.rs # تجزئة الملفات
│
└── cli/ # واجهة سطر الأوامر
├── mod.rs # تصدير وحدة CLI
├── scanner.rs # أمر الفحص
├── watcher.rs # أمر المراقبة
└── console.rs # تنسيق الطرفية
الوحدة الأساسية: lib.rs
المسؤوليات
- تعريف الأنواع الأساسية (
FileType،DetectionConfig،ThreatLevel) - واجهة الكشف الرئيسية (
from_bytes،from_file_path) - إعادة تصدير العناصر العامة من الوحدات الفرعية
- أنواع الأخطاء (
DetectionError)
أقسام الكود الرئيسية
// أنواع الأخطاء
#[derive(Error, Debug)]
pub enum DetectionError {
Io(#[from] std::io::Error),
FileTooLarge(u64, u64),
CorruptedStructure(String),
Timeout(u64),
Unsupported,
}
// التكوين
pub struct DetectionConfig {
pub max_read_bytes: usize,
pub enable_entropy: bool,
pub enable_polyglot: bool,
pub enable_embedded: bool,
pub entropy_threshold: f64,
pub timeout_ms: u64,
}
// نوع النتيجة الرئيسي
pub struct FileType {
pub extension: String,
pub mime_type: String,
pub confidence: f64,
pub entropy_profile: Option<EntropyProfile>,
pub threat_level: ThreatLevel,
pub detected_formats: Vec<String>,
pub embedded_threats: Vec<EmbeddedThreat>,
pub hashes: Option<FileHashes>,
pub binary_metadata: Option<BinaryMetadata>,
}
وحدة الكشف
signatures.rs
الغرض: قاعدة بيانات توقيعات البايتات السحرية
المكونات الرئيسية:
// قاعدة بيانات عامة آمنة للخيوط
pub static SIGNATURE_DB: LazyLock<RwLock<SignatureDatabase>>
// تعريف التوقيع
pub struct FileSignature {
pub magic: &'static [u8], // البايتات السحرية
pub offset: usize, // الموقع في الملف
pub additional_magic: Option<...>, // التحقق الثانوي
pub extensions: Vec<String>, // امتدادات الملفات
pub mime_type: &'static str, // نوع MIME
pub category: FileCategory, // التصنيف
}
// قاعدة بيانات بأكثر من 60 صيغة
pub struct SignatureDatabase {
pub signatures: Vec<FileSignature>,
pub extension_map: HashMap<String, Vec<usize>>,
}
entropy.rs
الغرض: حسابات إنتروبيا شانون واختبار كاي مربع
الوظائف الرئيسية:
// إحصائيات المرور الواحد
pub fn calculate_entropy_stats(data: &[u8]) -> EntropyStats
// التحليل الشامل
pub fn analyze_entropy(
data: &[u8],
packed_threshold: f64
) -> Result<EntropyProfile>
polyglot.rs
الغرض: كشف الملفات الصالحة في صيغ متعددة
embedded.rs
الغرض: فحص المحتوى الخبيث المضمن
وحدة التحليل
validation.rs
الغرض: التحقق من بنية الملف بعد البايتات السحرية
forensics.rs
الغرض: تصنيف أجزاء الملفات بدون رؤوس
binary.rs
الغرض: استخراج البيانات الوصفية من الملفات التنفيذية
وحدة الإدخال/الإخراج
batch.rs
الغرض: معالجة الملفات المتوازية
archive.rs
الغرض: استخراج وفحص الأرشيفات بأمان
hasher.rs
الغرض: حساب تجزئة الملفات
وحدة CLI
scanner.rs
الغرض: تنفيذ أمر batin scan
watcher.rs
الغرض: تنفيذ أمر batin watch
console.rs
الغرض: تنسيق الطرفية وتنسيق الإخراج
علامات الميزات
[features]
default = ["full"]
full = ["hashing", "binary-parsing", "archive", "cli"]
hashing = ["md-5", "sha2"] # io/hasher.rs
binary-parsing = ["goblin"] # analysis/binary.rs
archive = ["zip", "tar", "flate2"]# io/archive.rs
cli = ["clap", "colored", ...] # cli/*
لماذا الميزات الاختيارية؟
- ملف ثنائي أصغر للاستخدام كمكتبة فقط
- اعتماديات أقل عندما لا تكون مطلوبة
- ترجمة أسرع للميزات الأساسية
نصيحة للمس اهمين
عند إضافة وظائف جديدة:
- منطق الكشف → وحدة
detection/ - التحليل العميق → وحدة
analysis/ - إدخال/إخراج الملفات → وحدة
io/ - أوامر CLI → وحدة
cli/ - المرافق المشتركة →
utils.rs