Skip to content
AnfyyaPublic

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

ZeroDesk

ZeroDesk 是一个面向 Windows 的开源 P2P 远程桌面控制软件原型,目标是提供零自建服务器成本、端到端加密、低交互延迟和精细权限控制。

当前仓库已经提供一套可编译的 MVP 实现:

  • C++17 + DXGI Desktop Duplication 屏幕采集库
  • RAW_BGRA 脏区编码链路,以及 Windows Media Foundation 的 H.264 / H.265 / AV1 编解码链路
  • Rust 侧手动连接串交换、STUN、公网候选收集与 ICE-like 建链
  • X25519 + ChaCha20-Poly1305 会话加密
  • egui 控制端与被控端界面
  • 键鼠权限控制与实时状态同步
  • Cloudflare Workers / Wrangler Dev 可选信令服务接入
  • TURN relay 回退、Agent 系统托盘常驻、Viewer 动态码率自适应、Agent / Viewer 侧日志按日轮转落盘

当前实现说明

为了保证仓库在纯开源依赖和默认 Windows 环境下可编译,本仓库保留 RAW_BGRA 路径作为兜底,同时已经接入基于 Windows Media Foundation 的多码流编码与解码。若系统装有对应驱动提供的硬件 MFT,H.264 / H.265 / AV1 会优先使用硬件编码路径;否则自动回退到软件 H.264 或 RAW_BGRA。Agent 还支持在本地采集侧选择自动、DXGI 或 Windows.Graphics.Capture 后端,Viewer 侧支持根据 RTT 与丢包自动调节目标码率。

目录结构

ZeroDesk/
├── core-capture/          # C++ 屏幕采集、脏区编码、输入注入、预览程序
├── core-net/              # Rust 网络、加密、手动信令、UDP 传输
├── core-protocol/         # Rust Protobuf 协议定义
├── agent/                 # Rust 被控端 GUI
├── viewer/                # Rust 控制端 GUI
├── signaling/             # Cloudflare Workers 信令服务示例
├── scripts/               # 构建脚本
├── Cargo.toml             # Cargo workspace
├── CMakeLists.txt         # C++ 根工程
└── LICENSE                # MIT 许可证

架构图

flowchart LR
    Viewer[Viewer\nRust + egui] -->|手动连接串 / 可选信令| CoreNetViewer[core-net]
    Agent[Agent\nRust + egui] -->|FFI| Capture[core_capture.dll\nC++ / DXGI]
    Viewer -->|键鼠事件| CoreNetViewer
    CoreNetViewer <-->|加密 UDP / ICE-like| CoreNetAgent[core-net]
    CoreNetAgent -->|视频帧| Agent
    Capture -->|全帧 / 脏区帧| CoreNetAgent
    Viewer -->|渲染| Decoder[Viewer Decoder]
    Decoder -->|贴图| Viewer
Loading

已完成能力

  1. DXGI Desktop Duplication 采集桌面帧,读取脏矩形与移动矩形。
  2. C++ 本地预览程序 zerodesk_preview.exe,可直接镜像当前桌面。
  3. Rust STUN 客户端,可向公共 STUN 获取 srflx 候选。
  4. Base64 手动交换连接串,内含设备指纹、公钥与候选地址。
  5. X25519 会话密钥交换,ChaCha20-Poly1305 数据包加密。
  6. 自定义 UDP 传输层,包含视频分片、控制消息可靠重传、心跳 RTT。
  7. 被控端权限控制:查看屏幕、键盘、鼠标可单独开关。
  8. 控制端支持 RAW_BGRA 脏区合成,以及 H.264 / H.265 / AV1 解码,并可回传键鼠事件。
  9. Agent / Viewer 可接入同一 WebSocket 信令房间,自动收发连接串。
  10. 收到对端连接串后可自动发起建链,并在失败后自动重建本地 Peer。
  11. Agent / Viewer 现在可直接在 GUI 中填写 TURN 服务器、用户名和密码,并在生成连接串时收集 TURN relay 候选。
  12. Agent 支持系统托盘常驻,关闭主窗口时可隐藏到托盘并从托盘菜单恢复。
  13. Agent 支持自动、DXGI Desktop Duplication 与 Windows.Graphics.Capture 三种采集后端;WGC 既可整屏采集,也可选择单个窗口作为采集目标。
  14. Viewer 支持动态码率自适应,会根据 RTT 与丢包在设定上下限内自动调整目标码率。

构建要求

  • Windows 10/11
  • Visual Studio 2022 + Windows SDK
  • Rust stable toolchain
  • CMake 3.24+
  • 推荐编译器路径:D:/vs2022/vs2022.exe/VC/Tools/MSVC/14.44.35207/bin/Hostx86/x86/cl.exe

构建步骤

方式一:直接使用脚本

scripts\build_release.bat

该脚本会生成一个便携分发目录:

dist\ZeroDesk-portable-release

方式二:手动构建 C++ 与 Rust

cmake -S . -B build -G "Visual Studio 17 2022" -A x64
cmake --build build --config Debug
cargo test -p core-protocol -p core-net
cargo check -p viewer -p agent

编译完成后,关键产物位于:

  • build/core-capture/Debug/core_capture.dll
  • build/core-capture/Debug/zerodesk_preview.exe
  • target/debug/agent.exe
  • target/debug/viewer.exe

安装脚本位于:

  • installer/ZeroDesk.iss

使用方式

1. 验证本地采集链路

直接运行:

build\core-capture\Debug\zerodesk_preview.exe

程序会打开一个本地预览窗口,实时显示当前桌面。

2. 建立远程桌面连接(手动交换)

  1. 启动 agent.exe。
  2. 复制 Agent 窗口中的本地连接串到 Viewer。
  3. 启动 viewer.exe。
  4. 将 Viewer 的本地连接串粘贴回 Agent。
  5. 两端分别点击建立连接 / 接受连接。
  6. 连接成功后,Viewer 会显示远程桌面并按权限发送键鼠事件。

3. 建立远程桌面连接(信令房间自动发现)

  1. 在 signaling 目录部署 Worker,或者本地运行 wrangler dev。
  2. 启动 agent.exe 与 viewer.exe。
  3. 在两端界面的“可选信令房间”中填写同一个地址与房间号。
  4. 两端点击“连接信令并发布”。
  5. 程序会自动收到对端连接串,并在启用自动建链时直接建立连接。

本地调试时,默认地址可以直接使用:

http://127.0.0.1:8787

信令策略

当前应用内同时支持两种方式:

  1. 手动交换连接串。
  2. 通过 Cloudflare Workers / Wrangler Dev WebSocket 房间自动交换连接串。

仓库中的 signaling 目录提供的 Worker 只转发候选、公钥与连接串,不参与媒体数据传输。

安全设计

  • 持久身份:Ed25519 设备身份,首次启动时生成并落盘。
  • 会话密钥:每次连接生成临时 X25519 密钥对。
  • 加密算法:ChaCha20-Poly1305,按 UDP 数据包级别加密。
  • 指纹核对:界面显示短码与指纹,供用户人工确认。

日志位置

Agent 与 Viewer 会把日志写入本地目录:

%LOCALAPPDATA%\ZeroDesk\logs

日志文件按日轮转,默认文件名为:

  • agent.log
  • viewer.log

已知限制

  1. 当前仓库仍以 Windows Media Foundation 为默认视频编码实现;NVIDIA NVENC、AMD AMF、Intel QSV 的专用 SDK 编码器尚未独立接入。
  2. H.265 / AV1 依赖系统安装的 Windows Media Foundation 解码器和对应硬件/驱动能力;若本机缺失相关组件,会回退到其他可用码流。
  3. 窗口级 WGC 采集依赖目标窗口保持可见且未销毁;若窗口最小化、切换到受保护内容或关闭,会导致采集失败并需要重新选择目标。
  4. Ctrl+Alt+Del、UAC 安全桌面等场景仍受 Windows 权限与桌面隔离限制。

测试与验证

本仓库已经通过以下验证命令:

cargo test -p core-protocol -p core-net
cargo check --workspace

同时已通过 CMake 构建验证:

cmake --build build --config Debug

C++ 采集层已通过 CMake 构建验证:

cmake --build build --config Debug

开源协议

本项目使用 MIT License,详见 LICENSE。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages