跨平台 Electron GUI,用于 Sliver C2 框架,提供会话与 beacon 仪表盘、payload 生成、监听器、loot 以及云部署管理。
Sliver GUI 是一款面向 Sliver 的跨平台 Electron 桌面应用。它将后端连接、实时状态视图、专用工作区以及原生 Sliver 控制台整合到一个基于 React 的界面中,该界面使用 HeroUI、HeroUI Pro 和 Font Awesome 构建。
该 GUI 并未实现所有上游命令或选项。操作员连接使用 mTLS;WireGuard 操作员配置可被识别但无法连接。有关跟踪的覆盖范围,请参见操作员一致性报告;有关具体边界,请参见下方的功能文档。
npm run setup:rdp 会安装固定版本的 Rust 1.94.1 工具链和平台目标。支持的版本和锁定依赖记录在 package.json 和 package-lock.json 中。应用代码使用严格 TypeScript;构建辅助脚本使用 Node.js ES 模块。
npm ci --strict-allow-scripts
npx heroui-pro login
npx heroui-pro install --yes
npm run setup:rdp
npm run dev
初始工作站设置需要 HeroUI 登录/安装步骤;当 HEROUI_AUTH_TOKEN 已配置用于安装时,可以跳过这些步骤。请勿将凭据保留在受跟踪的文件中。
npm run dev 会构建并在 sliver://app/index.html 启动静态应用,使用生产内容安全策略。它还会从固定版本的 IronRDP fork 构建宿主 RDP 辅助程序。普通的 TypeScript 构建和单元测试不需要编译 Rust。源代码更改后请重新启动命令;此工作流不使用 HMR。
TypeScript 客户端从固定版本的 sliver-script npm 包安装。不需要相邻的客户端检出。普通应用开发不需要 Sliver 源代码检出;构建原生控制台则需要。
默认的 Sliver 客户端根目录是 ~/.sliver-client;SLIVER_CLIENT_ROOT_DIR 可以选择另一个根目录。应用偏好设置(包括 Overview 图形选项)保存在该根目录下的 gui/application-settings.json 中;工作区缩放保存在 gui/workspace-zoom.json 中,文本编辑器偏好保存在 gui/text-editor-settings.json 中。GUI 会发现 configs/ 中现有的操作员配置,并在有效配置保存到该目录时更新打开的配置选择器。它会把通过 Import 选择的配置保存为 gui/operator-configs.json 中的私有文件引用。Import 和 Forget 不会复制或删除源配置。
远程桌面配置文件和端点证书固定信息位于 gui/rdp.json。默认省略密码,可以保留到应用退出,也可以使用操作系统的安全存储进行加密。当 Linux 选择未加密的密钥存储时,无法使用持久密码。剪贴板传输是显式的,且仅限于文本;关闭 RDP 标签页会断开连接,但不会注销远程 Windows 账户。
Settings → General → Appearance → Disable window transparency 会立即在整个应用中关闭原生窗口玻璃效果。该开关默认关闭,因此在支持的地方仍会启用透明度。它会与其他应用偏好设置一起保存,并优先于终端透明度。
Ghostty 兼容的终端颜色在 Settings → Terminal 中配置,并保存到 gui/ghostty/config。自定义主题应放在 gui/ghostty/themes/ 中;已安装的原生 Ghostty 主题会被自动发现。有关配置共享、Monaco 编辑器、平台透明度支持和运行时限制,请参阅终端外观与 Ghostty 主题。
| 命令 | 用途 |
|---|---|
npm run typecheck | 检查 main/preload 和 renderer TypeScript 项目。 |
npm test | 运行 Vitest 单元测试和组件测试。 |
npm run test:watch | 以交互方式运行 Vitest。 |
npm run test:e2e:electron | 构建并通过其 renderer、preload 和 IPC 测试 Electron。 |
npm run protocol:check | 验证固定版本的客户端、上游基线和一致性产物。 |
npm run build | 类型检查并在 dist/ 中构建应用输出。 |
npm run build:console | 构建固定版本的原生 Sliver 控制台。 |
npm run build:rdp:host | 为本机构建并验证 RDP 辅助程序。 |
npm run build:rdp | 构建 RDP 打包目标,包括两个 macOS 切片。 |
npm run test:rdp:native | 运行 Rust 运行时测试。 |
npm run package | 在 release/ 下创建未打包的应用程序。 |
npm run dist | 在 release/ 下创建平台安装程序。 |
npm run test:e2e:packaged | 针对本地 fixture 验证并测试现有的未打包应用程序。 |
单元测试和组件测试与源文件放在一起;Electron 场景位于 src/e2e/ 中。实际服务器测试是单独的、需主动启用的检查,需要配置一次性基础设施。fixture 测试不能证明与实时服务器或已安装包的兼容性。
协议检查使用 Go,并将固定版本的上游源码获取到临时目录中。有关来源校验以及使用显式选定的本地基线,请参阅协议文档。
控制台和发行版构建需要 Go 1.27.1,以及位于 console provenance 中记录的提交和树上的干净 Sliver 检出。将其放在 sliver/ 中,或设置 SLIVER_SOURCE_DIR。控制台构建会验证源码;它不会获取或修改该检出。
构建会禁用自动 Go 工具链切换。将所需的 Go 二进制文件放在 PATH 上,或将 SLIVER_GO_BINARY 设置为其绝对路径。通用 macOS 控制台构建需要 macOS 和 /usr/bin/lipo。
npm run package 和 npm run dist 在打包前准备原生运行时、控制台和许可证清单。dist/、release/、native/sliver-console/ 和 .e2e-dist/ 下生成的输出会被 Git 忽略。native/rdp/bin/ 下生成的 RDP 可执行文件、来源信息和 Cargo 许可证清单也会被忽略。辅助源码和锁文件会被跟踪。
CI 打包矩阵为:
| 平台 | 软件包 | 自动更新 |
|---|---|---|
| macOS universal | DMG 和 ZIP | 已安装的应用下载 ZIP 更新。 |
| Windows x64 | NSIS 安装程序和便携版 EXE | 仅限 NSIS 安装;便携版构建需手动更新。 |
| Linux x64 | AppImage 和 DEB | 仅限 AppImage;DEB 软件包需手动更新。 |
受支持的软件包已配置为检查 GitHub Releases、在后台下载更新,并在重启以更新或正常退出应用时安装。稳定版构建不接受预发布更新。应用中不嵌入任何 GitHub token。
初始 v0.0.1 版本使用持久性自签名代码签名证书。macOS 的检查更新会在首次更新检查前提供原生证书信任对话框;必须先允许应用通过 Gatekeeper 启动。Windows 安装需要目标机器信任公开签名证书。有关信任引导、公开指纹和发布密钥策略,请参阅自签名安装与更新。
构建目标与最低运行时认证是分开的。有关运行时要求、认证状态以及签名/更新策略,请参阅平台支持 ADR。
Electron 主进程负责后端客户端、操作员配置密钥、原生进程和文件系统访问。沙箱化的渲染进程使用范围狭窄、类型化的 preload API;IPC 会验证调用文档和所属窗口。
生产环境 CSP 阻止内联脚本和渲染进程网络连接,同时允许打包的 worker 和本地 WebAssembly 运行时。应用文档通过 sliver://app 提供;外部文档和云登录在系统浏览器中打开。破坏性操作保留主进程验证和审查流程。不要为了开发而削弱这些边界。
Sliver GUI 根据 GPL-3.0-or-later 许可。第三方组件(包括 HeroUI Pro)保留其自身条款。有关署名和分发限制,请参阅许可说明。