סקירה כללית

מערכת LEVOR Remote Desktop בנויה על ארכיטקטורת Client-Server-Agent המאפשרת שליטה מרחוק מאובטחת במחשבי Windows. המערכת מורכבת משלושה רכיבים עיקריים:

┌─────────────────────────────────────────────────────────────────────────┐ │ INTERNET / LAN │ └─────────────────────────────────────────────────────────────────────────┘ │ │ │ ▼ ▼ ▼ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ WPF Client │ │ SignalR Server │ │ Host Agent │ │ (Viewer) │◄────►│ (Relay) │◄────►│ (Screen+Input) │ ├─────────────────┤ ├─────────────────┤ ├─────────────────┤ │ • Frame Display │ │ • Hub Routing │ │ • Screen Capture│ │ • Input Capture │ │ • Auth (JWT) │ │ • Input Inject │ │ • File Browser │ │ • Sessions │ │ • File Transfer │ │ • Audio Play │ │ • Database │ │ • Audio Capture │ │ • Clipboard │ │ • Audit Logs │ │ • Clipboard │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ ▼ │ ┌─────────────────┐ │ │ SQL Server │ │ │ Database │ │ ├─────────────────┤ │ │ • Users │ │ │ • Devices │ │ │ • Sessions │ │ │ • Audit Logs │ │ └─────────────────┘ │ ▼ ┌─────────────────┐ │ Blazor Dashboard│ │ (Admin UI) │ ├─────────────────┤ │ • User Mgmt │ │ • Device Mgmt │ │ • Monitoring │ │ • Audit Logs │ └─────────────────┘

רכיבי המערכת

Server (RemoteDesktop.Server)

שרת ASP.NET Core 8 המשמש כנקודת ממסר (Relay) בין הלקוח ל-Agent. מנהל את כל החיבורים, האימות, ה-Sessions ומסד הנתונים.

ASP.NET Core 8 SignalR EF Core JWT

Agent (RemoteDesktop.Agent)

תוכנת Console שרצה על המחשב המרוחק. אחראית על לכידת המסך, הזרקת קלט, העברת קבצים, לכידת אודיו וסנכרון Clipboard.

.NET 8 Console SharpDX NAudio SendInput

Client (RemoteDesktop.Client)

אפליקציית WPF המאפשרת צפייה ושליטה במחשב המרוחק. מציגה את זרם הווידאו, מקבלת קלט מהמשתמש ומנהלת העברת קבצים.

WPF MVVM CommunityToolkit

Dashboard (RemoteDesktop.Dashboard)

ממשק ניהול מבוסס Blazor Server לניהול משתמשים, מכשירים, צפייה ב-Sessions פעילים וביקורת לוגים.

Blazor Server Bootstrap

Shared (RemoteDesktop.Shared)

ספרייה משותפת המכילה את כל המודלים, ממשקים, שירותי הצפנה וקידוד וידאו. משמשת את כל הפרויקטים האחרים.

Models Interfaces Security Video

Shared.Services (RemoteDesktop.Shared.Services) חדש!

ספריית שירותים משותפת המאפשרת שיתוף קוד בין Agent ל-Client. כוללת את UnifiedSignalRService שמאחד את יכולות שני הצדדים.

UnifiedSignalR Services DRY

AgentClient (RemoteDesktop.AgentClient) חדש!

יישום WPF משולב המשלב את יכולות ה-Agent וה-Client. מאפשר לפעול כ-Agent (לאפשר שליטה מרחוק) וכ-Client (לשלוט במחשבים אחרים) בו-זמנית.

WPF Agent+Client Dual-Mode MVVM

זרימת נתונים

זרימת לכידת מסך (Screen Capture Flow)

Agent Server Client │ │ │ │ 1. Capture Screen (DXGI/GDI+) │ │ │ 2. Encode (H.264/VP8/JPEG) │ │ │ 3. Encrypt (XChaCha20-Poly1305) │ │ │ │ │ │────── SendEncryptedFrame() ────►│ │ │ │────── ReceiveEncryptedFrame() ─►│ │ │ │ │ │ │ 4. Decrypt │ │ │ 5. Decode │ │ │ 6. Display

זרימת קלט (Input Flow)

Client Server Agent │ │ │ │ 1. Capture Mouse/Keyboard │ │ │ 2. Normalize Coordinates │ │ │ 3. Encrypt │ │ │ │ │ │────── SendInput() ─────────────►│ │ │ │────── ReceiveInput() ──────────►│ │ │ │ │ │ │ 4. Decrypt │ │ │ 5. Inject (SendInput API)

תהליך יצירת Session

1
רישום Agent

Agent מתחבר לשרת וקורא ל-RegisterAgent() עם פרטי המכונה

2
התחברות Client

Client מתחבר, מבצע Login וקורא ל-GetAvailableAgents()

3
בקשת Session

Client קורא ל-RequestSession(agentId)

4
התחלת Streaming

Server שולח ל-Agent callback StartStreaming()

5
החלפת מפתחות

מתבצעת החלפת מפתחות X25519 להצפנה מקצה לקצה

6
זרימת נתונים

Agent שולח frames מוצפנים, Client שולח input מוצפן

מבנה הפרויקטים

פרויקט סוג תיאור קבצים עיקריים
RemoteDesktop.Shared Class Library ספרייה משותפת Models/, Security/, Video/, Hubs/
RemoteDesktop.Shared.Services חדש! Class Library שירותים משותפים Unified/UnifiedSignalRService.cs
RemoteDesktop.Server ASP.NET Core שרת SignalR RemoteDesktopHub.cs, Controllers/
RemoteDesktop.Agent Console App Agent מרוחק ScreenCaptureService.cs, InputInjectionService.cs
RemoteDesktop.Client WPF App לקוח צפייה MainViewModel.cs, MainWindow.xaml
RemoteDesktop.AgentClient חדש! WPF App Agent + Client משולב MainViewModel.cs, UnifiedSignalRService
RemoteDesktop.Dashboard Blazor Server ממשק ניהול Pages/
RemoteDesktop.Tests xUnit Unit Tests (266 tests) *Tests.cs

פרוטוקול תקשורת

SignalR Hub

כל התקשורת מתבצעת דרך SignalR WebSocket. ה-Hub מנהל:

  • Agent Methods: RegisterAgent, SendFrame, SendFrameEx
  • Client Methods: GetAvailableAgents, RequestSession, SendInput, EndSession
  • Encryption: InitiateKeyExchange, SendEncryptedFrame
  • File Transfer: RequestFileTransfer, SendFileChunk
  • Audio: SendAudioFrame
  • Clipboard: SendClipboardData

הגדרות SignalR

{ "SignalR": { "MaximumParallelInvocationsPerClient": 10, "MaximumReceiveMessageSize": 104857600, // 100 MB "KeepAliveInterval": "00:00:15", "ClientTimeoutInterval": "00:00:30" } }

מסד נתונים

המערכת משתמשת ב-Entity Framework Core 8 עם SQL Server (או In-Memory לפיתוח).

טבלאות עיקריות

┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ Users │ │ Devices │ │ Sessions │ ├─────────────────┤ ├─────────────────┤ ├─────────────────┤ │ Id (PK) │ │ Id (PK) │ │ Id (PK) │ │ Username │◄───┐│ OwnerId (FK) │ │ ClientUserId(FK)│ │ Email │ ││ DeviceId │◄───┐│ HostDeviceId(FK)│ │ PasswordHash │ ││ Name │ ││ SessionId │ │ Role │ ││ IsOnline │ ││ Status │ │ TwoFactorEnabled│ ││ PublicKey │ ││ StartedAt │ │ CreatedAt │ │└─────────────────┘ ││ EndedAt │ └─────────────────┘ │ │└─────────────────┘ │ │ │ │ │ │ ▼ │ │ ┌─────────────────┐ │ │ │ RefreshTokens │ │ │ ├─────────────────┤ │ │ │ Id (PK) │ │ │ │ UserId (FK) │────┘ │ │ Token │ │ │ ExpiresAt │ │ └─────────────────┘ │ │ ┌─────────────────┐ │ │ AuditLogs │ │ ├─────────────────┤ │ │ Id (PK) │ │ │ UserId (FK) │────────────────────────────┘ │ Action │ │ Details │ │ IpAddress │ │ Timestamp │ └─────────────────┘

Connection String

// SQL Server "Server=localhost;Database=RemoteDesktop;Trusted_Connection=true;TrustServerCertificate=true;" // In-Memory (Development) services.AddDbContext<AppDbContext>(options => options.UseInMemoryDatabase("RemoteDesktop"));