基于Tailscale的WireGuard加密网格网络构建的Windows远程桌面持久化工具。TailVNC将一个完全自包含的VNC服务器和Tailscale节点嵌入到一个二进制文件中,使用户能够通过Tailscale/Headscale安全地进行远程桌面访问,而不会向公共互联网暴露任何端口。该工具旨在支持合法的基础设施管理和红队持久化操作。
灵感来自SockTail.
Tailscale/Headscale 集成 - 利用
tsnet将 WireGuard 对等节点直接嵌入到二进制文件中;支持官方 Tailscale 协调和自托管的 Headscale 控制平面Windows 会话 0 隔离绕过 - 以 SYSTEM 身份运行时,通过
CreateProcessAsUser自动在活动用户会话中启动一个代理进程,并通过 IPC 代理 VNC 交通,绕过 Vista+ 会话隔离动态桌面跟踪 - 跟随用户穿越桌面转换,包括默认桌面、Winlogon(登录屏幕)、UAC安全桌面和锁定屏幕,通过
OpenInputDesktop/SetThreadDesktopCtrl+Alt+Del 注入 - 通过会话 0 发送安全警报序列
sas.dll!SendSAS双向剪贴板同步 - 在VNC客户端和目标主机之间进行拉丁-1剪贴板同步
编译时配置嵌入 - 授权密钥、VNC密码、监听端口和控制URL是通过LDFLAGS在编译时注入的;生成的二进制文件在运行时不需要配置文件
Auth Key 混淆 - Tailscale auth key 在编译时通过 XOR 混淆以防止二进制文件中出现明文凭证暴露
┌──────────────────────────────────────────────┐ │ TailVNC Service (Session 0) │ │ │ │ tsnet.Server ───► Tailscale/Headscale Net │ │ │ │ │ VNC Listener :5900 (Tailscale interface) │ │ │ │ │ ┌────▼───────────────────────────────────┐ │ │ │ Session Manager │ │ │ │ - Polls active console session (2s) │ │ │ │ - Spawns agent via CreateProcessAsUser│ │ │ │ - Auto-restarts on session change │ │ │ │ or agent crash │ │ │ └────┬───────────────────────────────────┘ │ │ │ TCP Proxy (bidirectional) │ └───────┼──────────────────────────────────────┘ ▼ ┌────────────────────────────────────────┐ │ VNC Agent (User Session, Desktop) │ │ 127.0.0.1:15900 │ │ - GDI+ screen capture (~30fps) │ │ - SendInput keyboard/mouse injection │ │ - Clipboard monitoring │ └────────────────────────────────────────┘
| 组件 | 科技 |
|---|---|
| 语言 | Go 1.25+ |
| 网络传输 | Tailscale tsnet — 嵌入式WireGuard对等体 |
| VNC 协议 | RFB 3.008(自定义实现,Raw 编码) |
| 屏幕捕获 | Windows GDI+ (CreateDIBSection, BitBlt) |
| 输入注入 | Windows SendInput 应用程序编程接口 |
| 会话管理 | WTSQueryUserToken+CreateProcessAsUser |
| 桌面切换 | OpenInputDesktop+SetThreadDesktop |
| SAS 注射 | sas.dll!SendSAS |
| 认证 | VNC DES 挑战应答(根据 RFB 规范) |
| 密钥混淆 | XOR + 十六进制编码 |
| 系统调用 | golang.org/x/sys(Windows 系统调用包装器) |
| 二进制压缩 | UPX(可选) |
| 构建系统 | GNU Make + Go LDFLAGS 注入 |
去 >= 1.25.3
GNU Make
UPX(可选,用于减少二进制文件大小)
Tailscale 认证密钥 — 从 Tailscale 管理控制台生成;建议为运营用途生成可重复使用和临时密钥
| 参数 | 必填 | 默认 | 描述 |
|---|---|---|---|
AUTH_KEY | 是的 | — | Tailscale 认证密钥;在编译时自动 XOR 混淆和嵌入 |
LISTEN_PORT | 不 | 5900 | VNC 监听端口在 Tailscale 接口上 |
AUTH_PASS | 不 | 空(无认证) | VNC连接密码(DES挑战响应) |
CONTROL_URL | 不 | 空 (官方 Tailscale) | 头部规模控制平面 URL |
CONFIG_DIR | 不 | C:\Windows\Temp\.cache | 持久的tsnet状态目录(WireGuard密钥,节点身份) |
# Minimal build — only auth key requiredmake build-vnc AUTH_KEY=tskey-auth-kBEXAMPLEKEY# Full build with all parameters# [CONTROL_URL] — optional, only required when using a self-hosted Headscale control plane# [CONFIG_DIR] — optional, overrides the default tsnet state directory (C:\Windows\Temp\.cache)make build-vnc \
AUTH_KEY=tskey-auth-kBEXAMPLEKEY \
LISTEN_PORT=5900 \
AUTH_PASS=VNCPassword \
[CONTROL_URL=https://headscale.example.com] \
[CONFIG_DIR='C:\Windows\Temp\.cache']构建产物被写入到 dist/:
dist/TailVNC-windows-amd64.exe
构建管道执行以下步骤:
清理之前的构建文件
下载和整理 Go 模块依赖项
运行
obfuscator/以对认证密钥进行XOR混淆通过LDFLAGS将所有配置注入到二进制文件中 (
-X)剥离符号表和DWARF调试信息 (
-s -w)如果可用,用UPX压缩二进制文件 (
--best --lzma)
make clean # Remove build artifactsmake deps # Download and tidy Go modulesmake help # Print usage and parameter referenceTailVNC必须以SYSTEM权限运行。 当在第0会话中执行(作为Windows服务或在SYSTEM上下文中)时,该工具会自动检测活动的控制台会话,在其中启动一个代理进程以进行屏幕捕获和输入注入,并代理所有VNC流量。如果直接在交互式用户会话中启动,它将本地模式运行,不经过代理代理层。
执行后,目标主机将作为一个新节点加入配置的 Tailscale 网络。使用任何标准 VNC 客户端进行连接:
<Tailscale IP>:5900



支付宝微信扫一扫,打赏作者吧~
