
⚠️ قيد التطوير — يتم تطوير المشروع بنشاط. محرك المسح الأساسي يعمل؛ إصرار قاعدة البيانات، التخزين المؤقت، وتغطية الاختبارات الكاملة مخطط لها في التكرارات القادمة.
NuReaper هو واجهة خلفية لتطبيق .NET 8 تقوم بتحليل أمان حزم NuGet تلقائيًا. يمكنك توفير رابط لأي حزمة NuGet، ويقوم النظام بتنزيل شجرة التبعيات بأكملها بشكل متكرر، وإعادة ترجمة الكود المُجمَّع، ومسح كل دالة (Method) بحثًا عن أنماط ضارة — مع إرجاع تقرير تهديد مفصل.
🔍 للقُرّاء غير التقنيين: تخيل أنك تُثبّت تطبيقًا على هاتفك. معه، يتم تثبيت العشرات من المكتبات الصغيرة تلقائيًا. NuReaper يفحص كل واحدة منها — بالنظر إلى الكود الثنائي المُجمَّع الفعلي — ويكتشف ما إذا كان أي منها يحاول الاتصال بخوادم مشبوهة، أو تنفيذ كود مخفي، أو إخفاء سلوكه الحقيقي.
أرسل طلب HTTP واحدًا مع رابط حزمة NuGet، وسيقوم NuReaper بالتالي:
.nupkg ويحسب تجزئة SHA-256 الخاصة بهيقوم المحرك بتحليل الكود على مستوى تعليمات IL (اللغة الوسيطة) ويتعرف على 7 أنماط مميزة للبرامج الضارة:
Network: HttpClient, WebClient, DNS, TcpClient, WebSocket
Execution: Process.Start, Assembly.Load, Activator.CreateInstance
Low-level: DllImport, VirtualAlloc, CreateThread, NtCreateThreadEx
System: ManagementObjectSearcher (WMI)
String-based: Concatenation, CharArray, Interpolation, StringBuilder
Suspicious: URL, IP address, .onion address, Base64
تأخذ خوارزمية التهديف في الاعتبار:
POST /api/PackageScanيقوم بمسح حزمة NuGet المقدمة مع شجرة تبعيتها الكاملة.
الطلب:
{
"url": "https://www.nuget.org/packages/System.Net.Http/4.3.4"
}
الاستجابة:
{
"rootPackageName": "System.Net.Http",
"rootPackageVersion": "4.3.4",
"totalPackages": 12,
"totalFindingsFromAllPackages": 5,
"threatLevelAllPackages": 47.5,
"scannedTimeAllPackages": "2026-03-25T12:00:00Z",
"packages": [
{
"packageName": "System.Net.Http",
"version": "4.3.4",
"sha256Hash": "abc123...",
"threatLevel": 35.0,
"totalFindings": 3,
"findings": [
{
"type": "HttpClientCall",
"confidenceScore": 95.0,
"dangerLevel": 60.0,
"evidence": "http://example.com/payload",
"location": "MyClass::SendData",
"hopDepth": 0,
"flowTrace": "[Pattern1] Direct API call using string..."
}
]
}
],
"dependencyGraph": {
"rootPackage": "[email protected]",
"nodes": [...],
"edges": [...],
"cycles": [...]
}
}
مبنية على الهندسة النظيفة (Clean Architecture) مع فصل صارم للمسؤوليات:
NuReaperBackend/
├── NuReaper.Api/ # طبقة API — المتحكمات، الوسائط، التشغيل
├── NuReaper.Application/ # طبقة التطبيق — الأوامر، الواجهات، DTOs، التحقق
├── NuReaper.Domain/ # النواة الأساسية — الكيانات، العدادات، التجريدات
├── NuReaper.Infrastructure/ # التطبيقات — الماسحات، المحلّلات، المستودعات
│ └── Repositories/
│ ├── Scanners/ # محرك تحليل IL
│ │ ├── Analysis/ # ScanModule, ScanMethod, NetworkApiCallScan
│ │ ├── Detectors/ # 7 كاشفات أنماط (Pattern1–Pattern7)
│ │ ├── Patterns/ # PatternRegistry (تعبيرات منتظمة: URL, IP, .onion, Base64)
│ │ ├── RiskCalculation/# خوارزمية تقييم التهديد
│ │ ├── Finders/ # تحديد موقع استدعاءات API داخل تعليمات IL
│ │ ├── VariableAnalysis/# تتبع قيم المتغيرات عبر IL
│ │ └── StringAnalysis/ # إعادة بناء السلاسل النصية من الأجزاء
│ ├── Parsers/ # تحليل ملفات .nuspec
│ ├── GraphBuilders/ # بناء رسم بياني للتبعيات (BFS + تكرار)
│ └── FileHelpers/ # تنزيل، استخراج، SHA-256
└── Docker/
├── Dockerfile
└── docker-compose.yml
Package URL
│
▼
DependencyGraphBuilder ← يبني الرسم البياني للتبعيات من ملفات .nuspec
│ (تكرار + BFS، كشف الدورات)
▼
قائمة الحزم الفريدة
│
▼ (بالتوازي، SemaphoreSlim — عدد الخيوط = CPU-1)
NetworkApiCallScan لكل حزمة
├── DownloadPackageAsync ← يجلب .nupkg
├── CalculateSha256 ← التحقق من التكامل
├── ExtractNupkgAsync ← يفك ضغط الأرشيف
└── GetAssemblyFiles ← يسرد ملفات .dll
│
▼ (Parallel.ForEachAsync)
ScanModule (لكل ملف .dll)
│
▼ (Parallel.ForEach — جميع الأنواع والدوال)
ScanMethod (لكل دالة)
│
▼ (7 كاشفات أنماط)
Pattern1..7 → FindingSummaryDto
│
▼
CalculateThreatLevel ← درجة من 0 إلى 100
│
▼
ScanPackageResultResponse
هذا المشروع متاح بموجب رخصة PolyForm Noncommercial License 1.0.0، ويُحظر الاستخدام التجاري. للتراخيص التجارية أو الاستفسارات، اتصل على: [email protected]
| # | النمط | الوصف |
|---|
| 1 | استدعاء API مباشر | سلسلة نصية مشبوهة تُستخدم فورًا في استدعاء شبكة |
| 2 | تعيين سلسلة نصية | URL يتم تعيينه لمتغير، ثم تمريره إلى استدعاء شبكة |
| 3 | بناء سلسلة نصية | URL يُبنى عن طريق الربط ("http://" + var + "/path") — تقنية إخفاء |
| 4 | إقحام سلسلة نصية | URL يُجمّع عبر الإقحام ($"{part1}{part2}") |
| 5 | إقحام حروف فقط | URL يُبنى حرفًا بحرف من مصفوفة أحرف — إخفاء متقدم |
| 6 | معالج السلاسل المُقحم الافتراضي (DefaultInterpolatedStringHandler) | آلية إقحام منخفضة المستوى تُستخدم لإخفاء السلاسل من التحليل الثابت |
| 7 | استدعاءات API عارية | استدعاءات شبكة مباشرة بدون سلاسل نصية صريحة (TcpClient.Connect, Socket.Connect, Process.Start) |
| المجال | التقنية / النمط |
|---|
| الهيكل المعماري | Clean Architecture (الهندسة النظيفة) |
| التواصل بين الطبقات | CQRS + MediatR |
| تحليل كود IL | dnlib |
| التحقق من الإدخال | FluentValidation + نمط السلوك في MediatR Pipeline |
| تعيين الكائنات | AutoMapper |
| التسجيل | Serilog (وحدة التحكم + ملف دوار يومي) |
| توثيق API | Swagger / OpenAPI |
| قاعدة البيانات | Entity Framework Core + MySQL (Pomelo) |
| HTTP | IHttpClientFactory مع تجميع الاتصالات |
| الحاوية | Docker + Docker Compose |
| الاختبارات | xUnit + Moq |
| الحزمة | الغرض |
|---|
dnlib | فك ترجمة وتحليل .NET IL |
MediatR | CQRS — خط الأوامر/الاستعلامات |
FluentValidation | التحقق من صحة الطلبات |
AutoMapper | تعيين الكائنات عبر الطبقات |
Serilog | التسجيل المنظم |
Pomelo.EntityFrameworkCore.MySql | ORM لـ MySQL |
Swashbuckle.AspNetCore | واجهة Swagger |
xUnit + Moq | اختبارات الوحدة |